From 5f1ffb0d046fea4f7f5b2e47fd020388db3e17e3 Mon Sep 17 00:00:00 2001 From: StefanMoCoAt Date: Fri, 13 Feb 2026 20:51:41 +0100 Subject: [PATCH] chore(ci): streamline Docker workflow with ARM64 optimization and updated caching strategies --- .gitea/workflows/docker-publish.yaml | 135 +++++++-------------------- 1 file changed, 34 insertions(+), 101 deletions(-) diff --git a/.gitea/workflows/docker-publish.yaml b/.gitea/workflows/docker-publish.yaml index 67bdafdd..b9622a24 100644 --- a/.gitea/workflows/docker-publish.yaml +++ b/.gitea/workflows/docker-publish.yaml @@ -1,132 +1,65 @@ -name: Build and Publish Docker Images +name: Docker Build & Publish (ARM64 Optimized) run-name: Build & Publish by @${{ github.actor }} on: push: - branches: [ "main" ] - paths: - - 'backend/**' - - 'platform/**' - - 'core/**' - - 'frontend/**' - - 'config/docker/**' - - 'build.gradle.kts' - - 'settings.gradle.kts' - - 'gradle.properties' - - 'docker-compose.yaml' - - '.gitea/workflows/docker-publish.yaml' - -env: - REGISTRY: git.mo-code.at - # WICHTIG: Kleingeschrieben für Docker-Konformität - IMAGE_PREFIX: mocode-software/meldestelle - # Build Arguments für Zora (ARM64 Power) - JAVA_VERSION: "25" - GRADLE_VERSION: "9.3.1" - # OPTIMIERUNG: Gradle Parameter für mehr Speed - GRADLE_OPTS: "-Dorg.gradle.parallel=true -Dorg.gradle.workers.max=8" - # Deine neuen JVM Power-Flags für ARM64 (Cortex-A720) - JVM_OPTS_ARM64: "-XX:ActiveProcessorCount=12 -XX:+UseG1GC -XX:+UseTransparentHugePages -XX:+UseSVE=1" + branches: [ main ] + tags: [ 'v*' ] jobs: - build-and-push: + build: + # Nutze ein Label, das deinen ARM64-Runner anspricht (z.B. ubuntu-latest oder arm64) runs-on: ubuntu-latest - strategy: - fail-fast: false - matrix: - include: - - service: keycloak - context: . - dockerfile: config/docker/keycloak/Dockerfile - image: keycloak - - service: api-gateway - context: . - dockerfile: backend/infrastructure/gateway/Dockerfile - image: gateway - - service: ping-service - context: . - dockerfile: backend/services/ping/Dockerfile - image: ping-service - - service: web-app - context: . - dockerfile: config/docker/caddy/web-app/Dockerfile - image: web-app steps: - - name: Checkout repository - uses: actions/checkout@v3 + - name: Checkout code + uses: actions/checkout@v4 - # Java Setup (Wichtig für Gradle-Builds im Runner) - - name: Set up JDK 25 + - name: Set up JDK 21 (Temurin) uses: actions/setup-java@v4 with: - java-version: '25' + java-version: '21' distribution: 'temurin' + # Aktiviert automatisches Caching für Maven oder Gradle + cache: 'gradle' - # Cache für Gradle (Beschleunigt Folgebauvorgänge massiv) - - name: Setup Gradle Cache - uses: actions/cache@v3 - with: - path: | - ~/.gradle/caches - ~/.gradle/wrapper - key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }} - restore-keys: | - ${{ runner.os }}-gradle- + - name: Grant execute permission for gradlew + run: chmod +x gradlew - # Frontend Build (Nur für web-app notwendig) - - name: Build Frontend (Kotlin JS) - if: matrix.service == 'web-app' - run: | - chmod +x gradlew - # Wir nutzen --no-daemon im Runner, geben aber mehr Memory - ./gradlew :frontend:shells:meldestelle-portal:jsBrowserDistribution \ - -Pproduction=true \ - --max-workers=8 \ - -Dkotlin.daemon.jvm.options="-Xmx4g" + - name: Build with Gradle + # --no-daemon ist in CI-Umgebungen stabiler + run: ./gradlew build --no-daemon - name: Set up Docker Buildx uses: docker/setup-buildx-action@v3 - with: - # Wir erzwingen die Nutzung des Host-Drivers, - # um gRPC-Abstürze im Container-Builder zu vermeiden - driver: docker - # Login bei deiner Gitea Registry - - name: Log in to the Container registry + - name: Login to Gitea Container Registry uses: docker/login-action@v3 with: - registry: ${{ env.REGISTRY }} - username: ${{ secrets.REGISTRY_USER }} - password: ${{ secrets.REGISTRY_TOKEN }} + registry: ${{ gitea.repository_url }} # Oder deine spezifische URL + username: ${{ gitea.actor }} + password: ${{ secrets.GITEA_TOKEN }} - # Metadaten extrahieren (Tags, Labels) - - name: Extract metadata + - name: Extract Metadata (Tags, Labels) id: meta uses: docker/metadata-action@v5 with: - images: ${{ env.REGISTRY }}/${{ env.IMAGE_PREFIX }}/${{ matrix.image }} + images: | + ${{ gitea.repository_url }}/${{ gitea.repository }} tags: | - type=raw,value=latest,enable=${{ github.ref == 'refs/heads/main' }} - type=sha,format=long + type=ref,event=branch + type=semver,pattern={{version}} + type=sha,format=short - # Build und Push (Nativ ARM64 für maximale Geschwindigkeit) - - name: Build and push Docker image - uses: docker/build-push-action@v5 + - name: Build and Push Docker Image + uses: docker/build-push-action@v6 with: - context: ${{ matrix.context }} - file: ${{ matrix.dockerfile }} - push: true - # Fokus auf ARM64 für Zora, AMD64 bleibt für Kompatibilität (optional) + context: . + # Nutze natives ARM64-Build, da der Runner bereits auf ARM64 läuft platforms: linux/arm64 + push: true tags: ${{ steps.meta.outputs.tags }} labels: ${{ steps.meta.outputs.labels }} - build-args: | - DOCKER_BUILD_DATE=$(date -u +'%Y-%m-%dT%H:%M:%SZ') - VERSION=${{ github.sha }} - GRADLE_VERSION=${{ env.GRADLE_VERSION }} - JAVA_VERSION=${{ env.JAVA_VERSION }} - KEYCLOAK_IMAGE_TAG=26.4 - JVM_OPTS_APPEND=${{ env.JVM_OPTS_ARM64 }} - cache-from: type=local,src=/tmp/.buildx-cache - cache-to: type=local,dest=/tmp/.buildx-cache-new,mode=max + # Nutze das Gitea-interne Caching für Docker-Layer + cache-from: type=gha + cache-to: type=gha,mode=max