From 04269c1f7d1307dde86e8b3151b9303fe44dd7ee Mon Sep 17 00:00:00 2001
From: Martin Weise <martin.weise@tuwien.ac.at>
Date: Wed, 16 Apr 2025 07:02:18 +0200
Subject: [PATCH] WIP

Signed-off-by: Martin Weise <martin.weise@tuwien.ac.at>
---
 .gitlab-ci.yml                           | 38 +++++++-----------------
 dbrepo-analyse-service/Dockerfile        |  2 +-
 dbrepo-dashboard-service/Dockerfile      |  2 +-
 dbrepo-dashboard-service/init.Dockerfile |  2 +-
 dbrepo-dashboard-ui/Dockerfile           |  2 +-
 dbrepo-data-service/Dockerfile           |  6 ++--
 dbrepo-metadata-service/Dockerfile       |  6 ++--
 dbrepo-search-service/Dockerfile         |  2 +-
 dbrepo-search-service/init.Dockerfile    |  2 +-
 dbrepo-ui/Dockerfile                     |  4 +--
 docker-compose.yml                       | 21 -------------
 grafana/grafana.ini                      |  5 ----
 12 files changed, 24 insertions(+), 68 deletions(-)
 delete mode 100644 grafana/grafana.ini

diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 2d5f3a4282..67c44b1a2d 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -524,7 +524,7 @@ release-images:
   image: docker:${DOCKER_VERSION}-dind
   variables:
     BUILD_ARGS: --network=host
-    COMPOSE_BUILD_ARGS: -q --parallel
+    BAKE_ARGS: --allow=network.host --builder multiarch --load
   dependencies:
     - clean-images
     - test-analyse-service
@@ -538,37 +538,19 @@ release-images:
     - tags
     - dev
   before_script:
+    - "apk add --no-cache make"
     - "docker logout ${CI_REGISTRY_URL}"
     - "echo ${CI_REGISTRY_PASSWORD} | docker login --username ${CI_REGISTRY_USER} --password-stdin ${CI_REGISTRY_URL}"
     - "docker logout ${CI_REGISTRY2_URL}"
     - "echo ${CI_REGISTRY2_PASSWORD} | docker login --username ${CI_REGISTRY2_USER} --password-stdin ${CI_REGISTRY2_URL}"
-  script:
-    - docker build $BUILD_ARGS -t dbrepo-core:build --target build ./lib/java/dbrepo-core
-    - docker build $BUILD_ARGS -t dbrepo-data-service:build --target build ./dbrepo-data-service
-    - docker build $BUILD_ARGS -t dbrepo-metadata-service:build --target build ./dbrepo-metadata-service
-    - docker compose build $COMPOSE_BUILD_ARGS
-    - docker tag dbrepo-analyse-service:latest "${CI_REGISTRY2_URL}/analyse-service:${APP_VERSION}${BUILD_VERSION}"
-    - docker tag dbrepo-auth-service-init:latest "${CI_REGISTRY2_URL}/auth-service-init:${APP_VERSION}${BUILD_VERSION}"
-    - docker tag dbrepo-dashboard-service:latest "${CI_REGISTRY2_URL}/dashboard-service:${APP_VERSION}${BUILD_VERSION}"
-    - docker tag dbrepo-dashboard-service-init:latest "${CI_REGISTRY2_URL}/dashboard-service-init:${APP_VERSION}${BUILD_VERSION}"
-    - docker tag dbrepo-dashboard-ui:latest "${CI_REGISTRY2_URL}/dashboard-ui:${APP_VERSION}${BUILD_VERSION}"
-    - docker tag dbrepo-data-service:latest "${CI_REGISTRY2_URL}/data-service:${APP_VERSION}${BUILD_VERSION}"
-    - docker tag dbrepo-metadata-service:latest "${CI_REGISTRY2_URL}/metadata-service:${APP_VERSION}${BUILD_VERSION}"
-    - docker tag dbrepo-search-service:latest "${CI_REGISTRY2_URL}/search-service:${APP_VERSION}${BUILD_VERSION}"
-    - docker tag dbrepo-search-service-init:latest "${CI_REGISTRY2_URL}/search-service-init:${APP_VERSION}${BUILD_VERSION}"
-    - docker tag dbrepo-storage-service-init:latest "${CI_REGISTRY2_URL}/storage-service-init:${APP_VERSION}${BUILD_VERSION}"
-    - docker tag dbrepo-ui:latest "${CI_REGISTRY2_URL}/ui:${APP_VERSION}${BUILD_VERSION}"
-    - docker push "${CI_REGISTRY2_URL}/analyse-service:${APP_VERSION}${BUILD_VERSION}"
-    - docker push "${CI_REGISTRY2_URL}/auth-service-init:${APP_VERSION}${BUILD_VERSION}"
-    - docker push "${CI_REGISTRY2_URL}/dashboard-service:${APP_VERSION}${BUILD_VERSION}"
-    - docker push "${CI_REGISTRY2_URL}/dashboard-service-init:${APP_VERSION}${BUILD_VERSION}"
-    - docker push "${CI_REGISTRY2_URL}/dashboard-ui:${APP_VERSION}${BUILD_VERSION}"
-    - docker push "${CI_REGISTRY2_URL}/data-service:${APP_VERSION}${BUILD_VERSION}"
-    - docker push "${CI_REGISTRY2_URL}/metadata-service:${APP_VERSION}${BUILD_VERSION}"
-    - docker push "${CI_REGISTRY2_URL}/search-service:${APP_VERSION}${BUILD_VERSION}"
-    - docker push "${CI_REGISTRY2_URL}/search-service-init:${APP_VERSION}${BUILD_VERSION}"
-    - docker push "${CI_REGISTRY2_URL}/storage-service-init:${APP_VERSION}${BUILD_VERSION}"
-    - docker push "${CI_REGISTRY2_URL}/ui:${APP_VERSION}${BUILD_VERSION}"
+    - docker buildx create --name multiarch --driver docker-container --use
+  script:
+    - docker buildx build $BUILD_ARGS --platform=linux/amd64 -t dbrepo-core:build --target build ./lib/java/dbrepo-core
+    - docker buildx bake $BAKE_ARGS --platform=linux/amd64
+    - REPOSITORY_URL=$CI_REGISTRY_URL make release-images
+    - docker buildx build $BUILD_ARGS --platform=linux/arm64 -t dbrepo-core:build --target build ./lib/java/dbrepo-core
+    - docker buildx bake $BAKE_ARGS --platform=linux/arm64
+    - REPOSITORY_URL=$CI_REGISTRY2_URL make release-images
 
 release-helm:
   stage: release
diff --git a/dbrepo-analyse-service/Dockerfile b/dbrepo-analyse-service/Dockerfile
index 26ea3ce65c..df313ec934 100644
--- a/dbrepo-analyse-service/Dockerfile
+++ b/dbrepo-analyse-service/Dockerfile
@@ -1,4 +1,4 @@
-FROM python:3.11-alpine3.21
+FROM --platform=$BUILDPLATFORM python:3.11-alpine3.21
 LABEL org.opencontainers.image.authors="martin.weise@tuwien.ac.at"
 
 RUN apk --no-cache add \
diff --git a/dbrepo-dashboard-service/Dockerfile b/dbrepo-dashboard-service/Dockerfile
index e739245d30..62caad802f 100644
--- a/dbrepo-dashboard-service/Dockerfile
+++ b/dbrepo-dashboard-service/Dockerfile
@@ -1,4 +1,4 @@
-FROM python:3.11-alpine3.21
+FROM --platform=$BUILDPLATFORM python:3.11-alpine3.21
 LABEL org.opencontainers.image.authors="martin.weise@tuwien.ac.at"
 
 RUN apk add --no-cache \
diff --git a/dbrepo-dashboard-service/init.Dockerfile b/dbrepo-dashboard-service/init.Dockerfile
index 487e3e280e..4d00c467cd 100644
--- a/dbrepo-dashboard-service/init.Dockerfile
+++ b/dbrepo-dashboard-service/init.Dockerfile
@@ -1,4 +1,4 @@
-FROM python:3.11-alpine3.21
+FROM --platform=$BUILDPLATFORM python:3.11-alpine3.21
 LABEL org.opencontainers.image.authors="martin.weise@tuwien.ac.at"
 
 RUN apk add --no-cache \
diff --git a/dbrepo-dashboard-ui/Dockerfile b/dbrepo-dashboard-ui/Dockerfile
index daf9ef46dd..346f800c8c 100644
--- a/dbrepo-dashboard-ui/Dockerfile
+++ b/dbrepo-dashboard-ui/Dockerfile
@@ -1,4 +1,4 @@
-FROM docker.io/bitnami/grafana:11.5.3 AS runtime
+FROM --platform=$BUILDPLATFORM bitnami/grafana:11.5.3 AS runtime
 LABEL org.opencontainers.image.authors="martin.weise@tuwien.ac.at"
 
 COPY --chown=grafana:grafana ./grafana.ini ./conf/grafana.ini
diff --git a/dbrepo-data-service/Dockerfile b/dbrepo-data-service/Dockerfile
index 7468f1c568..769014f61b 100644
--- a/dbrepo-data-service/Dockerfile
+++ b/dbrepo-data-service/Dockerfile
@@ -1,9 +1,9 @@
 ###### FIRST STAGE ######
-FROM dbrepo-core:build AS dependency
+FROM --platform=$BUILDPLATFORM dbrepo-core:build AS dependency
 LABEL org.opencontainers.image.authors="martin.weise@tuwien.ac.at"
 
 ###### SECOND STAGE ######
-FROM maven:3-amazoncorretto-17 AS build
+FROM --platform=$BUILDPLATFORM maven:3-amazoncorretto-17 AS build
 LABEL org.opencontainers.image.authors="martin.weise@tuwien.ac.at"
 
 COPY ./pom.xml ./
@@ -21,7 +21,7 @@ COPY ./services ./services
 RUN mvn -fn clean package -DskipTests
 
 ###### THIRD STAGE ######
-FROM amazoncorretto:17-alpine3.19 AS runtime
+FROM --platform=$BUILDPLATFORM amazoncorretto:17-alpine3.19 AS runtime
 LABEL org.opencontainers.image.authors="martin.weise@tuwien.ac.at"
 
 RUN apk add --no-cache curl bash jq
diff --git a/dbrepo-metadata-service/Dockerfile b/dbrepo-metadata-service/Dockerfile
index 8d01865d85..f034640e6a 100644
--- a/dbrepo-metadata-service/Dockerfile
+++ b/dbrepo-metadata-service/Dockerfile
@@ -1,9 +1,9 @@
 ###### FIRST STAGE ######
-FROM dbrepo-core:build AS dependency
+FROM --platform=$BUILDPLATFORM dbrepo-core:build AS dependency
 LABEL org.opencontainers.image.authors="martin.weise@tuwien.ac.at"
 
 ###### SECOND STAGE ######
-FROM maven:3-amazoncorretto-17 AS build
+FROM --platform=$BUILDPLATFORM maven:3-amazoncorretto-17 AS build
 LABEL org.opencontainers.image.authors="martin.weise@tuwien.ac.at"
 
 COPY ./pom.xml ./
@@ -22,7 +22,7 @@ COPY ./services ./services
 RUN mvn -fn clean package -DskipTests
 
 ###### THIRD STAGE ######
-FROM amazoncorretto:17-alpine3.19 AS runtime
+FROM --platform=$BUILDPLATFORM amazoncorretto:17-alpine3.19 AS runtime
 LABEL org.opencontainers.image.authors="martin.weise@tuwien.ac.at"
 
 RUN apk add --no-cache curl bash jq
diff --git a/dbrepo-search-service/Dockerfile b/dbrepo-search-service/Dockerfile
index 0366024576..1d0862a9e5 100644
--- a/dbrepo-search-service/Dockerfile
+++ b/dbrepo-search-service/Dockerfile
@@ -1,4 +1,4 @@
-FROM python:3.11-alpine3.21
+FROM --platform=$BUILDPLATFORM python:3.11-alpine3.21
 LABEL org.opencontainers.image.authors="martin.weise@tuwien.ac.at"
 
 RUN apk add --no-cache \
diff --git a/dbrepo-search-service/init.Dockerfile b/dbrepo-search-service/init.Dockerfile
index cf4cb94d85..2099df48cc 100644
--- a/dbrepo-search-service/init.Dockerfile
+++ b/dbrepo-search-service/init.Dockerfile
@@ -1,4 +1,4 @@
-FROM python:3.11-alpine3.21
+FROM --platform=$BUILDPLATFORM python:3.11-alpine3.21
 LABEL org.opencontainers.image.authors="martin.weise@tuwien.ac.at"
 
 RUN apk add --no-cache \
diff --git a/dbrepo-ui/Dockerfile b/dbrepo-ui/Dockerfile
index 53928c4998..966b7dbb3d 100644
--- a/dbrepo-ui/Dockerfile
+++ b/dbrepo-ui/Dockerfile
@@ -1,5 +1,5 @@
 ###### FIRST STAGE ######
-FROM oven/bun:1.1.40-alpine AS build
+FROM --platform=$BUILDPLATFORM oven/bun:1.1.40-alpine AS build
 
 WORKDIR /app
 
@@ -27,7 +27,7 @@ COPY ./nuxt.config.ts ./nuxt.config.ts
 RUN bun run build
 
 ###### SECOND STAGE ######
-FROM node:22.9.0-alpine3.20 AS runtime
+FROM --platform=$BUILDPLATFORM node:22.9.0-alpine3.20 AS runtime
 
 ARG APP_VERSION="latest"
 ARG COMMIT=""
diff --git a/docker-compose.yml b/docker-compose.yml
index 69db510315..c4c990a8cc 100644
--- a/docker-compose.yml
+++ b/docker-compose.yml
@@ -88,7 +88,6 @@ services:
       <<: *healthcheck-params
     deploy:
       <<: *resources-micro-hm
-    platform: linux/amd64
     logging:
       driver: json-file
 
@@ -112,7 +111,6 @@ services:
       <<: *healthcheck-params
     deploy:
       <<: *resources-micro-hm
-    platform: linux/amd64
     logging:
       driver: json-file
 
@@ -135,7 +133,6 @@ services:
       <<: *healthcheck-params
     deploy:
       <<: *resources-micro
-    platform: linux/amd64
     logging:
       driver: json-file
 
@@ -172,7 +169,6 @@ services:
       <<: *healthcheck-params
     deploy:
       <<: *resources-medium
-    platform: linux/amd64
     depends_on:
       dbrepo-identity-service:
         condition: service_healthy
@@ -199,7 +195,6 @@ services:
       SYSTEM_PASSWORD: ${SYSTEM_PASSWORD:-admin}
     deploy:
       <<: *resources-nano
-    platform: linux/amd64
     depends_on:
       dbrepo-auth-service:
         condition: service_healthy
@@ -263,7 +258,6 @@ services:
       <<: *healthcheck-params
     deploy:
       <<: *resources-small
-    platform: linux/amd64
     depends_on:
       dbrepo-auth-service:
         condition: service_healthy
@@ -308,7 +302,6 @@ services:
       <<: *healthcheck-params
     deploy:
       <<: *resources-micro
-    platform: linux/amd64
     logging:
       driver: json-file
 
@@ -337,7 +330,6 @@ services:
       <<: *healthcheck-params
     deploy:
       <<: *resources-micro
-    platform: linux/amd64
     logging:
       driver: json-file
 
@@ -355,7 +347,6 @@ services:
       <<: *healthcheck-params
     deploy:
       <<: *resources-medium
-    platform: linux/amd64
     logging:
       driver: json-file
 
@@ -385,7 +376,6 @@ services:
       <<: *healthcheck-params
     deploy:
       <<: *resources-micro
-    platform: linux/amd64
     logging:
       driver: json-file
 
@@ -418,7 +408,6 @@ services:
       <<: *healthcheck-params
     deploy:
       <<: *resources-micro
-    platform: linux/amd64
     depends_on:
       dbrepo-search-service:
         condition: service_healthy
@@ -441,7 +430,6 @@ services:
       <<: *healthcheck-params
     deploy:
       <<: *resources-nano
-    platform: linux/amd64
     depends_on:
       dbrepo-analyse-service:
         condition: service_healthy
@@ -483,7 +471,6 @@ services:
       <<: *healthcheck-params
     deploy:
       <<: *resources-nano
-    platform: linux/amd64
     logging:
       driver: json-file
 
@@ -506,7 +493,6 @@ services:
       SYSTEM_PASSWORD: "${SYSTEM_PASSWORD:-admin}"
     deploy:
       <<: *resources-nano
-    platform: linux/amd64
     depends_on:
       dbrepo-search-db:
         condition: service_healthy
@@ -533,7 +519,6 @@ services:
       SYSTEM_PASSWORD: "${SYSTEM_PASSWORD:-admin}"
     deploy:
       <<: *resources-nano
-    platform: linux/amd64
     depends_on:
       dbrepo-dashboard-ui:
         condition: service_healthy
@@ -558,7 +543,6 @@ services:
       <<: *healthcheck-params
     deploy:
       <<: *resources-nano
-    platform: linux/amd64
     logging:
       driver: json-file
 
@@ -575,7 +559,6 @@ services:
       <<: *healthcheck-params
     deploy:
       <<: *resources-nano
-    platform: linux/amd64
     logging:
       driver: json-file
 
@@ -595,7 +578,6 @@ services:
       STORAGE_ENDPOINT: ${STORAGE_ENDPOINT:-http://storage-service:9000}
     deploy:
       <<: *resources-nano
-    platform: linux/amd64
     depends_on:
       dbrepo-storage-service:
         condition: service_healthy
@@ -648,7 +630,6 @@ services:
       <<: *healthcheck-params
     deploy:
       <<: *resources-large
-    platform: linux/amd64
     depends_on:
       dbrepo-data-db:
         condition: service_healthy
@@ -681,7 +662,6 @@ services:
       <<: *healthcheck-params
     deploy:
       <<: *resources-nano
-    platform: linux/amd64
     extra_hosts:
       - "localhost:host-gateway"
     logging:
@@ -708,7 +688,6 @@ services:
       <<: *healthcheck-params
     deploy:
       <<: *resources-micro
-    platform: linux/amd64
     depends_on:
       dbrepo-dashboard-ui:
         condition: service_healthy
diff --git a/grafana/grafana.ini b/grafana/grafana.ini
deleted file mode 100644
index df8b9eb1b4..0000000000
--- a/grafana/grafana.ini
+++ /dev/null
@@ -1,5 +0,0 @@
-[server]
-domain = grafana
-root_url = http://grafana/grafana
-serve_from_sub_path = true
-
-- 
GitLab