build(Makefile): introduce log targets, use separate stack-work-dirs for better caching

This commit is contained in:
Sarah Vaupel 2024-10-11 13:00:22 +02:00
parent a8eaddde3a
commit 80e4c45a66
5 changed files with 31 additions and 29 deletions

View File

@ -49,13 +49,12 @@ help:
utils/makehelp.pl Makefile ; \ utils/makehelp.pl Makefile ; \
fi fi
.PHONY: clean .PHONY: clean%
# HELP: remove all compilation results in the directory but leave containers and images unharmed # HELP: remove all compilation results in the directory but leave containers and images unharmed
clean: clean:
rm -rf node_modules .npm .cache assets/icons assets/favicons static well-known rm -rf node_modules .npm .cache assets/icons assets/favicons static well-known
rm -rf .stack .stack-work .stack-work-build .stack-work-run .stack-work-test .stack-work-doc rm -rf .stack .stack-work .stack-work-build .stack-work-run .stack-work-test .stack-work-doc
rm -rf bin/ .Dockerfile .dev-port-http .dev-port-https rm -rf bin/ .Dockerfile develop/
.PHONY: clean-all
# HELP: like clean but with container and image prune # HELP: like clean but with container and image prune
clean-all: clean clean-all: clean
$(CONTAINER_COMMAND) system prune --all --force --volumes $(CONTAINER_COMMAND) system prune --all --force --volumes
@ -203,15 +202,15 @@ serve-backend:
# HELP(compile-backend): compile backend # HELP(compile-backend): compile backend
--compile-backend: --compile-backend:
stack build --fast --profile --library-profiling --executable-profiling --flag uniworx:-library-only --local-bin-path $$(pwd)/bin $(stackopts) stack build --fast --work-dir .stack-work-build --profile --library-profiling --executable-profiling --flag uniworx:-library-only --local-bin-path $$(pwd)/bin $(stackopts)
# HELP(lint-backend): lint backend # HELP(lint-backend): lint backend
--lint-backend: --lint-backend:
stack build --test --fast --flag uniworx:library-only uniworx:test:hlint $(stackopts) stack build --test --fast --work-dir .stack-work-test --flag uniworx:library-only uniworx:test:hlint $(stackopts)
# HELP(test-backend): test backend # HELP(test-backend): test backend
--test-backend: --test-backend:
stack build --test --coverage --fast --flag uniworx:library-only $(stackopts) stack build --test --coverage --fast --workdir .stack-work-test --flag uniworx:library-only $(stackopts)
# HELP(db-cf-backend): clear and fill database. requires running postgres # HELP(db-cf-backend): clear and fill database. requires running postgres
# TODO (db-m-$MIGRATION-backend): apply migration (see src/Model/Migration/Definition.hs for list of available migrations) # TODO (db-m-$MIGRATION-backend): apply migration (see src/Model/Migration/Definition.hs for list of available migrations)
@ -346,8 +345,10 @@ start-minio: SINGLETON = true
start-backend: BASE_PORTS = "DEV_PORT_HTTP=3000" "DEV_PORT_HTTPS=3443" start-backend: BASE_PORTS = "DEV_PORT_HTTP=3000" "DEV_PORT_HTTPS=3443"
start-backend: SINGLETON = false start-backend: SINGLETON = false
start-hoogle: BASE_PORT = "HOOGLE_PORT=8081"
start-frontend: SINGLETON = false start-frontend: SINGLETON = false
start-frontend: WATCH = true
start-%: FRADRIVE_SERVICE = % start-%: FRADRIVE_SERVICE = %
start-%: PORTS = $(foreach PORT,$(BASE_PORTS),$(shell utils/next_free_port.pl $(PORT))) start-%: PORTS = $(foreach PORT,$(BASE_PORTS),$(shell utils/next_free_port.pl $(PORT)))
@ -359,10 +360,9 @@ start-%: --ensure-develop
CONTAINER_FILE=$(DEVELOP)/$* ; \ CONTAINER_FILE=$(DEVELOP)/$* ; \
else \ else \
DEVDIR=$(DEVELOP)/$*; \ DEVDIR=$(DEVELOP)/$*; \
mkdir -p $${DEVDIR}; \
I=`ls $${DEVDIR} | sort -n | tail -n1`; \ I=`ls $${DEVDIR} | sort -n | tail -n1`; \
echo "$${I}"; \ echo "$${I}"; \
CONTAINER_FILE=$${DEVDIR}/$$(($${I}+1)); \ CONTAINER_FILE=$${DEVDIR}-$$(($${I}+1)); \
fi ; \ fi ; \
echo "$(PORTS)" | sed 's/ /\n/g' > $${CONTAINER_FILE} ; \ echo "$(PORTS)" | sed 's/ /\n/g' > $${CONTAINER_FILE} ; \
$(MAKE) -- --containerized---start-$* CONTAINER_FILE=$${CONTAINER_FILE} $(MAKE) -- --containerized---start-$* CONTAINER_FILE=$${CONTAINER_FILE}
@ -370,7 +370,10 @@ start-%: --ensure-develop
--start-backend: start.sh --start-backend: start.sh
DEV_PORT_HTTP=`cat $(CONTAINER_FILE) | grep 'DEV_PORT_HTTP=' | sed 's/DEV_PORT_HTTP=//'`; \ DEV_PORT_HTTP=`cat $(CONTAINER_FILE) | grep 'DEV_PORT_HTTP=' | sed 's/DEV_PORT_HTTP=//'`; \
DEV_PORT_HTTPS=`cat $(CONTAINER_FILE) | grep 'DEV_PORT_HTTPS=' | sed 's/DEV_PORT_HTTPS=//'`; \ DEV_PORT_HTTPS=`cat $(CONTAINER_FILE) | grep 'DEV_PORT_HTTPS=' | sed 's/DEV_PORT_HTTPS=//'`; \
./utils/watchrun-container.sh "$(CONTAINER_FILE)" ./start.sh ./utils/watchrun.sh "$(CONTAINER_FILE)" ./start.sh
--start-hoogle: hoogle.sh
HOOGLE_PORT=`cat $(CONTAINER_FILE) | grep 'HOOGLE_PORT=' | sed 's/HOOGLE_PORT=//'` ; \
./utils/watchrun.sh "$(CONTAINER_FILE)" ./hoogle.sh
--containerized---start-database: FRADRIVE_SERVICE=database --containerized---start-database: FRADRIVE_SERVICE=database
# port forwarding is disabled in --network=host mode; nevertheless it is stated here for documentation reasons # port forwarding is disabled in --network=host mode; nevertheless it is stated here for documentation reasons
@ -392,17 +395,17 @@ start-%: --ensure-develop
# TODO: find way to stop a single container, e.g. by removing the file # TODO: find way to stop a single container, e.g. by removing the file
.PHONY: stop-% .PHONY: stop-%
stop-%: --stop-% stop-%: --stop-%
$(MAKE) stop-container CONTAINER_FILE=TODO rm -rf $(DEVELOP)/$*
.PHONY: --stop-minio
--stop-minio:
MINIO_DIR=`cat $(DEVELOP)/minio`
rm -rf $${MINIO_DIR}
stop-container-by-id:
podman stop $(CONTAINER_ID)
stop-container-by-file: stop-container-by-file:
CONTAINER_ID=`grep 'CONTAINER_ID=' $(CONTAINER_FILE) | sed 's/CONTAINER_ID=//'` ; \ rm $(CONTAINER_FILE)
$(MAKE) stop-container-by-id CONTAINER_ID=$${CONTAINER_ID} stop-container-by-id:
$(CONTAINER_COMMAND) stop $(CONTAINER_ID)
# CONTAINER_ID=`grep 'CONTAINER_ID=' $(CONTAINER_FILE) | sed 's/CONTAINER_ID=//'` ; \
# $(MAKE) stop-container-by-id CONTAINER_ID=$${CONTAINER_ID}
.PHONY: log-%
log-%:
$(CONTAINER_COMMAND) logs `cat develop/$(CURRENT_DEVELOP)/$* | grep CONTAINER_ID= | sed 's/^CONTAINER_ID=//'`
##### CONTAINER TARGETS ##### ##### CONTAINER TARGETS #####
############################# #############################

View File

@ -2,7 +2,7 @@
set -e set -e
# SPDX-FileCopyrightText: 2022 Gregor Kleen <gregor.kleen@ifi.lmu.de> # SPDX-FileCopyrightText: 2022-2024 Sarah Vaupel <sarah.vaupel@uniworx.de>, Gregor Kleen <gregor.kleen@ifi.lmu.de>
# #
# SPDX-License-Identifier: AGPL-3.0-or-later # SPDX-License-Identifier: AGPL-3.0-or-later
@ -19,4 +19,4 @@ if [[ -d .stack-work-doc ]]; then
trap move-back EXIT trap move-back EXIT
fi fi
stack hoogle -- ${@:-server --local --port $((${PORT_OFFSET:-$(((16#$(echo \"fradrive $(whoami)\" | sha256sum | head -c 16)) % 1000))} + 8081))} stack hoogle -- ${@:-server --local --work-dir .stack-work-doc --port $HOOGLE_PORT}

View File

@ -38,10 +38,10 @@ unset HOST
if ! [ -z "$(which yesod)" ] if ! [ -z "$(which yesod)" ]
then then
yesod devel -p "$DEV_PORT_HTTP" -q "$DEV_PORT_HTTPS" $@ yesod devel --work-dir .stack-work-run -p "$DEV_PORT_HTTP" -q "$DEV_PORT_HTTPS" $@
elif ! [ -z "$(which stack)" ] elif ! [ -z "$(which stack)" ]
then then
stack exec -- yesod devel -p "$DEV_PORT_HTTP" -q "$DEV_PORT_HTTPS" $@ stack exec -- yesod devel --work-dir .stack-work-run -p "$DEV_PORT_HTTP" -q "$DEV_PORT_HTTPS" $@
else else
exit 1 exit 1
fi fi

View File

@ -1,5 +0,0 @@
#!/usr/bin/env bash
STOPSCRIPT="make stop-container-by-id CONTAINFER_FILE=${CONTAINER_FILE} ; $3"
./utils/watchrun.sh "$1" "$2"

View File

@ -1,5 +1,8 @@
#!/usr/bin/env bash #!/usr/bin/env bash
#UTILPATH=`echo "$0" | sed 's/\/[^\/]+$//'`
UTILPATH=${0%/*}
FILENAME=$1 FILENAME=$1
STARTSCRIPT=$2 STARTSCRIPT=$2
STOPSCRIPT=$3 STOPSCRIPT=$3
@ -8,6 +11,7 @@ touch "$FILENAME"
( (
while [ -e "$FILENAME" ] ; do while [ -e "$FILENAME" ] ; do
sleep 1
inotifywait -e ATTRIB -t 10 "$FILENAME" > /dev/null 2&>/dev/null inotifywait -e ATTRIB -t 10 "$FILENAME" > /dev/null 2&>/dev/null
done done
@ -16,4 +20,4 @@ $STOPSCRIPT
kill `cat /tmp/pidwrapper` kill `cat /tmp/pidwrapper`
) & ) &
/mnt/fradrive/utils/runwrapper.sh "$STARTSCRIPT" $UTILPATH/runwrapper.sh "$STARTSCRIPT"