build(Makefile): Better container control.
More careful tracking of when to call container so that container is not called in a container but is always called when needed. Also renamed several targets to achieve this.
This commit is contained in:
parent
277ae187f5
commit
bc6ec24b84
107
Makefile
107
Makefile
@ -2,6 +2,8 @@ CONTAINER_COMMAND ?= podman
|
||||
IN_CONTAINER ?= false
|
||||
IN_CI ?= false
|
||||
|
||||
SHELL=bash
|
||||
|
||||
export CONTAINER_COMMAND
|
||||
export IN_CONTAINER
|
||||
export IN_CI
|
||||
@ -62,10 +64,12 @@ test: test-frontend test-backend i18n-check
|
||||
|
||||
.PHONY: %-frontend
|
||||
%-frontend: FRADRIVE_SERVICE=frontend
|
||||
%-frontend: --image-build --%-frontend;
|
||||
%-frontend: --image-build --containerized-%-frontend;
|
||||
|
||||
.PHONY: --%-frontend
|
||||
--%-frontend: node_modules well-known;
|
||||
#--%-frontend: node_modules well-known;
|
||||
#--%-frontend: --containerized---node_modules-frontend --containerized---well-known-frontend;
|
||||
--%-frontend: --containerized---frontend-dependencies-frontend;
|
||||
|
||||
.PHONY: --compile-frontend
|
||||
--compile-frontend:
|
||||
@ -85,38 +89,53 @@ test: test-frontend test-backend i18n-check
|
||||
@echo Karma frontend tests are currently broken after npm update and have therefor been temporarily disabled.
|
||||
# npx -- karma start --conf karma.conf.cjs $(WATCH)
|
||||
|
||||
# TODO: rewrite
|
||||
.PHONY: --test-frontend-watch
|
||||
--test-frontend-watch: WATCH=--single-run false
|
||||
--test-frontend-watch: --test-frontend;
|
||||
## TODO: rewrite
|
||||
#.PHONY: --test-frontend-watch
|
||||
#--test-frontend-watch: WATCH=--single-run false
|
||||
#--test-frontend-watch: --test-frontend;
|
||||
#
|
||||
#node_modules: package.json package-lock.json
|
||||
# $(MAKE) -- --containerized---node_modules-frontend
|
||||
#.PHONY: --node_modules
|
||||
#--node_modules: package.json package-lock.json
|
||||
# npm ci --cache .npm --prefer-offline
|
||||
#
|
||||
#package-lock.json: package.json
|
||||
# $(MAKE) -- --image-run---package-lock.json
|
||||
#.PHONY: --package-lock.json
|
||||
#--package-lock.json: package.json
|
||||
# npm install --cache .npm --prefer-offline
|
||||
#
|
||||
#assets: node_modules
|
||||
# $(MAKE) -- --image-run---assets
|
||||
#.PHONY: --assets/icons
|
||||
#--assets: node_modules
|
||||
# ./utils/renamer.pl node_modules/@fortawesome/fontawesome-free/svgs/solid utils/rename-fa.json assets/icons/fradrive
|
||||
# ./utils/renamer.pl node_modules/@fortawesome/fontawesome-free/svgs/regular utils/rename-fa.json assets/icons/fradrive
|
||||
#
|
||||
#well-known: node_modules assets well-known/.well-known
|
||||
# $(MAKE) -- --containerized---well-known-frontend
|
||||
#.PHONY: --well-known
|
||||
#--well-known: --node_modules assets well-known/.well-known
|
||||
# npx webpack --progress
|
||||
## mark well-known directory as clean after successful webpack run:
|
||||
# touch well-known/.well-known
|
||||
|
||||
.PHONY: --frontend-dependencies
|
||||
--frontend-dependencies: node_modules package.json package-lock.json assets
|
||||
|
||||
node_modules: package.json package-lock.json
|
||||
$(MAKE) -- --image-run---node_modules
|
||||
.PHONY: --node_modules
|
||||
--node_modules: package.json package-lock.json
|
||||
npm ci --cache .npm --prefer-offline
|
||||
|
||||
package-lock.json: package.json
|
||||
$(MAKE) -- --image-run---package-lock.json
|
||||
.PHONY: --package-lock.json
|
||||
--package-lock.json: package.json
|
||||
npm install --cache .npm --prefer-offline
|
||||
|
||||
assets: node_modules
|
||||
$(MAKE) -- --image-run---assets
|
||||
.PHONY: --assets/icons
|
||||
--assets: node_modules
|
||||
./utils/renamer.pl node_modules/@fortawesome/fontawesome-free/svgs/solid utils/rename-fa.json assets/icons/fradrive
|
||||
./utils/renamer.pl node_modules/@fortawesome/fontawesome-free/svgs/regular utils/rename-fa.json assets/icons/fradrive
|
||||
|
||||
well-known: node_modules assets well-known/.well-known
|
||||
$(MAKE) -- --image-run---well-known
|
||||
.PHONY: --well-known
|
||||
--well-known: node_modules assets well-known/.well-known
|
||||
npx webpack --progress
|
||||
# mark well-known directory as clean after successful webpack run:
|
||||
touch well-known/.well-known
|
||||
|
||||
|
||||
well-known/.well-known:
|
||||
# no-op target
|
||||
|
||||
@ -129,21 +148,21 @@ well-known/.well-known:
|
||||
|
||||
.PHONY: %-backend
|
||||
%-backend: FRADRIVE_SERVICE=backend
|
||||
%-backend: --image-build --%-backend-dev;
|
||||
%-backend: --image-build --containerized-%-dev-backend;
|
||||
|
||||
.PHONY: %-backend-prod
|
||||
%-backend-prod: FRADRIVE_SERVICE=backend
|
||||
%-backend-prod: --image-build --%-backend-prod;
|
||||
.PHONY: %-prod-backend
|
||||
%-prod-backend: FRADRIVE_SERVICE=backend
|
||||
%-prod-backend: --image-build --containerized-%-prod-backend;
|
||||
|
||||
.PHONY: --%-backend-dev
|
||||
--%-backend-dev: FRADRIVE_SERVICE=backend
|
||||
--%-backend-dev: stackopts=--flag uniworx:dev
|
||||
--%-backend-dev: --image-build --%-backend;
|
||||
.PHONY: --%-dev-backend
|
||||
--%-dev-backend: FRADRIVE_SERVICE=backend
|
||||
--%-dev-backend: stackopts=--flag uniworx:dev
|
||||
--%-dev-backend: --image-build --containerized-%-backend;
|
||||
|
||||
.PHONY: --%-backend-prod
|
||||
--%-backend-prod: FRADRIVE_SERVICE=backend
|
||||
--%-backend-prod: stackopts=--flag uniworx:-dev
|
||||
--%-backend-prod: --image-build --%-backend;
|
||||
.PHONY: --%-prod-backend
|
||||
--%-prod-backend: FRADRIVE_SERVICE=backend
|
||||
--%-prod-backend: stackopts=--flag uniworx:-dev
|
||||
--%-prod-backend: --image-build --containerized-%-backend;
|
||||
|
||||
.PHONY: --serve-backend
|
||||
--serve-backend: .stack-work.lock
|
||||
@ -187,11 +206,19 @@ database: .stack .stack-work.lock compile-backend-prod
|
||||
|
||||
.PHONY: --containerized-%-frontend
|
||||
--containerized-%-frontend: FRADRIVE_SERVICE=frontend
|
||||
--containerized-%-frontend: --image-build --image-run-%-frontend;
|
||||
#--containerized-%-frontend: --image-build --image-run-%-frontend;
|
||||
--containerized-%-frontend: --image-build
|
||||
if [ "$(IN_CONTAINER)" == "false" ] ; then \
|
||||
$(MAKE) -- --image-run-$*-frontend ; \
|
||||
fi
|
||||
|
||||
.PHONY: --containerized-%-backend
|
||||
--containerized-%-backend: FRADRIVE_SERVICE=backend
|
||||
--containerized-%-backend: --image-build --image-run-%-backend;
|
||||
#--containerized-%-backend: --image-build --image-run-%-backend;
|
||||
--containerized-%-backend: --image-build
|
||||
if [ "$(IN_CONTAINER)" == "false" ] ; then \
|
||||
$(MAKE) -- --image-run-$*-backend ; \
|
||||
fi
|
||||
|
||||
.PHONY: image-rebuild
|
||||
image-rebuild-%:
|
||||
@ -205,14 +232,16 @@ image-rebuild-%:
|
||||
if [ "$(IN_CI)" == "true" ] ; then \
|
||||
PROJECT_DIR=/fradrive; \
|
||||
fi; \
|
||||
$(CONTAINER_COMMAND) build $(NO_CACHE) -v $(PWD):$${MOUNT_DIR} --build-arg MOUNT_DIR=$${MOUNT_DIR} --build-arg PROJECT_DIR=$${PROJECT_DIR} --tag $(FRADRIVE_SERVICE) --file $(PWD)/.Dockerfile
|
||||
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/$(FRADRIVE_SERVICE) --file $(PWD)/.Dockerfile ; \
|
||||
fi
|
||||
|
||||
.PHONY: --image-run-%
|
||||
--image-run-%:
|
||||
ifeq ($(IN_CONTAINER),true)
|
||||
$(MAKE) -- $*
|
||||
else
|
||||
$(CONTAINER_COMMAND) run -v $(PWD):/mnt/fradrive --env FRADRIVE_MAKE_TARGET=$* $(FRADRIVE_SERVICE)
|
||||
$(CONTAINER_COMMAND) run -v $(PWD):/mnt/fradrive --env FRADRIVE_MAKE_TARGET=$* fradrive/$(FRADRIVE_SERVICE)
|
||||
endif
|
||||
|
||||
##### CONTAINER TARGETS #####
|
||||
@ -228,4 +257,4 @@ i18n-check: --image-run---i18n-check
|
||||
|
||||
%.lock:
|
||||
[ -e $@ ] || touch $@
|
||||
flock -en $@ true
|
||||
flock -en $@ true
|
||||
|
||||
@ -23,8 +23,9 @@ RUN if [ "${PROJECT_DIR}" != "${MOUNT_DIR}"]; then cp -r ${MOUNT_DIR}/* ${PROJEC
|
||||
WORKDIR ${PROJECT_DIR}
|
||||
ENV HOME=${PROJECT_DIR}
|
||||
|
||||
RUN make node_modules IN_CONTAINER=true
|
||||
RUN make well-known IN_CONTAINER=true
|
||||
#RUN make node_modules IN_CONTAINER=true
|
||||
#RUN make well-known IN_CONTAINER=true
|
||||
RUN make -- --frontend-dependencies
|
||||
|
||||
ENV FRADRIVE_MAKE_TARGET=watch-frontend
|
||||
ENTRYPOINT make -- ${FRADRIVE_MAKE_TARGET} IN_CONTAINER=true CHROME_BIN=${CHROME_BIN}
|
||||
|
||||
Reference in New Issue
Block a user