github.com/evdatsion/aphelion-dpos-bft@v0.32.1/tools/build/Makefile (about) 1 ## 2 # Extra checks, because we do not use autoconf. 3 ## 4 5 requirements_check = true 6 gpg_check = false 7 go_min_version = 1.12.0 8 gpg_key = 2122CBE9 9 10 ifeq ($(requirements_check),true) 11 ifndef GOPATH 12 $(error GOPATH not set) 13 else 14 go_version := $(shell go version | sed "s/^.* go\([0-9\.]*\) .*$$/\1/" ) 15 $(info Found go version $(go_version)) 16 go_version_check := $(shell echo -e "$(go_min_version)\n$(go_version)" | sort -V | head -1) 17 ifneq ($(go_min_version),$(go_version_check)) 18 $(error go version go_min_version or above is required) 19 endif 20 endif 21 ifeq ($(gpg_check),true) 22 gpg_check := $(shell gpg -K | grep '/$(gpg_key) ' | sed 's,^.*/\($(gpg_key)\) .*$$,\1,') 23 ifneq ($(gpg_check),$(gpg_key)) 24 $(error GPG key $(gpg_key) not found.) 25 else 26 $(info GPG key $(gpg_key) found) 27 endif 28 ifndef GPG_PASSPHRASE 29 $(error GPG_PASSPHRASE not set) 30 endif 31 endif 32 endif 33 34 ### 35 # Here comes the real deal 36 ### 37 38 binaries = tendermint basecoind ethermint gaia 39 build-binaries = build-tendermint build-basecoind build-ethermint build-gaia 40 package-rpm = package-rpm-tendermint package-rpm-basecoind package-rpm-ethermint package-rpm-gaia 41 install-rpm = install-rpm-tendermint install-rpm-basecoind install-rpm-ethermint install-rpm-gaia 42 package-deb = package-deb-tendermint package-deb-basecoind package-deb-ethermint package-deb-gaia 43 install-deb = install-deb-tendermint install-deb-basecoind install-deb-ethermint install-deb-gaia 44 45 all: $(binaries) 46 build: $(build-binaries) 47 package: $(package-rpm) $(package-deb) 48 install: $(install-rpm) $(install-deb) 49 $(binaries): %: build-% package-rpm-% package-deb-% 50 51 ### 52 # Build the binaries 53 ### 54 55 git-branch: 56 $(eval GIT_BRANCH=$(shell echo $${GIT_BRANCH:-master})) 57 58 gopath-setup: 59 test -d $(GOPATH) || mkdir -p $(GOPATH) 60 test -d $(GOPATH)/bin || mkdir -p $(GOPATH)/bin 61 test -d $(GOPATH)/src || mkdir -p $(GOPATH)/src 62 63 build-tendermint: git-branch gopath-setup 64 @echo "*** Building tendermint" 65 go get -d -u github.com/evdatsion/aphelion-dpos-bft/cmd 66 cd $(GOPATH)/src/github.com/evdatsion/aphelion-dpos-bft && git checkout "$(GIT_BRANCH)" && git pull 67 export PATH=$(GOPATH)/bin:$(PATH) && $(MAKE) -C $(GOPATH)/src/github.com/evdatsion/aphelion-dpos-bft get_tools build 68 cp $(GOPATH)/src/github.com/evdatsion/aphelion-dpos-bft/buildbin 69 @echo "*** Built tendermint" 70 71 build-ethermint: git-branch gopath-setup 72 @echo "*** Building ethermint" 73 go get -d -u github.com/evdatsion/ethermint/cmd/ethermint 74 cd $(GOPATH)/src/github.com/evdatsion/ethermint && git checkout "$(GIT_BRANCH)" && git pull 75 export PATH=$(GOPATH)/bin:$(PATH) && $(MAKE) -C $(GOPATH)/src/github.com/evdatsion/ethermint build 76 cp $(GOPATH)/src/github.com/evdatsion/ethermint/build/ethermint $(GOPATH)/bin 77 @echo "*** Built ethermint" 78 79 build-gaia: git-branch gopath-setup 80 @echo "*** Building gaia" 81 go get -d -u go github.com/cosmos/gaia || echo "Workaround for go downloads." 82 cd $(GOPATH)/src/github.com/cosmos/gaia && git checkout "$(GIT_BRANCH)" && git pull 83 export PATH=$(GOPATH)/bin:$(PATH) && $(MAKE) -C $(GOPATH)/src/github.com/cosmos/gaia install 84 @echo "*** Built gaia" 85 86 build-basecoind: git-branch gopath-setup 87 @echo "*** Building basecoind from cosmos-sdk" 88 go get -d -u github.com/cosmos/cosmos-sdk/examples/basecoin/cmd/basecoind 89 cd $(GOPATH)/src/github.com/cosmos/cosmos-sdk && git checkout "$(GIT_BRANCH)" && git pull 90 export PATH=$(GOPATH)/bin:$(PATH) && $(MAKE) -C $(GOPATH)/src/github.com/cosmos/cosmos-sdk get_tools build 91 cp $(GOPATH)/src/github.com/cosmos/cosmos-sdk/build/basecoind $(GOPATH)/bin/basecoind 92 @echo "*** Built basecoind from cosmos-sdk" 93 94 ### 95 # Prepare package files 96 ### 97 98 # set app_version 99 version-%: 100 @echo "Checking if binary exists" 101 test -f $(GOPATH)/bin/$* 102 @echo "BUILD_NUMBER is $(BUILD_NUMBER)" 103 test -n "$(BUILD_NUMBER)" 104 $(eval $*_version=$(shell $(GOPATH)/bin/$* version | head -1 | cut -d- -f1 | sed 's/^\(ethermint:\s*\|\)\(v\|\)//' | tr -d '\t ' )) 105 106 # set build_folder 107 folder-%: version-% 108 $(eval build_folder=BUILD/$*-$($*_version)-$(BUILD_NUMBER)) 109 110 # clean up folder structure for package files 111 prepare-files = rm -rf $(build_folder) && mkdir -p $(build_folder) && cp -r ./$(1)/* $(build_folder) && mkdir -p $(build_folder)/usr/bin && cp $(GOPATH)/bin/$(1) $(build_folder)/usr/bin 112 113 ## 114 ## Package customizations for the different applications 115 ## 116 117 prepare-tendermint = 118 prepare-ethermint = mkdir -p $(build_folder)/etc/ethermint && \ 119 cp $(GOPATH)/src/github.com/evdatsion/ethermint/setup/genesis.json $(build_folder)/etc/ethermint/genesis.json && \ 120 cp -r $(GOPATH)/src/github.com/evdatsion/ethermint/setup/keystore $(build_folder)/etc/ethermint 121 prepare-gaia = 122 prepare-basecoind = cp $(GOPATH)/bin/basecoind $(build_folder)/usr/bin 123 124 ### 125 # Package the binary for CentOS/RedHat (RPM) and Debian/Ubuntu (DEB) 126 ### 127 128 # Depends on rpmbuild, sorry, this can only be built on CentOS/RedHat machines. 129 package-rpm-%: folder-% 130 @echo "*** Packaging RPM $* version $($*_version)" 131 132 $(call prepare-files,$*) 133 $(call prepare-$*) 134 135 rm -rf $(build_folder)/DEBIAN 136 mkdir -p $(build_folder)/usr/share/licenses/$* 137 cp ./LICENSE $(build_folder)/usr/share/licenses/$*/LICENSE 138 chmod -Rf a+rX,u+w,g-w,o-w $(build_folder) 139 140 mkdir -p {SPECS,tmp} 141 142 ./generate-spec $* spectemplates SPECS 143 sed -i "s/@VERSION@/$($*_version)/" SPECS/$*.spec 144 sed -i "s/@BUILD_NUMBER@/$(BUILD_NUMBER)/" SPECS/$*.spec 145 sed -i "s/@PACKAGE_NAME@/$*/" SPECS/$*.spec 146 147 rpmbuild -bb SPECS/$*.spec --define "_topdir `pwd`" --define "_tmppath `pwd`/tmp" 148 ./sign RPMS/x86_64/$*-$($*_version)-$(BUILD_NUMBER).x86_64.rpm "$(gpg_key)" "`which gpg`" 149 rpm -Kv RPMS/x86_64/$*-$($*_version)-$(BUILD_NUMBER).x86_64.rpm || echo "rpm returns non-zero exist for some reason. ($?)" 150 @echo "*** Packaged RPM $* version $($*_version)" 151 152 package-deb-%: folder-% 153 @echo "*** Packaging DEB $* version $($*_version)-$(BUILD_NUMBER)" 154 155 $(call prepare-files,$*) 156 $(call prepare-$*) 157 158 mkdir -p $(build_folder)/usr/share/doc/$* 159 cp $(build_folder)/DEBIAN/copyright $(build_folder)/usr/share/doc/$* 160 chmod -Rf a+rX,u+w,g-w,o-w $(build_folder) 161 162 sed -i "s/@VERSION@/$($*_version)-$(BUILD_NUMBER)/" $(build_folder)/DEBIAN/changelog 163 sed -i "s/@STABILITY@/stable/" $(build_folder)/DEBIAN/changelog 164 sed -i "s/@DATETIMESTAMP@/`date +%a,\ %d\ %b\ %Y\ %T\ %z`/" $(build_folder)/DEBIAN/changelog 165 sed -i "s/@VERSION@/$($*_version)-$(BUILD_NUMBER)/" $(build_folder)/DEBIAN/control 166 167 gzip -c $(build_folder)/DEBIAN/changelog > $(build_folder)/usr/share/doc/$*/changelog.Debian.gz 168 gzip -c $(build_folder)/DEBIAN/changelog > $(build_folder)/usr/share/doc/$*/changelog.Debian.amd64.gz 169 sed -i "s/@INSTALLEDSIZE@/`du -ks $(build_folder) | cut -f 1`/" $(build_folder)/DEBIAN/control 170 171 cd $(build_folder) && tar --owner=root --group=root -cvJf ../../tmp/data.tar.xz --exclude DEBIAN * 172 cd $(build_folder)/DEBIAN && tar --owner=root --group=root -cvzf ../../../tmp/control.tar.gz * 173 echo "2.0" > tmp/debian-binary 174 175 cp ./_gpg tmp/ 176 cd tmp && sed -i "s/@DATETIMESTAMP@/`date +%a\ %b\ %d\ %T\ %Y`/" _gpg 177 cd tmp && sed -i "s/@BINMD5@/`md5sum debian-binary | cut -d\ -f1`/" _gpg 178 cd tmp && sed -i "s/@BINSHA1@/`sha1sum debian-binary | cut -d\ -f1`/" _gpg 179 cd tmp && sed -i "s/@BINSIZE@/`stat -c %s debian-binary | cut -d\ -f1`/" _gpg 180 cd tmp && sed -i "s/@CONMD5@/`md5sum control.tar.gz | cut -d\ -f1`/" _gpg 181 cd tmp && sed -i "s/@CONSHA1@/`sha1sum control.tar.gz | cut -d\ -f1`/" _gpg 182 cd tmp && sed -i "s/@CONSIZE@/`stat -c %s control.tar.gz | cut -d\ -f1`/" _gpg 183 cd tmp && sed -i "s/@DATMD5@/`md5sum data.tar.xz | cut -d\ -f1`/" _gpg 184 cd tmp && sed -i "s/@DATSHA1@/`sha1sum data.tar.xz | cut -d\ -f1`/" _gpg 185 cd tmp && sed -i "s/@DATSIZE@/`stat -c %s data.tar.xz | cut -d\ -f1`/" _gpg 186 gpg --batch --passphrase "$(GPG_PASSPHRASE)" --clearsign tmp/_gpg 187 mv tmp/_gpg.asc tmp/_gpgbuilder 188 ar r tmp/$*-$($*_version)-$(BUILD_NUMBER)_amd64.deb tmp/debian-binary tmp/control.tar.gz tmp/data.tar.xz tmp/_gpgbuilder 189 mv tmp/$*-$($*_version)-$(BUILD_NUMBER)_amd64.deb RPMS/ 190 rm tmp/debian-binary tmp/control.tar.gz tmp/data.tar.xz tmp/_gpgbuilder tmp/_gpg 191 @echo "*** Packaged DEB $* version $($*_version)-$(BUILD_NUMBER)" 192 193 install-rpm-%: version-% 194 #Make sure your host has the IAM role to read/write the S3 bucket OR that you set up ~/.boto 195 @echo "*** Uploading $*-$($*_version)-$(BUILD_NUMBER).x86_64.rpm to AWS $(DEVOPS_PATH)CentOS repository" 196 aws s3 sync s3:/(DEVOPS_PATH)centos/ tmp/s3/ --delete 197 mkdir -p tmp/s3/7/os/x86_64/Packages 198 cp RPMS/x86_64/$*-$($*_version)-$(BUILD_NUMBER).x86_64.rpm tmp/s3/7/os/x86_64/Packages 199 cp ./RPM-GPG-KEY-Tendermint tmp/s3/7/os/x86_64/ 200 cp .3/7/os/x86_64/ 201 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 202 createrepo tmp/s3/7/os/x86_64/Packages -u https:/nterblock.io/$(DEVOPS_PATH)centos/7/os/x86_64/Packages -o tmp/s3/7/os/x86_64 --update -S --repo Tendermint --content tendermint --content basecoind --content ethermint 203 gpg --batch --passphrase "$(GPG_PASSPHRASE)" --detach-sign -a tmp/s3/7/os/x86_64/repodata/repomd.xml 204 aws s3 sync tmp/s3/ s3:/(DEVOPS_PATH)centos/ --delete --acl public-read 205 @echo "*** Uploaded $* to AWS $(DEVOPS_PATH)CentOS repository" 206 207 install-deb-%: version-% 208 @echo "*** Uploading $*-$($*_version)-$(BUILD_NUMBER)_amd64.deb to AWS $(DEVOPS_PATH)Debian repository" 209 @echo "Testing if $*-$($*_version)-$(BUILD_NUMBER)_amd64.deb is already uploaded" 210 test ! -f tmp/debian-s3/pool/$*-$($*_version)-$(BUILD_NUMBER)_amd64.deb 211 aws s3 sync s3:/(DEVOPS_PATH)debian/ tmp/debian-s3/ --delete 212 @echo "Testing if $*-$($*_version)-$(BUILD_NUMBER)_amd64.deb is already uploaded" 213 test ! -f tmp/debian-s3/pool/$*-$($*_version)-$(BUILD_NUMBER)_amd64.deb 214 cp .ebian-s3/ 215 mkdir -p tmp/debian-s3/pool tmp/debian-s3/dists/stable/main/binary-amd64 216 cp RPMS/$*-$($*_version)-$(BUILD_NUMBER)_amd64.deb tmp/debian-s3/pool 217 cp ./Release_amd64 tmp/debian-s3/dists/stable/main/binary-amd64/Release 218 219 #Packages / Packages.gz 220 221 echo > tmp/Package 222 echo "Filename: pool/$*-$($*_version)-$(BUILD_NUMBER)_amd64.deb" >> tmp/Package 223 echo "MD5sum: `md5sum RPMS/$*-$($*_version)-$(BUILD_NUMBER)_amd64.deb | cut -d\ -f 1`" >> tmp/Package 224 echo "SHA1: `sha1sum RPMS/$*-$($*_version)-$(BUILD_NUMBER)_amd64.deb | cut -d\ -f 1`" >> tmp/Package 225 echo "SHA256: `sha256sum RPMS/$*-$($*_version)-$(BUILD_NUMBER)_amd64.deb | cut -d\ -f 1`" >> tmp/Package 226 echo "Size: `stat -c %s RPMS/$*-$($*_version)-$(BUILD_NUMBER)_amd64.deb | cut -d\ -f 1`" >> tmp/Package 227 cat BUILD/$*-$($*_version)-$(BUILD_NUMBER)/DEBIAN/control >> tmp/Package 228 229 cat tmp/Package >> tmp/debian-s3/dists/stable/main/binary-amd64/Packages 230 rm -f tmp/debian-s3/dists/stable/main/binary-amd64/Packages.gz 231 gzip -c tmp/debian-s3/dists/stable/main/binary-amd64/Packages > tmp/debian-s3/dists/stable/main/binary-amd64/Packages.gz 232 rm -f tmp/Package 233 234 #main / Release / InRelease / Release.gpg 235 236 cp ./Release tmp/debian-s3/dists/stable/main/Release 237 rm -f tmp/debian-s3/dists/stable/main/InRelease 238 rm -f tmp/debian-s3/dists/stable/main/Release.gpg 239 240 echo "MD5Sum:" >> tmp/debian-s3/dists/stable/main/Release 241 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 242 echo "SHA1:" >> tmp/debian-s3/dists/stable/main/Release 243 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 244 echo "SHA256:" >> tmp/debian-s3/dists/stable/main/Release 245 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 246 247 gpg --batch --passphrase "$(GPG_PASSPHRASE)" --digest-algo SHA256 -b -a tmp/debian-s3/dists/stable/main/Release 248 mv tmp/debian-s3/dists/stable/main/Release.asc tmp/debian-s3/dists/stable/main/Release.gpg 249 gpg --batch --passphrase "$(GPG_PASSPHRASE)" --digest-algo SHA512 --clearsign tmp/debian-s3/dists/stable/main/Release 250 mv tmp/debian-s3/dists/stable/main/Release.asc tmp/debian-s3/dists/stable/main/InRelease 251 252 #stable / Release / InRelease / Release.gpg 253 254 cp ./Release tmp/debian-s3/dists/stable/Release 255 rm -f tmp/debian-s3/dists/stable/InRelease 256 rm -f tmp/debian-s3/dists/stable/Release.gpg 257 258 echo "MD5Sum:" >> tmp/debian-s3/dists/stable/Release 259 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 260 echo "SHA1:" >> tmp/debian-s3/dists/stable/Release 261 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 262 echo "SHA256:" >> tmp/debian-s3/dists/stable/Release 263 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 264 265 gpg --batch --passphrase "$(GPG_PASSPHRASE)" --digest-algo SHA256 -b -a tmp/debian-s3/dists/stable/Release 266 mv tmp/debian-s3/dists/stable/Release.asc tmp/debian-s3/dists/stable/Release.gpg 267 gpg --batch --passphrase "$(GPG_PASSPHRASE)" --digest-algo SHA512 --clearsign tmp/debian-s3/dists/stable/Release 268 mv tmp/debian-s3/dists/stable/Release.asc tmp/debian-s3/dists/stable/InRelease 269 270 aws s3 sync tmp/debian-s3/ s3:/(DEVOPS_PATH)debian/ --delete --acl public-read 271 @echo "*** Uploaded $*-$($*_version)-$(BUILD_NUMBER)_amd64.deb to AWS $(DEVOPS_PATH)Debian repository" 272 273 mostlyclean: 274 rm -rf {BUILDROOT,SOURCES,SPECS,SRPMS,tmp} 275 276 clean: mostlyclean 277 rm -rf {BUILD,RPMS} 278 279 distclean: clean 280 rm -rf $(GOPATH)/src/github.com/evdatsion/aphelion-dpos-bft 281 rm -rf $(GOPATH)/src/github.com/cosmos/cosmos-sdk 282 rm -rf $(GOPATH)/src/github.com/evdatsion/ethermint 283 rm -rf $(GOPATH)/bin 284 rm -rf $(GOPATH)/bin/basecoind 285 rm -rf $(GOPATH)/bin/ethermint 286 rm -rf $(GOPATH)/bin/gaia 287 288 .PHONY : clean 289