Gitweb:
http://git.fedorahosted.org/git/cluster.git?p=cluster.git;a=commitdiff;h=...
Commit: 689d4267ec0b32f3bdc2db32265e3bd5dc0081f5
Parent: dc37a1fe8217a5e29d6b0c5377761cb7f745492a
Author: Fabio M. Di Nitto <fdinitto(a)redhat.com>
AuthorDate: Tue Feb 16 12:25:55 2010 +0100
Committer: Fabio M. Di Nitto <fdinitto(a)redhat.com>
CommitterDate: Tue Feb 16 12:25:55 2010 +0100
release script rework
- build .bz2 tarballs
- push changelog to the release area
- create sha256 file to verify checksums
- sign sha256 with gpg
Signed-off-by: Fabio M. Di Nitto <fdinitto(a)redhat.com>
---
make/release.mk | 295 ++++++++++++++++++++++++++++++++++---------------------
1 files changed, 181 insertions(+), 114 deletions(-)
diff --git a/make/release.mk b/make/release.mk
index 0bfb217..5aae153 100644
--- a/make/release.mk
+++ b/make/release.mk
@@ -1,135 +1,202 @@
-# NOTE: this make file snippet is only used by the release manager
+# NOTE: this make file snippet is only used by the release managers
# to build official release tarballs, handle tagging and publish.
#
+# this script is NOT "make -j" safe
+#
# do _NOT_ use for anything else!!!!!!!!!
-## do sanity checks
-
-ifndef VERSION
-
-all:
- @echo WARNING: VERSION= is not defined!
- @exit 1
-
-else ifndef OLDVER
-
-all:
- @echo WARNING: OLDVER= is not defined!
- @exit 1
-
+# setup tons of vars
+
+# signing key
+gpgsignkey=0x6CE95CA7
+
+# project layout
+project=cluster
+projectver=$(project)-$(version)
+projecttar=$(projectver).tar
+projectgz=$(projecttar).gz
+projectbz=$(projecttar).bz2
+
+fenceproject=fence-agents
+fenceprojectver=$(fenceproject)-$(version)
+fenceprojecttar=$(fenceprojectver).tar
+fenceprojectgz=$(fenceprojecttar).gz
+fenceprojectbz=$(fenceprojecttar).bz2
+
+rasproject=resource-agents
+rasprojectver=$(rasproject)-$(version)
+rasprojecttar=$(rasprojectver).tar
+rasprojectgz=$(rasprojecttar).gz
+rasprojectbz=$(rasprojecttar).bz2
+
+rgmproject=rgmanager
+rgmprojectver=$(rgmproject)-$(version)
+rgmprojecttar=$(rgmprojectver).tar
+rgmprojectgz=$(rgmprojecttar).gz
+rgmprojectbz=$(rgmprojecttar).bz2
+
+# temp dirs
+
+ifdef release
+reldir=release
+gitver=$(projectver)
+forceclean=clean
else
+reldir=release-candidate
+gitver=HEAD
+forceclean=
+endif
-## setup stuff
+releasearea=$(shell pwd)/../$(projectver)-$(reldir)
-MASTERPROJECT=cluster
+all: $(forceclean) checks setup tag tarballs changelog sha256 sign
-ifdef RELEASE
-MASTERPV=$(MASTERPROJECT)-$(VERSION)
-TEST=""
-else
-MASTERPV=HEAD
-TEST="test"
+checks:
+ifeq (,$(version))
+ @echo ERROR: need to define version=
+ @exit 1
endif
-MASTERTGZ=$(TEST)$(MASTERPROJECT)-$(VERSION).tar.gz
-
-# fence-agents
-FENCEPROJECT=fence-agents
-FENCEPV=$(FENCEPROJECT)-$(VERSION)
-FENCETGZ=$(TEST)$(FENCEPV).tar.gz
-
-# resource-agents
-RASPROJECT=resource-agents
-RASPV=$(RASPROJECT)-$(VERSION)
-RASTGZ=$(TEST)$(RASPV).tar.gz
+ifeq (,$(oldversion))
+ @echo ERROR: need to define oldversion=
+ @exit 1
+endif
+ @if [ ! -d .git ]; then \
+ echo This script needs to be executed from top level cluster git tree; \
+ exit 1; \
+ fi
-# rgmanager
-RGMPROJECT=rgmanager
-RGMPV=$(RGMPROJECT)-$(VERSION)
-RGMTGZ=$(TEST)$(RGMPV).tar.gz
+setup: checks $(releasearea)
-all: tag tarballs
+$(releasearea):
+ mkdir $@
-ifdef RELEASE
-tag:
- git tag -a -m "$(MASTERPV) release" $(MASTERPV) HEAD
+tag: setup $(releasearea)/tag-$(version)
+$(releasearea)/tag-$(version):
+ifeq (,$(release))
+ @echo Building test release $(version), no tagging
else
-tag:
-
+ git tag -a -m "$(projectver) release" $(projectver) HEAD
endif
-
-tarballs: master-tarball
-tarballs: fence-agents-tarball
-tarballs: resource-agents-tarball
-tarballs: rgmanager-tarball
-
-master-tarball:
+ @touch $@
+
+tarballs: tag
+tarballs: $(releasearea)/$(projecttar)
+tarballs: $(releasearea)/$(projectgz)
+tarballs: $(releasearea)/$(projectbz)
+tarballs: $(releasearea)/$(fenceprojecttar)
+tarballs: $(releasearea)/$(fenceprojectgz)
+tarballs: $(releasearea)/$(fenceprojectbz)
+tarballs: $(releasearea)/$(rasprojecttar)
+tarballs: $(releasearea)/$(rasprojectgz)
+tarballs: $(releasearea)/$(rasprojectbz)
+tarballs: $(releasearea)/$(rgmprojecttar)
+tarballs: $(releasearea)/$(rgmprojectgz)
+tarballs: $(releasearea)/$(rgmprojectbz)
+
+$(releasearea)/$(projecttar):
+ @echo Creating $(project) tarball
+ rm -rf $(releasearea)/$(projectver)
git archive \
--format=tar \
- --prefix=$(MASTERPROJECT)-$(VERSION)/ \
- $(MASTERPV) | \
- tar xp
+ --prefix=$(projectver)/ \
+ $(gitver) | \
+ (cd $(releasearea)/ && tar xf -)
+ cd $(releasearea) && \
sed -i -e \
- 's#<CVS>#$(VERSION)#g' \
- $(MASTERPROJECT)-$(VERSION)/gfs-kernel/src/gfs/gfs.h
- echo "VERSION \"$(VERSION)\"" \
- >> $(MASTERPROJECT)-$(VERSION)/make/official_release_version
- tar cp $(MASTERPROJECT)-$(VERSION) | \
- gzip -9 \
- > ../$(MASTERTGZ)
- rm -rf $(MASTERPROJECT)-$(VERSION)
-
-fence-agents-tarball: master-tarball
- tar zxpf ../$(MASTERTGZ)
- mv $(MASTERPROJECT)-$(VERSION) $(FENCEPV)
- cd $(FENCEPV) && \
- rm -rf bindings cman common config contrib dlm gfs* group \
- rgmanager fence/fenced fence/fence_node \
- fence/fence_tool fence/include fence/libfence \
- fence/libfenced fence/man
- tar cp $(FENCEPV) | \
- gzip -9 \
- > ../$(FENCETGZ)
- rm -rf $(FENCEPV)
-
-resource-agents-tarball: master-tarball
- tar zxpf ../$(MASTERTGZ)
- mv $(MASTERPROJECT)-$(VERSION) $(RASPV)
- cd $(RASPV) && \
- rm -rf bindings cman common config contrib dlm fence gfs* \
- group rgmanager/ChangeLog rgmanager/errors.txt \
- rgmanager/event-script.txt rgmanager/examples \
- rgmanager/include rgmanager/init.d rgmanager/man \
- rgmanager/README rgmanager/src/clulib \
- rgmanager/src/daemons rgmanager/src/utils
- tar cp $(RASPV) | \
- gzip -9 \
- > ../$(RASTGZ)
- rm -rf $(RASPV)
-
-rgmanager-tarball: master-tarball
- tar zxpf ../$(MASTERTGZ)
- mv $(MASTERPROJECT)-$(VERSION) $(RGMPV)
- cd $(RGMPV) && \
- rm -rf bindings cman common config contrib dlm fence gfs* group \
- rgmanager/src/resources
- tar cp $(RGMPV) | \
- gzip -9 \
- > ../$(RGMTGZ)
- rm -rf $(RGMPV)
-
-publish:
- git push --tags origin
- scp ../$(MASTERTGZ) \
- ../$(FENCETGZ) \
- ../$(RASTGZ) \
- ../$(RGMTGZ) \
- fedorahosted.org:$(MASTERPROJECT)
- git log $(MASTERPROJECT)-$(OLDVER)..$(MASTERPV) | \
- git shortlog > ../$(MASTERPV).emaildata
- git diff --stat $(MASTERPROJECT)-$(OLDVER)..$(MASTERPV) \
- >> ../$(MASTERPV).emaildata
+ 's#<CVS>#$(version)#g' \
+ $(projectver)/gfs-kernel/src/gfs/gfs.h && \
+ echo "VERSION \"$(version)\"" \
+ >> $(projectver)/make/official_release_version && \
+ tar cpf $(projecttar) $(projectver) && \
+ rm -rf $(projectver)
+
+$(releasearea)/$(fenceprojecttar): $(releasearea)/$(projecttar)
+ @echo Creating $(fenceproject) tarball
+ cd $(releasearea) && \
+ rm -rf $(projectver) $(fenceprojectver) && \
+ tar xpf $(projecttar) && \
+ mv $(projectver) $(fenceprojectver) && \
+ cd $(fenceprojectver) && \
+ rm -rf bindings cman common config contrib dlm gfs* group \
+ rgmanager fence/fenced fence/fence_node \
+ fence/fence_tool fence/include fence/libfence \
+ fence/libfenced fence/man && \
+ cd .. && \
+ tar cpf $(fenceprojecttar) $(fenceprojectver) && \
+ rm -rf $(fenceprojectver)
+
+$(releasearea)/$(rasprojecttar): $(releasearea)/$(projecttar)
+ @echo Creating $(rasproject) tarball
+ cd $(releasearea) && \
+ rm -rf $(projectver) $(rasprojectver) && \
+ tar xpf $(projecttar) && \
+ mv $(projectver) $(rasprojectver) && \
+ cd $(rasprojectver) && \
+ rm -rf bindings cman common config contrib dlm fence gfs* \
+ group rgmanager/ChangeLog rgmanager/errors.txt \
+ rgmanager/event-script.txt rgmanager/examples \
+ rgmanager/include rgmanager/init.d rgmanager/man \
+ rgmanager/README rgmanager/src/clulib \
+ rgmanager/src/daemons rgmanager/src/utils && \
+ cd .. && \
+ tar cpf $(rasprojecttar) $(rasprojectver) && \
+ rm -rf $(rasprojectver)
+
+$(releasearea)/$(rgmprojecttar): $(releasearea)/$(projecttar)
+ @echo Creating $(rgmproject) tarball
+ cd $(releasearea) && \
+ rm -rf $(projectver) $(rgmprojectver) && \
+ tar xpf $(projecttar) && \
+ mv $(projectver) $(rgmprojectver) && \
+ cd $(rgmprojectver) && \
+ rm -rf bindings cman common config contrib dlm fence gfs* group \
+ rgmanager/src/resources && \
+ cd .. && \
+ tar cpf $(rgmprojecttar) $(rgmprojectver) && \
+ rm -rf $(rgmprojectver)
+
+$(releasearea)/%.gz: $(releasearea)/%
+ @echo Creating $@
+ cat $< | gzip -9 > $@
+
+$(releasearea)/%.bz2: $(releasearea)/%
+ @echo Creating $@
+ cat $< | bzip2 -c > $@
+
+changelog: checks setup $(releasearea)/Changelog-$(version)
+
+$(releasearea)/Changelog-$(version): $(releasearea)/$(projecttar)
+ git log $(project)-$(oldversion)..$(gitver) | \
+ git shortlog > $@
+ git diff --stat $(project)-$(oldversion)..$(gitver) >> $@
+
+sha256: changelog tarballs $(releasearea)/$(projectver).sha256
+
+$(releasearea)/$(projectver).sha256: $(releasearea)/Changelog-$(version)
+ cd $(releasearea) && \
+ sha256sum Changelog-$(version) *.gz *.bz2 | sort -k2 > $@
+
+sign: sha256 $(releasearea)/$(projectver).sha256.asc
+
+$(releasearea)/$(projectver).sha256.asc: $(releasearea)/$(projectver).sha256
+ cd $(releasearea) && \
+ gpg --default-key $(gpgsignkey) \
+ --detach-sign \
+ --armor \
+ $<
+
+publish: sign
+ifeq (,$(release))
+ @echo Nothing to publish
+else
+ @echo git push --tags origin
+ cd $(releasearea) && \
+ scp *.gz *.bz2 Changelog-* *sha256* \
+ fedorahosted.org:$(project)
@echo Hey you!.. yeah you looking somewhere else!
@echo remember to update the wiki and send the email to cluster-devel and linux-cluster
-
endif
+
+clean: checks
+ rm -rf $(releasearea)