From 29d8bd371d9e436b776c979706994b1de1e9b160 Mon Sep 17 00:00:00 2001 From: Stephan Barth Date: Mon, 11 Nov 2024 13:44:38 +0100 Subject: [PATCH 1/3] build(utils/wrapmakelog.pl): Fix for recursive and dockerized make. --- utils/wrapmakelog.sh | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/utils/wrapmakelog.sh b/utils/wrapmakelog.sh index 2fe1bbc7d..50ea3a8fa 100755 --- a/utils/wrapmakelog.sh +++ b/utils/wrapmakelog.sh @@ -2,7 +2,12 @@ : > makelogger -utils/makefilelogger.pl Makefile > Makefile-loggingsymbols +cp Makefile Makefile.prev -make -f Makefile-loggingsymbols "$@" +utils/makefilelogger.pl Makefile.prev > Makefile + +make "$@" + +rm Makefile +mv Makefile.prev Makefile From 845769cdc06b0416763212d43ae2e27518048649 Mon Sep 17 00:00:00 2001 From: Stephan Barth Date: Mon, 11 Nov 2024 13:47:05 +0100 Subject: [PATCH 2/3] build(utils/dirsymlink.pl): Fixed handling of hidden files. --- utils/dirsymlink.pl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/utils/dirsymlink.pl b/utils/dirsymlink.pl index c7f4dd22b..d81b66cff 100755 --- a/utils/dirsymlink.pl +++ b/utils/dirsymlink.pl @@ -7,7 +7,7 @@ my ($shadowdir, @keepdirs) = @ARGV; mkdir($shadowdir); -system(qq#rm -f "$shadowdir"/*#); +system(qq#rm -f "$shadowdir"/* "$shadowdir"/.*#); for my $k(@keepdirs) { unlink("$shadowdir/$k"); From c818fcda69d9b92d24d83d08b6d846c632251d6c Mon Sep 17 00:00:00 2001 From: Sarah Vaupel Date: Mon, 11 Nov 2024 14:28:27 +0100 Subject: [PATCH 3/3] build: implement .job-% dir mechanism for stack project dir with .stack-work --- .gitignore | 1 + Makefile | 41 +++++++++++++++++++++++++++------------ docker/backend/Dockerfile | 11 +++++------ 3 files changed, 35 insertions(+), 18 deletions(-) diff --git a/.gitignore b/.gitignore index c6e28b106..320302b1c 100644 --- a/.gitignore +++ b/.gitignore @@ -15,6 +15,7 @@ cabal-dev/ .cache/ .stack/ .stack-work +.job-*/ .dev-port-http .dev-port-https .bash_history diff --git a/Makefile b/Makefile index 0cc046778..d253ee54b 100644 --- a/Makefile +++ b/Makefile @@ -1,6 +1,9 @@ export SHELL=bash +# MAKE=make -f Makefile-loggingsymbols +# MAKE=make -d + # System information export CPU_CORES = $(shell cat /proc/cpuinfo | grep '^processor' | wc -l) @@ -24,8 +27,8 @@ export CONTAINER_ATTACHED export CONTAINER_INIT export CONTAINER_CLEANUP -export STACK_INIT="./utils/stack-work-init.sh" -export STACK_CLEANUP="rm -f .stack-work.lock" +# export STACK_INIT="./utils/stack-work-init.sh" +# export STACK_CLEANUP="rm -f .stack-work.lock" export SERVICE export SERVICE_VARIANT ?= $(SERVICE) @@ -65,7 +68,7 @@ help: clean: rm -rf develop -rm -rf node_modules .npm .cache assets/icons assets/favicons static well-known config/manifest.json - -rm -rf .stack-work .stack-work.lock .stack-work-compile .stack-work-start .stack-work-test .stack-work-lint .stack-work-hoogle + -rm -rf .job-* -rm -rf bin .Dockerfile develop -$(CONTAINER_COMMAND) container prune --force .PHONY: clean-all @@ -103,24 +106,24 @@ start: %-backend: SERVICE=backend %-backend: SERVICE_VARIANT=backend %-backend: CONTAINER_CMD=localhost/fradrive/backend -%-backend: CONTAINER_INIT="$(STACK_INIT)" -%-backend: CONTAINER_CLEANUP="$(STACK_CLEANUP)" +# %-backend: CONTAINER_INIT="$(STACK_INIT)" +# %-backend: CONTAINER_CLEANUP="$(STACK_CLEANUP)" %-backend: BASE_PORTS = "DEV_PORT_HTTP=3000" "DEV_PORT_HTTPS=3443" .PHONY: %-uniworxdb %-uniworxdb: SERVICE=backend %-uniworxdb: SERVICE_VARIANT=uniworxdb %-uniworxdb: CONTAINER_CMD=localhost/fradrive/backend -%-uniworxdb: CONTAINER_INIT="$(STACK_INIT)" -%-uniworxdb: CONTAINER_CLEANUP="$(STACK_CLEANUP)" +# %-uniworxdb: CONTAINER_INIT="$(STACK_INIT)" +# %-uniworxdb: CONTAINER_CLEANUP="$(STACK_CLEANUP)" .PHONY: %-hoogle %-hoogle: SERVICE=backend %-hoogle: SERVICE_VARIANT=hoogle %-hoogle: BASE_PORTS = "HOOGLE_PORT=8081" %-hoogle: CONTAINER_CMD=localhost/fradrive/backend -%-hoogle: CONTAINER_INIT="$(STACK_INIT)" -%-hoogle: CONTAINER_CLEANUP="$(STACK_CLEANUP)" +# %-hoogle: CONTAINER_INIT="$(STACK_INIT)" +# %-hoogle: CONTAINER_CLEANUP="$(STACK_CLEANUP)" --start-hoogle: HOOGLE_PORT=`cat $(CONTAINER_FILE) | grep 'HOOGLE_PORT=' | sed 's/HOOGLE_PORT=//'` ; \ stack $(STACK_CORES) hoogle -- server --local --port $${HOOGLE_PORT} @@ -190,7 +193,7 @@ lint-%: --act ; exit 1 ; \ fi ; \ echo "$(PORTS)" | sed 's/ /\n/g' > $${CONTAINER_FILE} ; \ - $(MAKE) -- --$* CONTAINER_FILE=$${CONTAINER_FILE} CONTAINER_IDENT=$${CONTAINER_IDENT} + $(MAKE) -- --$* CONTAINER_FILE=$${CONTAINER_FILE} CONTAINER_IDENT=$${CONTAINER_IDENT} JOB=$(JOB) .PHONY: rebuild-% # HELP(rebuild-{backend,frontend,database,memcached,minio}): force-rebuild the stated docker image @@ -200,19 +203,29 @@ rebuild-%: ifeq "$(CONTAINER_CMD)" "localhost/fradrive/$(SERVICE)" rm -f .Dockerfile ln -s docker/$(SERVICE)/Dockerfile .Dockerfile + $(MAKE) .job-$(JOB) MOUNT_DIR=/mnt/fradrive; \ PROJECT_DIR=/mnt/fradrive; \ if [ "$(IN_CI)" == "true" ] ; then \ PROJECT_DIR=/fradrive; \ fi; \ if [ "$(IN_CONTAINER)" == "false" ] ; then \ - $(CONTAINER_COMMAND) build $(NO_CACHE) -v $(PWD):$${MOUNT_DIR} --env IN_CONTAINER=true --build-arg MOUNT_DIR=$(MOUNT_DIR) --build-arg PROJECT_DIR=$${PROJECT_DIR} --tag fradrive/$(SERVICE) --file $(PWD)/.Dockerfile ; \ + $(CONTAINER_COMMAND) build $(NO_CACHE) \ + -v $(PWD):$${MOUNT_DIR} \ + --build-arg MOUNT_DIR=$(MOUNT_DIR) \ + --build-arg PROJECT_DIR=$${PROJECT_DIR} \ + --env IN_CONTAINER=true \ + --env JOB=$(JOB) \ + --tag fradrive/$(SERVICE) \ + --file $(PWD)/.Dockerfile ; \ fi else : endif ---containerized: --image-build +--containerized: + $(MAKE) .job-$(JOB) + $(MAKE) -- --image-build DEVELOP=`cat develop/.current` ; \ ./utils/watchcontainerrun.sh "$(CONTAINER_COMMAND)" "$(CONTAINER_FILE)" "$(CONTAINER_INIT)" "$(CONTAINER_CLEANUP)" & \ CONTAINER_NAME=fradrive.$(CURR_DEV).$(CONTAINER_IDENT) ; \ @@ -228,6 +241,7 @@ endif --env FRADRIVE_MAKE_TARGET="--$(JOB)-$(SERVICE_VARIANT)" \ --env CONTAINER_FILE=$(CONTAINER_FILE) \ --env CONTAINER_NAME=$${CONTAINER_NAME} \ + --env JOB=$(JOB) \ --name $${CONTAINER_NAME} \ $${CONTAINER_CMD} \ ` ; \ @@ -266,6 +280,9 @@ endif # HELP(test-backend): test backend --test-backend: stack build $(STACK_CORES) --test --coverage --fast --flag uniworx:library-only $(--DEVELOPMENT) +.PHONY: .job-%: +.job-%: + ./utils/dirsymlink.pl ".job-$*" .stack-work # HELP(compile-frontend): compile frontend assets --compile-frontend: node_modules assets esbuild.config.mjs diff --git a/docker/backend/Dockerfile b/docker/backend/Dockerfile index 4ae02188e..bd6ef7bab 100644 --- a/docker/backend/Dockerfile +++ b/docker/backend/Dockerfile @@ -14,18 +14,17 @@ ARG PROJECT_DIR=/fradrive RUN mkdir -p "${PROJECT_DIR}" RUN if [ "${PROJECT_DIR}" != "${MOUNT_DIR}" ] ; then cp -r "${MOUNT_DIR}"/* "${PROJECT_DIR}" ; fi -WORKDIR "${PROJECT_DIR}" -ENV HOME="${PROJECT_DIR}" RUN mkdir -p "${PROJECT_DIR}/.stack" ENV STACK_ROOT="${PROJECT_DIR}/.stack" -RUN make -- --dependencies-backend STACK_ROOT=${STACK_ROOT} IN_CONTAINER=true -RUN stack install yesod-bin -RUN chmod -R 777 .stack .stack-work .stack-work-compile .stack-work-start .stack-work-test .stack-work-lint .stack-work-hoogle || : +WORKDIR "${PROJECT_DIR}/.job-${JOB}" +ENV HOME="${PROJECT_DIR}/.job-${JOB}" +RUN make -- --dependencies-backend STACK_ROOT=${STACK_ROOT} IN_CONTAINER=true JOB=${JOB} +RUN cd "${PROJECT_DIR}/.job-start" && STACK_ROOT=${STACK_ROOT} stack install yesod-bin ENV FRADRIVE_MAKE_TARGET=--start-backend -ENTRYPOINT make -- ${FRADRIVE_MAKE_TARGET} STACK_ROOT="${STACK_ROOT}" IN_CONTAINER=true CONTAINER_FILE="${CONTAINER_FILE}" +ENTRYPOINT make -- ${FRADRIVE_MAKE_TARGET} STACK_ROOT="${STACK_ROOT}" IN_CONTAINER=true CONTAINER_FILE="${CONTAINER_FILE}" JOB="${JOB}" EXPOSE 3000/tcp EXPOSE 3443/tcp