summaryrefslogtreecommitdiff
path: root/maint
diff options
context:
space:
mode:
authorGravatar Mike Burns <mike@mike-burns.com>2014-11-19 20:05:47 -0800
committerGravatar Mike Burns <mike@mike-burns.com>2014-12-19 15:20:04 +0100
commit1285462a560a65c7de2579af2053e4f62faa28af (patch)
treead5bae9bbc37fd319a4872495a9798f5924a4fad /maint
parent78db1a5086ccf17345956105e48e649f5e09abbf (diff)
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.
Diffstat (limited to 'maint')
-rwxr-xr-xmaint/release.in158
1 files changed, 158 insertions, 0 deletions
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}