Fam Zheng <f...@redhat.com> writes: > This adds a group of make targets to run docker tests, all are available > in source tree without running ./configure. > > The usage is shown with "make docker". > > Besides the fixed ones, dynamic targets for building each image and > running each test in each image are generated automatically by make, > scanning $(SRC_PATH)/tests/docker/ files with specific patterns. > > Alternative to manually list particular targets (docker-TEST@IMAGE) > set, you can control which tests/images to run by filtering variables, > TESTS= and IMAGES=, which are expressed in Makefile pattern syntax, > "foo% %bar ...". For example: > > $ make docker-test IMAGES="ubuntu fedora" > > Unfortunately, it's impossible to propagate "-j $JOBS" into make in > containers, however since each combination is made a first class target > in the top Makefile, "make -j$N docker-test" still parallels the tests > coarsely. > > Still, $J is made a magic variable to let all make invocations in > containers to use -j$J. > > Instead of providing a live version of the source tree to the docker > container we snapshot it with git-archive. This ensures 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. > > Reviewed-by: Alex Bennée <alex.ben...@linaro.org> > Signed-off-by: Fam Zheng <f...@redhat.com> > Signed-off-by: Alex Bennée <alex.ben...@linaro.org> > --- > Makefile | 4 +- > tests/docker/Makefile.include | 121 > ++++++++++++++++++++++++++++++++++++++++++ > 2 files changed, 124 insertions(+), 1 deletion(-) > create mode 100644 tests/docker/Makefile.include > <snip> > diff --git a/tests/docker/Makefile.include b/tests/docker/Makefile.include > new file mode 100644 > index 0000000..033809a > --- /dev/null > +++ b/tests/docker/Makefile.include > @@ -0,0 +1,121 @@ > +# Makefile for Docker tests <snip> > +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-qemu-src > + @if test -z "$(IMAGE)" || test -z "$(CMD)"; \ > + then echo "Invalid target"; exit 1; \ > + fi > + $(if $(filter $(TESTS),$(CMD)),$(if $(filter $(IMAGES),$(IMAGE)), \ > + $(call quiet-command,\ > + $(SRC_PATH)/tests/docker/docker.py run $(if $V,,--rm) \ > + --privileged -t \
I had to drop --privileged to get it to work. > + $(if $(DEBUG),-i,--net=none) \ > + -e TARGET_LIST=$(TARGET_LIST) \ > + -e V=$V -e J=$J -e DEBUG=$(DEBUG)\ > + -e CCACHE_DIR=/var/tmp/ccache \ > + -v $$(realpath $(SRC_COPY)):/var/tmp/qemu:ro \ > + -v $(DOCKER_CCACHE_DIR):/var/tmp/ccache \ > + -w /var/tmp/qemu \ > + qemu:$(IMAGE) \ > + $(if $V,/bin/bash -x ,) \ > + ./run \ > + $(CMD); \ > + , " RUN $(CMD) in $(IMAGE)"))) > + > +docker-clean: > + $(call quiet-command, $(SRC_PATH)/tests/docker/docker.py clean) -- Alex Bennée