diff mbox

[v2,15/15] tests/docker/Makefile.include: snapshot the src for docker

Message ID 1455626399-7111-16-git-send-email-famz@redhat.com (mailing list archive)
State New, archived
Headers show

Commit Message

Fam Zheng Feb. 16, 2016, 12:39 p.m. UTC
From: Alex Bennée <alex.bennee@linaro.org>

Instead of providing a live version of the source tree to the docker
container we snapshot it with git-archive. This ensure the tree is in a
pristine state for whatever operations the container is going to run on
them.

Uncommitted changes known to files known by the git index will be
included in the snapshot if there are any.

Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
[Generate an unique directory under /tmp/ - Fam Zheng]
Signed-off-by: Fam Zheng <famz@redhat.com>
---
 tests/docker/Makefile.include | 22 ++++++++++++++++++----
 1 file changed, 18 insertions(+), 4 deletions(-)

Comments

Alex Bennée March 1, 2016, 8:16 p.m. UTC | #1
Fam Zheng <famz@redhat.com> writes:

> From: Alex Bennée <alex.bennee@linaro.org>
>
> Instead of providing a live version of the source tree to the docker
> container we snapshot it with git-archive. This ensure the tree is in a
> pristine state for whatever operations the container is going to run on
> them.
>
> Uncommitted changes known to files known by the git index will be
> included in the snapshot if there are any.
>
> Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
> [Generate an unique directory under /tmp/ - Fam Zheng]

But the docker-run-% rule never uses the source copy we just made.

> Signed-off-by: Fam Zheng <famz@redhat.com>
> ---
>  tests/docker/Makefile.include | 22 ++++++++++++++++++----
>  1 file changed, 18 insertions(+), 4 deletions(-)
>
> diff --git a/tests/docker/Makefile.include b/tests/docker/Makefile.include
> index aaf7d23..7cc2130 100644
> --- a/tests/docker/Makefile.include
> +++ b/tests/docker/Makefile.include
> @@ -2,7 +2,7 @@
>
>  $(if $(quiet-command),,$(eval include $(SRC_PATH)/rules.mak))
>
> -.PHONY: docker docker-test docker-clean docker-image
> +.PHONY: docker docker-test docker-clean docker-image docker-qemu-src
>
>  DOCKER_SUFFIX := .docker
>
> @@ -16,6 +16,21 @@ DOCKER_TOOLS := travis
>
>  TESTS ?= %
>  IMAGES ?= %
> +SRC_COPY := $(shell mktemp -u /tmp/qemu-src.XXXXX)
> +
> +.PHONY: $(SRC_COPY)
> +
> +$(SRC_COPY):
> +	@mkdir -p $@
> +	$(call quiet-command, \
> +		mkdir -p $@ && (if git diff-index --quiet HEAD -- &>/dev/null; then \
> +			git archive -1 HEAD --format=tar.gz; \
> +		else \
> +			git archive -1 $$(git stash create) --format=tar.gz; \
> +		fi) | tar -xz -C $@, \
> +		"  COPY SRC $@")
> +
> +docker-qemu-src: $(SRC_COPY)
>
>  $(foreach i,$(DOCKER_IMAGES), \
>  	$(eval docker-image: docker-image-$i) \
> @@ -23,8 +38,7 @@ $(foreach i,$(DOCKER_IMAGES), \
>  	$(eval .PHONY: docker-image-$i docker-@$i) \
>  	$(foreach t,$(DOCKER_TESTS) $(DOCKER_TOOLS), \
>  		$(eval .PHONY: docker-$t@$i) \
> -		$(eval docker-$t@$i: docker-image-$i) \
> -		$(eval docker-$t@$i: docker-run-$t@$i) \
> +		$(eval docker-$t@$i: docker-image-$i docker-run-$t@$i) \
>  		$(eval docker-@$i: docker-$t@$i) \
>  		$(eval docker-test: docker-run-$t@$i) \
>  	) \
> @@ -73,7 +87,7 @@ docker-image-%:
>
>  docker-run-%: CMD = $(shell echo '$@' | sed -e 's/docker-run-\([^@]*\)@\(.*\)/\1/')
>  docker-run-%: IMAGE = $(shell echo '$@' | sed -e 's/docker-run-\([^@]*\)@\(.*\)/\2/')
> -docker-run-%:
> +docker-run-%: docker-qemu-src
>  	@if test -z "$(IMAGE)" || test -z "$(CMD)"; \
>  		then echo "Invalid target"; exit 1; \
>  	fi


--
Alex Bennée
Fam Zheng March 2, 2016, 3:38 a.m. UTC | #2
On Tue, 03/01 20:16, Alex Bennée wrote:
> 
> Fam Zheng <famz@redhat.com> writes:
> 
> > From: Alex Bennée <alex.bennee@linaro.org>
> >
> > Instead of providing a live version of the source tree to the docker
> > container we snapshot it with git-archive. This ensure the tree is in a
> > pristine state for whatever operations the container is going to run on
> > them.
> >
> > Uncommitted changes known to files known by the git index will be
> > included in the snapshot if there are any.
> >
> > Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
> > [Generate an unique directory under /tmp/ - Fam Zheng]
> 
> But the docker-run-% rule never uses the source copy we just made.

I failed in Makefile magic: pattern rules and dynamically generated rules
mustn't be used mixed, otherwise the former will be ignored. Will fix.

Fam
diff mbox

Patch

diff --git a/tests/docker/Makefile.include b/tests/docker/Makefile.include
index aaf7d23..7cc2130 100644
--- a/tests/docker/Makefile.include
+++ b/tests/docker/Makefile.include
@@ -2,7 +2,7 @@ 
 
 $(if $(quiet-command),,$(eval include $(SRC_PATH)/rules.mak))
 
-.PHONY: docker docker-test docker-clean docker-image
+.PHONY: docker docker-test docker-clean docker-image docker-qemu-src
 
 DOCKER_SUFFIX := .docker
 
@@ -16,6 +16,21 @@  DOCKER_TOOLS := travis
 
 TESTS ?= %
 IMAGES ?= %
+SRC_COPY := $(shell mktemp -u /tmp/qemu-src.XXXXX)
+
+.PHONY: $(SRC_COPY)
+
+$(SRC_COPY):
+	@mkdir -p $@
+	$(call quiet-command, \
+		mkdir -p $@ && (if git diff-index --quiet HEAD -- &>/dev/null; then \
+			git archive -1 HEAD --format=tar.gz; \
+		else \
+			git archive -1 $$(git stash create) --format=tar.gz; \
+		fi) | tar -xz -C $@, \
+		"  COPY SRC $@")
+
+docker-qemu-src: $(SRC_COPY)
 
 $(foreach i,$(DOCKER_IMAGES), \
 	$(eval docker-image: docker-image-$i) \
@@ -23,8 +38,7 @@  $(foreach i,$(DOCKER_IMAGES), \
 	$(eval .PHONY: docker-image-$i docker-@$i) \
 	$(foreach t,$(DOCKER_TESTS) $(DOCKER_TOOLS), \
 		$(eval .PHONY: docker-$t@$i) \
-		$(eval docker-$t@$i: docker-image-$i) \
-		$(eval docker-$t@$i: docker-run-$t@$i) \
+		$(eval docker-$t@$i: docker-image-$i docker-run-$t@$i) \
 		$(eval docker-@$i: docker-$t@$i) \
 		$(eval docker-test: docker-run-$t@$i) \
 	) \
@@ -73,7 +87,7 @@  docker-image-%:
 
 docker-run-%: CMD = $(shell echo '$@' | sed -e 's/docker-run-\([^@]*\)@\(.*\)/\1/')
 docker-run-%: IMAGE = $(shell echo '$@' | sed -e 's/docker-run-\([^@]*\)@\(.*\)/\2/')
-docker-run-%:
+docker-run-%: docker-qemu-src
 	@if test -z "$(IMAGE)" || test -z "$(CMD)"; \
 		then echo "Invalid target"; exit 1; \
 	fi