manibuilder: Prepare a `source' container from local repository
Clone the local repository into a `mani/source' container. This can be
copied during the build of our test containers, to avoid cloning over
network.
Change-Id: I28fea93f9f77aa4d41143046081f4c6fd743c12e
Signed-off-by: Nico Huber <nico.h@gmx.de>
Reviewed-on: https://review.sourcearcade.org/c/flashprog/+/361
diff --git a/util/manibuilder/Dockerfile.source b/util/manibuilder/Dockerfile.source
new file mode 100644
index 0000000..d8bf029
--- /dev/null
+++ b/util/manibuilder/Dockerfile.source
@@ -0,0 +1,4 @@
+FROM scratch
+
+ARG SRC_TMP=
+COPY ${SRC_TMP} /source
diff --git a/util/manibuilder/Makefile b/util/manibuilder/Makefile
index 2ec7219..667f0ac 100644
--- a/util/manibuilder/Makefile
+++ b/util/manibuilder/Makefile
@@ -39,7 +39,7 @@
.INTERMEDIATE: Dockerfile.$(call ident,$(1))
-$(1)-build: Dockerfile.$(call ident,$(1))
+$(1)-build: Dockerfile.$(call ident,$(1)) source-check-build
$(QUIET_SETUP)docker build . \
$(addprefix --platform$(spc),$(4)) -f $$< -t mani/$(1) \
--build-arg IDENT=$(call ident,$(1)) $$(DOCKER_BUILD_ARGS)
@@ -54,7 +54,14 @@
djgpp\:6.1.0-build: %-build: Dockerfile.djgpp mani-wrapper.sh
$(QUIET_SETUP)docker build . -f $< -t mani/$* --build-arg IDENT=$(call ident,$*)
-git-check-build $(addsuffix -check-build,$(ALL_TAGS)): %-check-build:
+source-build: Dockerfile.source
+ $(QUIET_SETUP)\
+ SRC_TMP=$$(mktemp -d -p .) && \
+ { git clone $${TEST_LOCAL:-../../} $${SRC_TMP} && \
+ docker build . --build-arg SRC_TMP=$${SRC_TMP} -f $< -t mani/source; \
+ rm -rf $${SRC_TMP}; }
+
+source-check-build git-check-build $(addsuffix -check-build,$(ALL_TAGS)): %-check-build:
$(QUIET_SETUP)\
[ $$(docker image ls -q mani/$*) ] \
|| $(MAKE) $*-build $(if $(QUIET_SETUP),>/dev/null 2>/dev/null)