From 5516721cc61695dcd3b427e4db546e9281d6c9fe Mon Sep 17 00:00:00 2001 From: Richard Mortier Date: Tue, 26 Mar 2019 11:59:26 +0000 Subject: abuild: support cross-invocation caching using named volumes Signed-off-by: Richard Mortier --- Makefile | 13 +++++++++++-- abuild | 28 ++++++++++++++-------------- 2 files changed, 25 insertions(+), 16 deletions(-) diff --git a/Makefile b/Makefile index e0befe9..fede06e 100644 --- a/Makefile +++ b/Makefile @@ -1,23 +1,32 @@ .DEFAULT: build +IMG = mor1/abuild +VOLS = bin etc lib sbin usr var TAGS := $(shell \ curl -s https://registry.hub.docker.com/v1/repositories/alpine/tags \ | jq -r '.[].name' \ ) +TAGS = edge .PHONY: build build: $(patsubst %, build-%, $(TAGS)) + sed 's/%%ALPINE_VOLUMES%%/$(VOLS)/' abuild.in >| abuild .PHONY: build-% build-%: sed 's/%%ALPINE_TAG%%/$*/' Dockerfile.in >| Dockerfile - DOCKER_BUILDKIT=1 docker build $$DOCKER_FLAGS -t mor1/abuild:$* . + for v in $(VOLS) ; do docker volume create alpine-$*-$$v ; done + DOCKER_BUILDKIT=1 docker build $$DOCKER_FLAGS -t $(IMG):$* . $(RM) Dockerfile .PHONY: push push: build - docker push $(DOCKER_FLAGS) mor1/abuild + docker push $(DOCKER_FLAGS) $(IMG) .PHONY: clean clean: $(RM) Dockerfile + +.PHONY: distclean +distclean: clean + docker rmi -f $$(docker images -q $(IMG)) diff --git a/abuild b/abuild index 20839eb..05f1fe8 100755 --- a/abuild +++ b/abuild @@ -16,30 +16,30 @@ fi # use branch to figure out most appropriate alpine version if [ -z "$DOCKER_ABUILD_VERSION" ]; then - _ABUILD_BRANCH=$(git status | head -1) - _ABUILD_BRANCH="${_ABUILD_BRANCH##*[ /]}" - _ABUILD_BRANCH="${_ABUILD_BRANCH%-stable}" + ABUILD_BRANCH=$(git status | head -1) + ABUILD_BRANCH="${ABUILD_BRANCH##*[ /]}" + ABUILD_BRANCH="${ABUILD_BRANCH%-stable}" - case $_ABUILD_BRANCH in + case $ABUILD_BRANCH in [[:digit:]].[[:digit:]] ) - _ALPINE_VERSION=$_ABUILD_BRANCH + ALPINE_VERSION=$ABUILD_BRANCH ;; * ) - _ALPINE_VERSION=edge + ALPINE_VERSION=edge ;; esac else - _ALPINE_VERSION=$DOCKER_ABUILD_VERSION + ALPINE_VERSION=$DOCKER_ABUILD_VERSION fi -_ABUILD_DIR=${HOME}/.abuild/${_ALPINE_VERSION} -_ABUILD_VOLUMES=" +ABUILD_VOLUMES=" -v ${HOME}/.abuild:/home/builder/.abuild - -v ${_ABUILD_DIR}/.cache:/var/cache/apk - -v ${_ABUILD_DIR}/.distfiles:/var/cache/distfiles -v ${PWD%/aports*}/aports:/home/builder/aports - -v ${PWD%/aports*}/packages/${_ALPINE_VERSION}:/home/builder/packages " +for v in %%ALPINE_VOLUMES%%; do + ABUILD_VOLUMES="$ABUILD_VOLUMES -v alpine-$ALPINE_VERSION-$v:/$v" +done -DOCKER="docker run -ti $_ABUILD_VOLUMES -e DOCKER_ABUILD_DEBUG $_ABUILD_ARGS" -$DOCKER --workdir /home/builder/aports/${PWD#*/aports} mor1/abuild:$_ALPINE_VERSION "$@" +ABUILD_WORKDIR=/home/builder/aports${PWD#*/aports} +DOCKER="docker run -ti $ABUILD_VOLUMES -e DOCKER_ABUILD_DEBUG $DOCKER_ABUILD_ARGS" +$DOCKER --workdir $ABUILD_WORKDIR mor1/abuild:$ALPINE_VERSION "$@" -- cgit v1.2.3