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