summaryrefslogtreecommitdiff
path: root/Makefile.am
diff options
context:
space:
mode:
authorGravatar Mike Burns <mike@mike-burns.com>2014-02-20 15:49:36 +0100
committerGravatar Mike Burns <mike@mike-burns.com>2014-02-26 17:49:05 +0100
commit64c8e0c87e02e3a05631d67c9d3072ca87234711 (patch)
treebd403d4a6513a96e68adbbabbdd92df6fc1b6ea2 /Makefile.am
parent0edd365a507d716690ba7e7638681a7f9a61f8b9 (diff)
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.
Diffstat (limited to 'Makefile.am')
-rw-r--r--Makefile.am138
1 files changed, 108 insertions, 30 deletions
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))