build.sh 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179
  1. #!/usr/bin/env bash
  2. export COPYFILE_DISABLE=true
  3. distFiles=(README.md LICENSE) # apart from the binary itself
  4. version=$(git describe --always --dirty)
  5. date=$(git show -s --format=%ct)
  6. user=$(whoami)
  7. host=$(hostname)
  8. host=${host%%.*}
  9. ldflags="-w -X main.Version $version -X main.BuildStamp $date -X main.BuildUser $user -X main.BuildHost $host"
  10. check() {
  11. if ! command -v godep >/dev/null ; then
  12. echo "Error: no godep. Try \"$0 setup\"."
  13. exit 1
  14. fi
  15. }
  16. build() {
  17. check
  18. go vet ./...
  19. godep go build $* -ldflags "$ldflags" ./cmd/syncthing
  20. }
  21. assets() {
  22. check
  23. godep go run cmd/assets/assets.go gui > auto/gui.files.go
  24. }
  25. test() {
  26. check
  27. godep go test -cpu=1,2,4 ./...
  28. }
  29. sign() {
  30. if git describe --exact-match 2>/dev/null >/dev/null ; then
  31. # HEAD is a tag
  32. id=BCE524C7
  33. if gpg --list-keys "$id" >/dev/null 2>&1 ; then
  34. gpg -ab -u "$id" "$1"
  35. fi
  36. fi
  37. }
  38. tarDist() {
  39. name="$1"
  40. rm -rf "$name"
  41. mkdir -p "$name"
  42. cp syncthing "${distFiles[@]}" "$name"
  43. sign "$name/syncthing"
  44. tar zcvf "$name.tar.gz" "$name"
  45. rm -rf "$name"
  46. }
  47. zipDist() {
  48. name="$1"
  49. rm -rf "$name"
  50. mkdir -p "$name"
  51. cp syncthing.exe "${distFiles[@]}" "$name"
  52. sign "$name/syncthing.exe"
  53. zip -r "$name.zip" "$name"
  54. rm -rf "$name"
  55. }
  56. deps() {
  57. check
  58. godep save ./cmd/syncthing ./cmd/assets ./discover/cmd/discosrv
  59. }
  60. setup() {
  61. echo Installing godep...
  62. go get -u github.com/tools/godep
  63. echo Installing go vet...
  64. go get -u code.google.com/p/go.tools/cmd/vet
  65. }
  66. case "$1" in
  67. "")
  68. shift
  69. build $*
  70. ;;
  71. race)
  72. build -race
  73. ;;
  74. guidev)
  75. build -tags guidev
  76. ;;
  77. test)
  78. test
  79. ;;
  80. tar)
  81. rm -f *.tar.gz *.zip
  82. test || exit 1
  83. assets
  84. build
  85. eval $(go env)
  86. name="syncthing-$GOOS-$GOARCH-$version"
  87. tarDist "$name"
  88. ;;
  89. all)
  90. rm -f *.tar.gz *.zip
  91. test || exit 1
  92. assets
  93. for os in darwin-amd64 linux-386 linux-amd64 freebsd-amd64 windows-amd64 windows-386 ; do
  94. export GOOS=${os%-*}
  95. export GOARCH=${os#*-}
  96. build
  97. name="syncthing-$os-$version"
  98. case $GOOS in
  99. windows)
  100. zipDist "$name"
  101. rm -f syncthing.exe
  102. ;;
  103. *)
  104. tarDist "$name"
  105. rm -f syncthing
  106. ;;
  107. esac
  108. done
  109. export GOOS=linux
  110. export GOARCH=arm
  111. origldflags="$ldflags"
  112. export GOARM=7
  113. ldflags="$origldflags -X main.GoArchExtra v7"
  114. build
  115. tarDist "syncthing-linux-armv7-$version"
  116. export GOARM=6
  117. ldflags="$origldflags -X main.GoArchExtra v6"
  118. build
  119. tarDist "syncthing-linux-armv6-$version"
  120. export GOARM=5
  121. ldflags="$origldflags -X main.GoArchExtra v5"
  122. build
  123. tarDist "syncthing-linux-armv5-$version"
  124. ;;
  125. upload)
  126. tag=$(git describe)
  127. shopt -s nullglob
  128. for f in *.tar.gz *.zip *.asc ; do
  129. relup calmh/syncthing "$tag" "$f"
  130. done
  131. ;;
  132. deps)
  133. deps
  134. ;;
  135. assets)
  136. assets
  137. ;;
  138. setup)
  139. setup
  140. ;;
  141. *)
  142. echo "Unknown build parameter $1"
  143. ;;
  144. esac