From 1285462a560a65c7de2579af2053e4f62faa28af Mon Sep 17 00:00:00 2001 From: Mike Burns Date: Wed, 19 Nov 2014 20:05:47 -0800 Subject: Add a release script The Makefiles were mostly filled with a complex shell script written in m4sh. Moving that out into a separate script helps debugging and compatibility, and in general makes life better. This also improved the DEVELOPERS.md documentation to be more clear about the steps of a release, including third-party packages. --- maint/release.in | 158 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 158 insertions(+) create mode 100755 maint/release.in (limited to 'maint') diff --git a/maint/release.in b/maint/release.in new file mode 100755 index 0000000..40af317 --- /dev/null +++ b/maint/release.in @@ -0,0 +1,158 @@ +#!/bin/sh + +ORIGIN_URL=$(shell git config --get remote.origin.url) +CURRENT_BRANCH=$(shell git rev-parse --abbrev-ref HEAD) +PACKAGE='@PACKAGE@' +PACKAGE_VERSION='@PACKAGE_VERSION@' +abs_srcdir='@abs_srcdir@' +srcdir='@srcdir@' +abs_top_builddir='@abs_top_builddir@' +dist_man_MANS='lsrc.1 mkrc.1 rcdn.1 rcup.1 rcrc.5 rcm.7' + +edit_package() { + sed \ + -e "s|@PACKAGE[@]|$(PACKAGE)|g" \ + -e "s|@PACKAGE_VERSION[@]|$(PACKAGE_VERSION)|g" \ + -e "s|@DIST_ARCHIVES[@]|$(DIST_ARCHIVES)|g" \ + -e "s|@DIST_SHA[@]|$(DIST_SHA)|g" +} + +# Tarball +release_build_tarball() { + ([ -d gh-pages ] || git clone --branch gh-pages . gh-pages) && \ + ([ -d gh-pages/dist ] || mkdir gh-pages/dist) && \ + cp $(DIST_ARCHIVES) gh-pages/dist && \ + cd gh-pages && \ + git add dist/$(DIST_ARCHIVES) && \ + git commit -m "Release version $(PACKAGE_VERSION) tarball" +} + +release_push_tarball() { + cd gh-pages && \ + git push +} + +release_clean_tarball() { + rm -rf gh-pages + rm -rf $(DIST_ARCHIVES) +} + +# Homebrew +release_build_homebrew() { + ([ -d homebrew-formulae ] || git clone git@github.com:thoughtbot/homebrew-formulae.git homebrew-formulae) && \ + $(edit_package) homebrew/$(PACKAGE).rb.in > homebrew-formulae/Formula/$(PACKAGE).rb && \ + cd homebrew-formulae && \ + git add Formula/$(PACKAGE).rb && \ + git commit -m "$(PACKAGE): Release version $(PACKAGE_VERSION)" +} + +release_push_homebrew() { + cd homebrew-formulae && \ + git push +} + +release_clean_homebrew() { + rm -rf homebrew-formulae + rm -rf $(DIST_ARCHIVES) +} + +# Arch +release_build_arch() { + ([ -d gh-pages ] || git clone --branch gh-pages . gh-pages) && \ + ([ -d gh-pages/arch ] || mkdir gh-pages/arch) && \ + $(edit_package) arch/PKGBUILD.in > gh-pages/arch/PKGBUILD &&\ + cd gh-pages &&\ + git add arch/PKGBUILD &&\ + git commit -m "Release version $(PACKAGE_VERSION) Arch package" +} + +release_push_arch() { + cd gh-pages && \ + git push +} + +release_clean_arch() { + rm -rf gh-pages + rm -rf $(DIST_ARCHIVES) +} + +# Deb +release_build_deb() { + ([ -d deb-build ] || mkdir -p deb-build) && \ + cp $(DIST_ARCHIVES) deb-build/$(PACKAGE)_$(PACKAGE_VERSION).orig.tar.gz && \ + tar -C deb-build -xf deb-build/$(PACKAGE)_$(PACKAGE_VERSION).orig.tar.gz && \ + cp -R debian deb-build/$(PACKAGE)-$(PACKAGE_VERSION) && \ + cd deb-build/$(PACKAGE)-$(PACKAGE_VERSION) && \ + dch -d "New upstream release" && dch -r "" && \ + cp debian/changelog $(abs_srcdir)/debian/changelog && \ + debuild -us -uc && \ + cd $(abs_srcdir) && \ + ([ -d gh-pages ] || git clone --branch gh-pages $(ORIGIN_URL) gh-pages) && \ + ([ -d gh-pages/debs ] || mkdir gh-pages/debs) && \ + cp deb-build/$(PACKAGE)_$(PACKAGE_VERSION)*.deb gh-pages/debs && \ + cd gh-pages && \ + git add debs/$(PACKAGE)_$(PACKAGE_VERSION)*deb && \ + git commit -m "Release version $(PACKAGE_VERSION) for Debian" -- debs/$(PACKAGE)_$(PACKAGE_VERSION)*deb +} + +release_push_deb() { + cd gh-pages && \ + git push +} + +release_clean_deb() { + rm -rf gh-pages + rm -rf deb-build + rm -rf $(DIST_ARCHIVES) +} + +# Tag +release_build_tag() { + git tag -s v$(PACKAGE_VERSION) -m "Release $(PACKAGE_VERSION)" +} + +release_push_tag() { + git push origin --tags +} + +release_clean_tag() { +} + +generate_dist_sha() { + export DIST_SHA=$(shasum $(srcdir)/$(DIST_ARCHIVES) | cut -d' ' -f1) +} + +# manpages as HTML +release_build_man_html() { + ([ -d $(abs_top_builddir)/gh-pages ] || git clone --branch gh-pages --single-branch .. $(abs_top_builddir)/gh-pages) && \ + for i in $(dist_man_MANS); do \ + mandoc -Thtml -Oman=%N.%S.html $$i > $(abs_top_builddir)/gh-pages/$$i.html ; \ + done && \ + cd $(abs_top_builddir)/gh-pages && \ + cp rcm.7.html index.html && \ + git add -A && \ + git commit -m "HTML documentation for $(PACKAGE_VERSION)" +} + +release_push_man_html() { + cd $(abs_top_builddir)/gh-pages && \ + git push -f $(ORIGIN_URL) gh-pages +} + +release_clean_man_html() { + rm -rf $(abs_top_builddir)/gh-pages +} + +# Main: + +if [ $# < 3 ]; then + echo "Usage: release (build|push|clean) (tarball|homebrew|arch|deb|tag|man_html) DIST_ARCHIVES" >&2 + exit 64 +fi + +verb="$1" +noun="$2" +DIST_ARCHIVES="$3" +cmd="release_${verb}_${noun}" + +${cmd} -- cgit v1.2.3