You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

227 lines
12 KiB

  1. ##
  2. # Extra checks, because we do not use autoconf. Set extra_check to false if it is bothering you.
  3. ##
  4. extra_check = true
  5. go_min_version = 1.8.3
  6. gpg_key = 2122CBE9
  7. ifeq ($(extra_check),true)
  8. ifndef GOPATH
  9. $(error GOPATH not set)
  10. else
  11. go_version := $(shell go version | sed "s/^.* go\([0-9\.]*\) .*$$/\1/" )
  12. $(info Found go version $(go_version))
  13. go_version_check := $(shell echo -e "$(go_min_version)\n$(go_version)" | sort -V | head -1)
  14. ifneq ($(go_min_version),$(go_version_check))
  15. $(error go version go_min_version or above is required)
  16. endif
  17. endif
  18. gpg_check := $(shell gpg -K | grep '/$(gpg_key) ' | sed 's,^.*/\($(gpg_key)\) .*$$,\1,')
  19. ifneq ($(gpg_check),$(gpg_key))
  20. $(error GPG key $(gpg_key) not found.)
  21. else
  22. $(info GPG key $(gpg_key) found)
  23. endif
  24. ifndef GPG_PASSPHRASE
  25. $(error GPG_PASSPHRASE not set)
  26. endif
  27. endif
  28. ###
  29. # Here comes the real deal
  30. ###
  31. binaries = tendermint basecoin ethermint
  32. build-binaries = build-tendermint build-basecoin build-ethermint
  33. package-rpm = package-rpm-tendermint package-rpm-basecoin package-rpm-ethermint
  34. install-rpm = install-rpm-tendermint install-rpm-basecoin install-rpm-ethermint
  35. package-deb = package-deb-tendermint package-deb-basecoin package-deb-ethermint
  36. install-deb = install-deb-tendermint install-deb-basecoin install-deb-ethermint
  37. all: $(binaries)
  38. build: $(build-binaries)
  39. package: $(package-rpm) $(package-deb)
  40. install: $(install-rpm) $(install-deb)
  41. $(binaries): %: build-% package-rpm-% package-deb-%
  42. ###
  43. # Building the binaries is not in the spec file, because in the spec file you already need to know the version number
  44. ###
  45. build-tendermint:
  46. @echo "*** Building tendermint"
  47. go get -u github.com/tendermint/tendermint/cmd/tendermint
  48. @echo "*** Built tendermint"
  49. build-basecoin:
  50. @echo "*** Building basecoin"
  51. go get -u github.com/tendermint/basecoin/cmd/basecoin
  52. @echo "Building basecli"
  53. $(MAKE) -C $(GOPATH)/src/github.com/tendermint/basecoin get_vendor_deps
  54. go get -u github.com/tendermint/basecoin/cmd/basecli
  55. @echo "*** Built basecoin"
  56. build-ethermint:
  57. @echo "*** Building ethermint"
  58. go get -d -u github.com/tendermint/ethermint/cmd/ethermint
  59. $(MAKE) -C $(GOPATH)/src/github.com/tendermint/ethermint get_vendor_deps
  60. $(MAKE) -C $(GOPATH)/src/github.com/tendermint/ethermint build
  61. cp $(GOPATH)/src/github.com/tendermint/ethermint/build/ethermint $(GOPATH)/bin
  62. @echo "*** Built ethermint"
  63. version-%: $(GOPATH)/bin/%
  64. if [ -z "$(BUILD_NUMBER)" ]; then echo "BUILD_NUMBER not set" ; false ; fi
  65. $(eval $*_version=$(shell $< version | cut -d- -f1 ))
  66. prepare-spec-%: version-%
  67. mkdir -p {SPECS,tmp}
  68. echo "Version: $($*_version)" > SPECS/$*.spec
  69. echo "Release: $(BUILD_NUMBER)" >> SPECS/$*.spec
  70. cat spectemplates/$*.spec >> SPECS/$*.spec
  71. package-rpm-%: prepare-spec-%
  72. @echo "*** Packaging RPM $* version $($*_version)"
  73. rpmbuild -bb SPECS/$*.spec
  74. ./sign RPMS/x86_64/$*-$($*_version)-$(BUILD_NUMBER).x86_64.rpm
  75. rpm -Kv RPMS/x86_64/$*-$($*_version)-$(BUILD_NUMBER).x86_64.rpm
  76. @echo "*** Packaged RPM $* version $($*_version)"
  77. package-deb-%: version-%
  78. @echo "*** Packaging DEB $* version $($*_version)-$(BUILD_NUMBER)"
  79. echo "BUILD/$*-$($*_version) folder is generated by package-rpm-$*"
  80. test -d BUILD/$*-$($*_version)
  81. rm -rf BUILD/$*-$($*_version)-$(BUILD_NUMBER) tmp/_gpg tmp/_gpgbuilder tmp/debian-binary tmp/control.tar.gz tmp/data.tar.xz
  82. cp -r BUILD/$*-$($*_version) BUILD/$*-$($*_version)-$(BUILD_NUMBER)
  83. cp -r extrafiles/DEBIAN-$* BUILD/$*-$($*_version)-$(BUILD_NUMBER)/DEBIAN
  84. sed -i "s/@VERSION@/$($*_version)-$(BUILD_NUMBER)/" BUILD/$*-$($*_version)-$(BUILD_NUMBER)/DEBIAN/changelog
  85. sed -i "s/@STABILITY@/stable/" BUILD/$*-$($*_version)-$(BUILD_NUMBER)/DEBIAN/changelog
  86. sed -i "s/@DATETIMESTAMP@/`date +%a,\ %d\ %b\ %Y\ %T\ %z`/" BUILD/$*-$($*_version)-$(BUILD_NUMBER)/DEBIAN/changelog
  87. sed -i "s/@VERSION@/$($*_version)-$(BUILD_NUMBER)/" BUILD/$*-$($*_version)-$(BUILD_NUMBER)/DEBIAN/control
  88. rm -rf BUILD/$*-$($*_version)-$(BUILD_NUMBER)/usr/share/licenses
  89. mkdir -p BUILD/$*-$($*_version)-$(BUILD_NUMBER)/usr/share/doc/$*
  90. cp BUILD/$*-$($*_version)-$(BUILD_NUMBER)/DEBIAN/copyright BUILD/$*-$($*_version)-$(BUILD_NUMBER)/usr/share/doc/$*
  91. gzip -c BUILD/$*-$($*_version)-$(BUILD_NUMBER)/DEBIAN/changelog > BUILD/$*-$($*_version)-$(BUILD_NUMBER)/usr/share/doc/$*/changelog.Debian.gz
  92. gzip -c BUILD/$*-$($*_version)-$(BUILD_NUMBER)/DEBIAN/changelog > BUILD/$*-$($*_version)-$(BUILD_NUMBER)/usr/share/doc/$*/changelog.Debian.amd64.gz
  93. sed -i "s/@INSTALLEDSIZE@/`du -ks BUILD/$*-$($*_version)-$(BUILD_NUMBER) | cut -f 1`/" BUILD/$*-$($*_version)-$(BUILD_NUMBER)/DEBIAN/control
  94. cd BUILD/$*-$($*_version)-$(BUILD_NUMBER) && tar --owner=root --group=root -cvJf ../../tmp/data.tar.xz --exclude DEBIAN *
  95. cd BUILD/$*-$($*_version)-$(BUILD_NUMBER)/DEBIAN && tar --owner=root --group=root -cvzf ../../../tmp/control.tar.gz *
  96. echo "2.0" > tmp/debian-binary
  97. cp extrafiles/_gpg tmp/
  98. cd tmp && sed -i "s/@DATETIMESTAMP@/`date +%a\ %b\ %d\ %T\ %Y`/" _gpg
  99. cd tmp && sed -i "s/@BINMD5@/`md5sum debian-binary | cut -d\ -f1`/" _gpg
  100. cd tmp && sed -i "s/@BINSHA1@/`sha1sum debian-binary | cut -d\ -f1`/" _gpg
  101. cd tmp && sed -i "s/@BINSIZE@/`stat -c %s debian-binary | cut -d\ -f1`/" _gpg
  102. cd tmp && sed -i "s/@CONMD5@/`md5sum control.tar.gz | cut -d\ -f1`/" _gpg
  103. cd tmp && sed -i "s/@CONSHA1@/`sha1sum control.tar.gz | cut -d\ -f1`/" _gpg
  104. cd tmp && sed -i "s/@CONSIZE@/`stat -c %s control.tar.gz | cut -d\ -f1`/" _gpg
  105. cd tmp && sed -i "s/@DATMD5@/`md5sum data.tar.xz | cut -d\ -f1`/" _gpg
  106. cd tmp && sed -i "s/@DATSHA1@/`sha1sum data.tar.xz | cut -d\ -f1`/" _gpg
  107. cd tmp && sed -i "s/@DATSIZE@/`stat -c %s data.tar.xz | cut -d\ -f1`/" _gpg
  108. gpg --batch --passphrase "$(GPG_PASSPHRASE)" --clearsign tmp/_gpg
  109. mv tmp/_gpg.asc tmp/_gpgbuilder
  110. ar r tmp/$*-$($*_version)-$(BUILD_NUMBER)_amd64.deb tmp/debian-binary tmp/control.tar.gz tmp/data.tar.xz tmp/_gpgbuilder
  111. mv tmp/$*-$($*_version)-$(BUILD_NUMBER)_amd64.deb RPMS/
  112. rm tmp/debian-binary tmp/control.tar.gz tmp/data.tar.xz tmp/_gpgbuilder tmp/_gpg
  113. @echo "*** Packaged DEB $* version $($*_version)-$(BUILD_NUMBER)"
  114. install-rpm-%: version-%
  115. #Make sure your host has the IAM role to read/write the S3 bucket OR that you set up ~/.boto
  116. @echo "*** Uploading $*-$($*_version)-$(BUILD_NUMBER).x86_64.rpm to AWS CentOS repository"
  117. aws s3 sync s3://tendermint-packages/centos/ tmp/s3/ --delete
  118. mkdir -p tmp/s3/7/os/x86_64/Packages
  119. cp RPMS/x86_64/$*-$($*_version)-$(BUILD_NUMBER).x86_64.rpm tmp/s3/7/os/x86_64/Packages
  120. cp repofiles/RPM-GPG-KEY-Tendermint tmp/s3/7/os/x86_64/
  121. cp repofiles/tendermint.repo tmp/s3/7/os/x86_64/
  122. rm -f tmp/s3/7/os/x86_64/repodata/*.bz2 tmp/s3/7/os/x86_64/repodata/*.gz tmp/s3/7/os/x86_64/repodata/repomd.xml.asc
  123. createrepo tmp/s3/7/os/x86_64/Packages -u http://tendermint-packages.s3-website-us-west-1.amazonaws.com/centos/7/os/x86_64/Packages -o tmp/s3/7/os/x86_64 --update -S --repo Tendermint --content tendermint --content basecoin --content ethermint
  124. gpg --batch --passphrase "$(GPG_PASSPHRASE)" --detach-sign -a tmp/s3/7/os/x86_64/repodata/repomd.xml
  125. aws s3 sync tmp/s3/ s3://tendermint-packages/centos/ --delete --acl public-read
  126. @echo "*** Uploaded $* to AWS CentOS repository"
  127. install-deb-%: version-%
  128. @echo "*** Uploading $*-$($*_version)-$(BUILD_NUMBER)_amd64.deb to AWS Debian repository"
  129. @echo "Testing if $*-$($*_version)-$(BUILD_NUMBER)_amd64.deb is already uploaded"
  130. test ! -f tmp/debian-s3/pool/$*-$($*_version)-$(BUILD_NUMBER)_amd64.deb
  131. aws s3 sync s3://tendermint-packages/debian/ tmp/debian-s3/ --delete
  132. @echo "Testing if $*-$($*_version)-$(BUILD_NUMBER)_amd64.deb is already uploaded"
  133. test ! -f tmp/debian-s3/pool/$*-$($*_version)-$(BUILD_NUMBER)_amd64.deb
  134. mkdir -p tmp/debian-s3/pool tmp/debian-s3/dists/stable/main/binary-amd64
  135. cp RPMS/$*-$($*_version)-$(BUILD_NUMBER)_amd64.deb tmp/debian-s3/pool
  136. cp repofiles/Release_amd64 tmp/debian-s3/dists/stable/main/binary-amd64/Release
  137. #Packages / Packages.gz
  138. echo > tmp/Package
  139. echo "Filename: pool/$*-$($*_version)-$(BUILD_NUMBER)_amd64.deb" >> tmp/Package
  140. echo "MD5sum: `md5sum RPMS/$*-$($*_version)-$(BUILD_NUMBER)_amd64.deb | cut -d\ -f 1`" >> tmp/Package
  141. echo "SHA1: `sha1sum RPMS/$*-$($*_version)-$(BUILD_NUMBER)_amd64.deb | cut -d\ -f 1`" >> tmp/Package
  142. echo "SHA256: `sha256sum RPMS/$*-$($*_version)-$(BUILD_NUMBER)_amd64.deb | cut -d\ -f 1`" >> tmp/Package
  143. echo "Size: `stat -c %s RPMS/$*-$($*_version)-$(BUILD_NUMBER)_amd64.deb | cut -d\ -f 1`" >> tmp/Package
  144. cat BUILD/$*-$($*_version)-$(BUILD_NUMBER)/DEBIAN/control >> tmp/Package
  145. cat tmp/Package >> tmp/debian-s3/dists/stable/main/binary-amd64/Packages
  146. rm -f tmp/debian-s3/dists/stable/main/binary-amd64/Packages.gz
  147. gzip -c tmp/debian-s3/dists/stable/main/binary-amd64/Packages > tmp/debian-s3/dists/stable/main/binary-amd64/Packages.gz
  148. rm -f tmp/Package
  149. #main / Release / InRelease / Release.gpg
  150. cp repofiles/Release tmp/debian-s3/dists/stable/main/Release
  151. rm -f tmp/debian-s3/dists/stable/main/InRelease
  152. rm -f tmp/debian-s3/dists/stable/main/Release.gpg
  153. echo "MD5Sum:" >> tmp/debian-s3/dists/stable/main/Release
  154. cd tmp/debian-s3/dists/stable/main && for f in `find . -type f | sed 's/^.\///'` ; do test "$$f" == "Release" && continue ; echo -n " " ; md5sum $$f | sed "s/ / `stat -c %s $$f` /" ; done >> Release
  155. echo "SHA1:" >> tmp/debian-s3/dists/stable/main/Release
  156. cd tmp/debian-s3/dists/stable/main && for f in `find . -type f | sed 's/^.\///'` ; do test "$$f" == "Release" && continue ; echo -n " " ; sha1sum $$f | sed "s/ / `stat -c %s $$f` /" ; done >> Release
  157. echo "SHA256:" >> tmp/debian-s3/dists/stable/main/Release
  158. cd tmp/debian-s3/dists/stable/main && for f in `find . -type f | sed 's/^.\///'` ; do test "$$f" == "Release" && continue ; echo -n " " ; sha256sum $$f | sed "s/ / `stat -c %s $$f` /" ; done >> Release
  159. gpg --batch --passphrase "$(GPG_PASSPHRASE)" --digest-algo SHA256 -b -a tmp/debian-s3/dists/stable/main/Release
  160. mv tmp/debian-s3/dists/stable/main/Release.asc tmp/debian-s3/dists/stable/main/Release.gpg
  161. gpg --batch --passphrase "$(GPG_PASSPHRASE)" --digest-algo SHA512 --clearsign tmp/debian-s3/dists/stable/main/Release
  162. mv tmp/debian-s3/dists/stable/main/Release.asc tmp/debian-s3/dists/stable/main/InRelease
  163. #stable / Release / InRelease / Release.gpg
  164. cp repofiles/Release tmp/debian-s3/dists/stable/Release
  165. rm -f tmp/debian-s3/dists/stable/InRelease
  166. rm -f tmp/debian-s3/dists/stable/Release.gpg
  167. echo "MD5Sum:" >> tmp/debian-s3/dists/stable/Release
  168. cd tmp/debian-s3/dists/stable && for f in `find . -type f | sed 's/^.\///'` ; do test "$$f" == "Release" && continue ; echo -n " " ; md5sum $$f | sed "s/ / `stat -c %s $$f` /" ; done >> Release
  169. echo "SHA1:" >> tmp/debian-s3/dists/stable/Release
  170. cd tmp/debian-s3/dists/stable && for f in `find . -type f | sed 's/^.\///'` ; do test "$$f" == "Release" && continue ; echo -n " " ; sha1sum $$f | sed "s/ / `stat -c %s $$f` /" ; done >> Release
  171. echo "SHA256:" >> tmp/debian-s3/dists/stable/Release
  172. cd tmp/debian-s3/dists/stable && for f in `find . -type f | sed 's/^.\///'` ; do test "$$f" == "Release" && continue ; echo -n " " ; sha256sum $$f | sed "s/ / `stat -c %s $$f` /" ; done >> Release
  173. gpg --batch --passphrase "$(GPG_PASSPHRASE)" --digest-algo SHA256 -b -a tmp/debian-s3/dists/stable/Release
  174. mv tmp/debian-s3/dists/stable/Release.asc tmp/debian-s3/dists/stable/Release.gpg
  175. gpg --batch --passphrase "$(GPG_PASSPHRASE)" --digest-algo SHA512 --clearsign tmp/debian-s3/dists/stable/Release
  176. mv tmp/debian-s3/dists/stable/Release.asc tmp/debian-s3/dists/stable/InRelease
  177. aws s3 sync tmp/debian-s3/ s3://tendermint-packages/debian/ --delete --acl public-read
  178. @echo "*** Uploaded $*-$($*_version)-$(BUILD_NUMBER)_amd64.deb to AWS Debian repository"
  179. mostlyclean:
  180. rm -rf {BUILDROOT,SOURCES,SPECS,SRPMS,tmp}
  181. clean: mostlyclean
  182. rm -rf {BUILD,RPMS}
  183. distclean: clean
  184. rm -rf $(GOPATH)/src/github.com/tendermint/tendermint
  185. rm -rf $(GOPATH)/src/github.com/tendermint/basecoin
  186. rm -rf $(GOPATH)/src/github.com/tendermint/ethermint
  187. rm -rf $(GOPATH)/bin/tendermint
  188. rm -rf $(GOPATH)/bin/basecoin
  189. rm -rf $(GOPATH)/bin/basecli
  190. rm -rf $(GOPATH)/bin/ethermint
  191. .PHONY : clean