From 64c8e0c87e02e3a05631d67c9d3072ca87234711 Mon Sep 17 00:00:00 2001 From: Mike Burns Date: Thu, 20 Feb 2014 15:49:36 +0100 Subject: Start bringing in the Makefile.am from gitsh It introduces the `Makefile.am` from gitsh, and abstracts it a bit. This `Makefile.am`, or most of it, could be dropped into gitsh again. How to use it is documented in `DEVELOPERS.md`. The whole release process is more consistent and simple: `make release` to build a tarball, Homebrew, Arch, Debian, HTML (from manpages), and tag it, pushed to the various repos, and with cleanup. The `release` target is composed of smaller targets that stack well. --- Makefile.am | 138 +++++++++++++++++++++++++++++++++++++++++++++++------------- 1 file changed, 108 insertions(+), 30 deletions(-) (limited to 'Makefile.am') diff --git a/Makefile.am b/Makefile.am index 95354db..1f881ef 100644 --- a/Makefile.am +++ b/Makefile.am @@ -1,42 +1,120 @@ AUTOMAKE_OPTIONS = foreign SUBDIRS = man share bin +EXTRA_DIST = LICENSE README.md NEWS.md -.PHONY: release deb-changelog build-tag push-tag deb build-docs upload-docs +.PHONY: release \ + release_build release_push release_clean \ + release_build_tarball release_build_homebrew release_build_arch \ + release_push_tarball release_push_homebrew release_push_arch \ + release_clean_tarball release_clean_homebrew release_clean_arch \ + release_build_deb release_push_deb release_clean_deb release_build_tag \ + release_push_tag release_clean_tag release_build_man_html \ + release_push_man_html release_clean_man_html ORIGIN_URL=$(shell git config --get remote.origin.url) +CURRENT_BRANCH=$(shell git rev-parse --abbrev-ref HEAD) -release: deb push-tag upload-docs +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' -deb-changelog: NEWS.md - cp -f NEWS.md debian/changelog +release: release_build release_push release_clean -deb: deb-changelog - mkdir /tmp/deb - cp -a . /tmp/deb/rcm-$(PACKAGE_VERSION) - cd /tmp/deb && \ - tar --exclude=*swp --exclude-backups --exclude-vcs --exclude=debian \ - --exclude=config.status --exclude=config.log \ - -zcf rcm_$(PACKAGE_VERSION).orig.tar.gz rcm-$(PACKAGE_VERSION) && \ - cd rcm-$(PACKAGE_VERSION) && \ - debuild -us -uc - cp /tmp/deb/rcm_$(PACKAGE_VERSION)*.deb $(abs_srcdir) +release_build: release_build_tarball release_build_homebrew release_build_arch \ + release_build_deb release_build_tag release_build_man_html -build-tag: - git tag -f -a v$(PACKAGE_VERSION) -m "Release $(PACKAGE_VERSION)" +release_push: release_push_tarball release_push_homebrew release_push_arch \ + release_push_deb release_push_tag release_push_man_html -push-tag: build-tag - git push origin --tags +release_clean: release_clean_tarball release_clean_homebrew release_clean_arch \ + release_clean_deb release_clean_tag release_clean_man_html + +###### Tarball +release_build_tarball: Makefile distcheck + ([ -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: DIST_SHA + ([ -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 commit -am "$(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: DIST_SHA + ([ -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 -build-docs: - git clone --branch gh-pages --single-branch . gh-pages && \ - for i in lsrc.1 mkrc.1 rcm.7 rcrc.5 rcup.1 rcdn.1; do \ - mandoc -Thtml -Oman=%N.%S.html man/$$i > gh-pages/$$i.html ; \ - done ; \ - cp gh-pages/rcm.7.html gh-pages/index.html - -upload-docs: build-docs - cd gh-pages ; \ - git commit -am "update pages" ; \ - git push -f $(ORIGIN_URL) gh-pages ; \ - cd .. && \ +release_clean_arch: rm -rf gh-pages + rm -rf $(DIST_ARCHIVES) + +###### Deb +release_build_deb: NEWS.md DIST_SHA distcheck + ([ -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: + +DIST_SHA: Makefile distcheck + $(eval DIST_SHA := $(shell shasum $(srcdir)/$(DIST_ARCHIVES) | cut -d' ' -f1)) -- cgit v1.2.3