~ruther/guix-local

334dce145122683e576ca4cb6c68c360d4aada7e — Ludovic Courtès 8 years ago ff39342
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.
1 files changed, 78 insertions(+), 1 deletions(-)

M Makefile.am
M Makefile.am => Makefile.am +78 -1
@@ 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.  ##