From 334dce145122683e576ca4cb6c68c360d4aada7e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ludovic=20Court=C3=A8s?= Date: Tue, 9 May 2017 00:15:54 +0200 Subject: [PATCH] maint: Add 'release' target. Suggested by Jan Nieuwenhuizen. * Makefile.am (releasedir, PACKAGE_FULL_TARNAME, SOURCE_TARBALLS) (SUPPORTED_SYSTEMS, BINARY_TARBALLS, GUIXSD_SUPPORTED_SYSTEMS) (GUIXSD_IMAGE_BASE, GUIXSD_INSTALLATION_IMAGE_SIZE): New variables. (release): New target. (.PHONY): Add it. --- Makefile.am | 79 ++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 78 insertions(+), 1 deletion(-) diff --git a/Makefile.am b/Makefile.am index f6a8f6613d..f574f5f09c 100644 --- a/Makefile.am +++ b/Makefile.am @@ -546,6 +546,83 @@ gen-AUTHORS: "$(top_srcdir)" "$(distdir)/AUTHORS"; \ fi + +# +# Release management. +# + +releasedir = release-$(PACKAGE_VERSION) + +PACKAGE_FULL_TARNAME = $(PACKAGE_TARNAME)-$(PACKAGE_VERSION) + +# List of source tarballs produced. This must be kept in sync with the +# 'dist-' options of 'AM_INIT_AUTOMAKE' in 'configure.ac'. +SOURCE_TARBALLS = \ + $(foreach ext,tar.gz,$(PACKAGE_FULL_TARNAME).$(ext)) + +# Systems supported by Guix. +SUPPORTED_SYSTEMS = x86_64-linux i686-linux armhf-linux + +# Guix binary tarballs. +BINARY_TARBALLS = \ + $(foreach system,$(SUPPORTED_SYSTEMS),guix-binary.$(system).tar.xz) + +# Systems supported by GuixSD. +GUIXSD_SUPPORTED_SYSTEMS = x86_64-linux #i686-linux + +# Prefix of the GuixSD installation image file name. +GUIXSD_IMAGE_BASE = guixsd-usb-install-$(PACKAGE_VERSION) + +# Size of the installation image (for x86_64 typically). +GUIXSD_INSTALLATION_IMAGE_SIZE ?= 950MiB + +# The release process works in several phases: +# +# 0. We assume the developer created a 'vX.Y' tag. +# 1. Build the source tarball. +# 2. Update the 'guix' package so that it corresponds to the 'vX.Y' tag. +# 3. Build the binary tarballs for that 'guix' package. +# 4. Update the 'guix' package again. +# 5. Build the GuixSD installation images. The images will run 'guix' +# corresponding to 'vX.Y' + 1 commit, and they will install 'vX.Y'. +# +# This 'release' target takes care of everything and copies the resulting +# files to $(releasedir). +release: distcheck + $(MKDIR_P) "$(releasedir)" + rm -f "$(releasedir)"/* + mv $(SOURCE_TARBALLS) "$(releasedir)" + cd po; git checkout . + $(top_builddir)/pre-inst-env "$(GUILE)" \ + $(top_srcdir)/build-aux/update-guix-package.scm \ + "`git rev-parse HEAD`" "$(PACKAGE_VERSION)" + git add $(top_srcdir)/gnu/packages/package-management.scm + git commit -m "gnu: guix: Update to $(PACKAGE_VERSION)." + rm -f $(BINARY_TARBALLS) + $(MAKE) $(BINARY_TARBALLS) + for system in $(SUPPORTED_SYSTEMS) ; do \ + mv "guix-binary.$$system.tar.xz" \ + "$(releasedir)/guix-binary-$(PACKAGE_VERSION).$$system.tar.xz" ; \ + done + $(top_builddir)/pre-inst-env "$(GUILE)" \ + $(top_srcdir)/build-aux/update-guix-package.scm \ + "`git rev-parse HEAD`" + git add $(top_srcdir)/gnu/packages/package-management.scm + git commit -m "gnu: guix: Update to `git rev-parse HEAD | cut -c1-7`." + for system in $(GUIXSD_SUPPORTED_SYSTEMS) ; do \ + image=`$(top_builddir)/pre-inst-env \ + guix system disk-image \ + --image-size=$(GUIXSD_INSTALLATION_IMAGE_SIZE) \ + gnu/system/install.scm` ; \ + if [ ! -f "$$image" ] ; then \ + echo "failed to produced GuixSD installation image for $$system" >&2 ; \ + exit 1 ; \ + fi ; \ + xz < "$$image" > "$(releasedir)/$(GUIXSD_IMAGE_BASE).$$system.xz.tmp" ; \ + mv "$(releasedir)/$(GUIXSD_IMAGE_BASE).$$system.xz.tmp" \ + "$(releasedir)/$(GUIXSD_IMAGE_BASE).$$system.xz" ; \ + done + update-guix-package: git rev-parse HEAD $(top_builddir)/pre-inst-env "$(GUILE)" \ @@ -587,7 +664,7 @@ hydra-jobs.scm: $(GOBJECTS) .PHONY: assert-no-store-file-names assert-binaries-available .PHONY: assert-final-inputs-self-contained .PHONY: clean-go make-go -.PHONY: update-guix-package +.PHONY: update-guix-package release ## -------------- ## ## Silent rules. ##