From a6aaf533b43b0451119098f010818880ead575d3 Mon Sep 17 00:00:00 2001 From: Sarah Vaupel Date: Wed, 26 Feb 2025 13:43:05 +0100 Subject: [PATCH] build(Makefile): load and use ci-images from tar file if present for frontend and backend --- .gitignore | 1 + Makefile | 57 +++++++++++++++++++++++++++++++++++++++++++++++------- 2 files changed, 51 insertions(+), 7 deletions(-) diff --git a/.gitignore b/.gitignore index fdaf213a9..abfa59bb9 100644 --- a/.gitignore +++ b/.gitignore @@ -67,3 +67,4 @@ tunnel.log .develop.cmd /.vscode .ghc/ghci_history +.azure-pipelines/images/*.tar diff --git a/Makefile b/Makefile index 5adf403ea..b35212dcf 100644 --- a/Makefile +++ b/Makefile @@ -16,6 +16,10 @@ export MEMCACHED_IMAGE = $(IMAGE_REGISTRY)/memcached:latest export MINIO_IMAGE = $(IMAGE_REGISTRY)/minio/minio:latest export MAILDEV_IMAGE = $(IMAGE_REGISTRY)/maildev/maildev:latest # TODO: needs different port than 1025 to avoid conflicts +export CI_IMAGE_DIR ?= ./.azure-pipelines/images +export CI_IMAGE_REPO = devfra.azurecr.io/de.fraport.fradrive.build +export PREFER_CI_IMAGES ?= true + export IN_CONTAINER ?= false export IN_CI ?= false export CONTAINER_FILE @@ -31,9 +35,11 @@ export SERVICE export SERVICE_VARIANT ?= $(SERVICE) export JOB export IMAGE +export IMAGE_FALLBACK export SET_IMAGE export ENTRYPOINT export EXEC_OPTS +export IMAGE_PULL_POLICY?=missing export STACK_CORES = $(shell echo $(($(CPU_CORES)/2))) export BASE_PORTS @@ -112,24 +118,48 @@ start: .PHONY: %-backend %-backend: SERVICE=backend %-backend: SERVICE_VARIANT=backend -%-backend: IMAGE=localhost/fradrive/backend +ifeq ($(PREFER_CI_IMAGES),true) + %-backend: IMAGE=$(CI_IMAGE_REPO)/backend + %-backend: IMAGE_FALLBACK=localhost/fradrive/backend +else + %-backend: IMAGE=localhost/fradrive/backend +endif +%-backend: IMAGE_PULL_POLICY=never %-backend: BASE_PORTS = "DEV_PORT_HTTP=3000" "DEV_PORT_HTTPS=3443" .PHONY: %-uniworxdb %-uniworxdb: SERVICE=backend %-uniworxdb: SERVICE_VARIANT=uniworxdb -%-uniworxdb: IMAGE=localhost/fradrive/backend +ifeq ($(PREFER_CI_IMAGES),true) + %-uniworxdb: IMAGE=$(CI_IMAGE_REPO)/backend + %-uniworxdb: IMAGE_FALLBACK=localhost/fradrive/backend +else + %-uniworxdb: IMAGE=localhost/fradrive/backend +endif +%-uniworxdb: IMAGE_PULL_POLICY=never .PHONY: %-ghci %-ghci: SERVICE=backend %-ghci: SERVICE_VARIANT=ghci -%-ghci: IMAGE=localhost/fradrive/backend +ifeq ($(PREFER_CI_IMAGES),true) + %-ghci: IMAGE=$(CI_IMAGE_REPO)/backend + %-ghci: IMAGE_FALLBACK=localhost/fradrive/backend +else + %-ghci: IMAGE=localhost/fradrive/backend +endif +%-ghci: IMAGE_PULL_POLICY=never .PHONY: %-hoogle %-hoogle: SERVICE=backend %-hoogle: SERVICE_VARIANT=hoogle %-hoogle: BASE_PORTS = "HOOGLE_PORT=8081" -%-hoogle: IMAGE=localhost/fradrive/backend +ifeq ($(PREFER_CI_IMAGES),true) + %-hoogle: IMAGE=$(CI_IMAGE_REPO)/backend + %-hoogle: IMAGE_FALLBACK=localhost/fradrive/backend +else + %-hoogle: IMAGE=localhost/fradrive/backend +endif +%-hoogle: IMAGE_PULL_POLICY=never --start-hoogle: HOOGLE_PORT=`cat $(CONTAINER_FILE) | grep 'HOOGLE_PORT=' | sed 's/HOOGLE_PORT=//'` ; \ stack $(STACK_CORES) hoogle -- server --local --port $${HOOGLE_PORT} @@ -137,23 +167,32 @@ start: .PHONY: %-frontend %-frontend: SERVICE=frontend %-frontend: SERVICE_VARIANT=frontend -%-frontend: IMAGE=localhost/fradrive/frontend +ifeq ($(PREFER_CI_IMAGES),true) + %-frontend: IMAGE=$(CI_IMAGE_REPO)/frontend + %-frontend: IMAGE_FALLBACK=localhost/fradrive/frontend +else + %-frontend: IMAGE=localhost/fradrive/frontend +endif +%-frontend: IMAGE_PULL_POLICY=never .PHONY: %-postgres %-postgres: SERVICE=postgres %-postgres: SERVICE_VARIANT=postgres %-postgres: BASE_PORTS = "PGPORT=5432" +# TODO: support ci-postgres images? %-postgres: IMAGE=localhost/fradrive/postgres .PHONY: %-memcached %-memcached: SERVICE=memcached %-memcached: SERVICE_VARIANT=memcached +# TODO: support ci-memcached images? %-memcached: SET_IMAGE=$$(MEMCACHED_IMAGE) --port=`cat $$(CONTAINER_FILE) | grep 'MEMCACHED_PORT=' | sed 's/MEMCACHED_PORT=//'` %-memcached: BASE_PORTS = "MEMCACHED_PORT=11211" .PHONY: %-minio %-minio: SERVICE=minio %-minio: SERVICE_VARIANT=minio +# TODO: support ci-minio images? %-minio: SET_IMAGE=$$(MINIO_IMAGE) -- server `mktemp` --address=:`cat $$(CONTAINER_FILE) | grep 'UPLOAD_S3_PORT=' | sed 's/UPLOAD_S3_PORT=//'` %-minio: BASE_PORTS = "UPLOAD_S3_PORT=9000" @@ -212,11 +251,13 @@ ghci: shell-ghci; $(MAKE) -- --$* CONTAINER_FILE=$${CONTAINER_FILE} CONTAINER_IDENT=$${CONTAINER_IDENT} JOB=$(JOB) .PHONY: rebuild-% -# HELP(rebuild-{backend,frontend,database,memcached,minio}): force-rebuild a given container image +# HELP(rebuild-{backend,frontend,database,memcached,minio}): force-reload a given ci image, or (if not present) force-rebuild a given container image rebuild-%: $(MAKE) -- --image-build SERVICE=$* NO_CACHE=--no-cache --image-build: -ifeq "$(IMAGE)" "localhost/fradrive/$(SERVICE)" +ifeq "$(IMAGE)" "$(CI_IMAGE_REPO)/$(SERVICE)" + $(CONTAINER_COMMAND) load --input="$(CI_IMAGE_DIR)/$(SERVICE).tar" +else ifeq "$(IMAGE)" "localhost/fradrive/$(SERVICE)" rm -f .Dockerfile ln -s docker/$(SERVICE)/Dockerfile .Dockerfile PROJECT_DIR=/fradrive; \ @@ -227,6 +268,7 @@ ifeq "$(IMAGE)" "localhost/fradrive/$(SERVICE)" --env IN_CONTAINER=true \ --env JOB=$(JOB) \ --tag fradrive/$(SERVICE) \ + --pull=never \ --file $(PWD)/.Dockerfile ; \ fi else @@ -245,6 +287,7 @@ endif fi ; \ CONTAINER_ID=`$(CONTAINER_BGRUN) \ -v $(PWD):$(PROJECT_DIR):rw \ + --pull=$(IMAGE_PULL_POLICY) \ --env IN_CONTAINER=true \ --env CONTAINER_FILE=$(CONTAINER_FILE) \ --env CONTAINER_NAME=$${CONTAINER_NAME} \