build.sh 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133
  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. build() {
  6. if command -v godep >/dev/null ; then
  7. godep=godep
  8. else
  9. echo "Warning: no godep, using \"go get\" instead."
  10. echo "Try \"go get github.com/tools/godep\"."
  11. go get -d ./cmd/syncthing
  12. godep=
  13. fi
  14. ${godep} go build $* -ldflags "-w -X main.Version $version" ./cmd/syncthing
  15. ${godep} go build -ldflags "-w -X main.Version $version" ./cmd/stcli
  16. }
  17. prepare() {
  18. go run cmd/assets/assets.go gui > auto/gui.files.go
  19. }
  20. test() {
  21. go test -cpu=1,2,4 ./...
  22. }
  23. sign() {
  24. if git describe --exact-match 2>/dev/null >/dev/null ; then
  25. # HEAD is a tag
  26. id=BCE524C7
  27. if gpg --list-keys "$id" >/dev/null 2>&1 ; then
  28. gpg -ab -u "$id" "$1"
  29. fi
  30. fi
  31. }
  32. tarDist() {
  33. name="$1"
  34. rm -rf "$name"
  35. mkdir -p "$name"
  36. cp syncthing "${distFiles[@]}" "$name"
  37. sign "$name/syncthing"
  38. tar zcvf "$name.tar.gz" "$name"
  39. rm -rf "$name"
  40. }
  41. zipDist() {
  42. name="$1"
  43. rm -rf "$name"
  44. mkdir -p "$name"
  45. cp syncthing.exe "${distFiles[@]}" "$name"
  46. sign "$name/syncthing.exe"
  47. zip -r "$name.zip" "$name"
  48. rm -rf "$name"
  49. }
  50. case "$1" in
  51. "")
  52. build
  53. ;;
  54. race)
  55. build -race
  56. ;;
  57. test)
  58. test
  59. ;;
  60. tar)
  61. rm -f *.tar.gz *.zip
  62. prepare
  63. test || exit 1
  64. build
  65. eval $(go env)
  66. name="syncthing-$GOOS-$GOARCH-$version"
  67. tarDist "$name"
  68. ;;
  69. all)
  70. rm -f *.tar.gz *.zip
  71. prepare
  72. test || exit 1
  73. for os in darwin-amd64 linux-386 linux-amd64 freebsd-amd64 windows-amd64 ; do
  74. export GOOS=${os%-*}
  75. export GOARCH=${os#*-}
  76. build
  77. name="syncthing-$os-$version"
  78. case $GOOS in
  79. windows)
  80. zipDist "$name"
  81. rm -f syncthing.exe
  82. ;;
  83. *)
  84. tarDist "$name"
  85. rm -f syncthing
  86. ;;
  87. esac
  88. done
  89. export GOOS=linux
  90. export GOARCH=arm
  91. export GOARM=7
  92. build
  93. tarDist "syncthing-linux-armv7-$version"
  94. export GOARM=6
  95. build
  96. tarDist "syncthing-linux-armv6-$version"
  97. ;;
  98. upload)
  99. tag=$(git describe)
  100. shopt -s nullglob
  101. for f in *.tar.gz *.zip *.asc ; do
  102. relup calmh/syncthing "$tag" "$f"
  103. done
  104. ;;
  105. *)
  106. echo "Unknown build parameter $1"
  107. ;;
  108. esac