diff --git a/.gitignore b/.gitignore index ee1732cf71e0ce9fef986b5f992676678e481b3f..985d96a21bdf07ea2e2e1bd2f5b1e9aa41d1a083 100644 --- a/.gitignore +++ b/.gitignore @@ -11,6 +11,7 @@ repositories tarballs.manifest manual-download .docker-image-* +.tarball-version # QtCreator /build-* diff --git a/Jenkinsfile b/Jenkinsfile index f810811b3e2d0445445c4a903ffa320acff0a7ae..08c453d6f71fe60be244269e1a8a1798af4ee730 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -52,8 +52,10 @@ See https://wiki.savoirfairelinux.com/wiki/Jenkins.jami.net#Configuration" // environment variables used by Guix. sh '''#!/usr/bin/env bash test -f $HOME/.bashrc && . $HOME/.bashrc - make portable-release-tarball + make portable-release-tarball .tarball-version ''' + stash(includes: '*.tar.gz, .tarball-version', + name: 'release-tarball') } } @@ -81,8 +83,16 @@ See https://wiki.savoirfairelinux.com/wiki/Jenkins.jami.net#Configuration" // Note: The stage calls are wrapped in closures, to // delay their execution. stages["${target}"] = { - stage("stage: ${target}") { - sh "make ${target}" + stage("${target}") { + // Offload builds to different agents. + node('linux-builder') { + cleanWs() + unstash 'release-tarball' + sh """ + tar xf *.tar.gz --strip-components=1 + make ${target} + """ + } } } } diff --git a/Makefile b/Makefile index 4773d2415b80bde90623d706765c906319044f65..d44c594058eb35b5b16c99c83419805972cafa0a 100644 --- a/Makefile +++ b/Makefile @@ -19,6 +19,9 @@ ############################## ## Version number variables ## ############################## +TARBALL_VERSION := $(shell cat $(CURDIR)/.tarball-version 2> /dev/null) + +ifeq ($(TARBALL_VERSION),) # YYYY-MM-DD LAST_COMMIT_DATE:=$(shell git log -1 --format=%cd --date=short) @@ -32,6 +35,10 @@ LAST_COMMIT_DATE_SHORT:=$(shell echo $(LAST_COMMIT_DATE) | sed -s 's/-//g') COMMIT_ID:=$(shell git rev-parse --short HEAD) RELEASE_VERSION:=$(LAST_COMMIT_DATE_SHORT).$(NUMBER_OF_COMMITS).$(COMMIT_ID) +else +$(warning Using version from the .tarball-version file: $(TARBALL_VERSION)) +RELEASE_VERSION:=$(TARBALL_VERSION) +endif RELEASE_TARBALL_FILENAME:=jami_$(RELEASE_VERSION).tar.gz # Debian versions @@ -59,6 +66,12 @@ CURRENT_GID:=$(shell id -g) ############################# .PHONY: release-tarball purge-release-tarballs portable-release-tarball +# This file can be used when not wanting to invoke the tarball +# producing machinery (which depends on the Git checkout), nor its +# prerequisites. It is used to set the TARBALL_VERSION Make variable. +.tarball-version: + echo $(RELEASE_VERSION) > $@ + purge-release-tarballs: rm -f jami_*.tar.* tarballs.manifest @@ -96,6 +109,7 @@ tarballs.manifest: daemon/contrib/native/Makefile $(MAKE) fetch -j && \ $(MAKE) --no-print-directory --silent list-tarballs > "$(CURDIR)/$@" +ifeq ($(TARBALL_VERSION),) # Generate the release tarball. To regenerate a fresh tarball # manually clear the tarballs.manifest file. $(RELEASE_TARBALL_FILENAME): tarballs.manifest @@ -117,6 +131,11 @@ $(RELEASE_TARBALL_FILENAME): tarballs.manifest gzip $(TMPDIR)/ring-project.tar mv $(TMPDIR)/ring-project.tar.gz "$@" rm -rf $(TMPDIR) +else +# If TARBALL_VERSION is defined, assume it's already been generated, +# without doing any checks, which would require Git. +$(RELEASE_TARBALL_FILENAME): +endif ####################### ## Packaging targets ##