diff --git a/.gitea/workflows/docker-publish.yaml b/.gitea/workflows/docker-publish.yaml index ee449dd9..d7d4fa89 100644 --- a/.gitea/workflows/docker-publish.yaml +++ b/.gitea/workflows/docker-publish.yaml @@ -1,102 +1,119 @@ name: Build and Publish Docker Images +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 + IMAGE_PREFIX: mocode-software/meldestelle + JAVA_VERSION: "25" + GRADLE_VERSION: "9.3.1" + GRADLE_OPTS: "-Dorg.gradle.parallel=true -Dorg.gradle.workers.max=6" + JVM_OPTS_ARM64: "-XX:ActiveProcessorCount=12 -XX:+UseG1GC -XX:+UseTransparentHugePages -XX:+UseSVE=1" + jobs: - # JOB 1: Backend & Infrastructure (Sequenziell durch max-parallel: 1) - build-backend: + build-and-push: runs-on: ubuntu-latest strategy: - fail-fast: true - max-parallel: 1 # WICHTIG: Verhindert den gleichzeitigen GitHub-Zugriff & RAM-Overload + fail-fast: false matrix: include: - 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 - service: keycloak + context: . dockerfile: config/docker/keycloak/Dockerfile - + image: keycloak steps: - - name: Checkout + - name: Checkout repository uses: actions/checkout@v4 - - name: Java Setup + - name: Set up JDK 25 uses: actions/setup-java@v4 with: - java-version: '25' - distribution: 'temurin' + java-version: ${{ env.JAVA_VERSION }} + distribution: "temurin" + cache: gradle - - name: Buildx Setup - uses: actions/setup-buildx-action@v3 - - - name: Registry Login - uses: docker/login-action@v3 + - name: Setup Gradle Cache + uses: actions/cache@v4 with: - registry: git.mo-code.at - username: ${{ secrets.REGISTRY_USER }} - password: ${{ secrets.REGISTRY_TOKEN }} + path: | + ~/.gradle/caches + ~/.gradle/wrapper + key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }} + restore-keys: | + ${{ runner.os }}-gradle- - - name: Docker Build and Push - uses: docker/build-push-action@v5 - with: - context: . - file: ${{ matrix.dockerfile }} - push: true - # Hardcoded Pfad zur Vermeidung von Auflösungsfehlern - tags: git.mo-code.at/mocode-software/meldestelle/${{ matrix.service }}:latest - build-args: | - GRADLE_VERSION=9.3.1 - JAVA_VERSION=25 - JVM_OPTS_APPEND=-XX:ActiveProcessorCount=8 -XX:+UseG1GC -XX:+UseSVE=1 - - # JOB 2: Frontend (Startet erst, wenn Backend-Jobs fertig sind) - build-frontend: - needs: build-backend - runs-on: ubuntu-latest - steps: - - name: Checkout - uses: actions/checkout@v4 - - - name: Java Setup - uses: actions/setup-java@v4 - with: - java-version: '25' - distribution: 'temurin' - - - name: Compile Kotlin JS + - name: Build Frontend (Kotlin JS) + if: matrix.service == 'web-app' run: | chmod +x gradlew ./gradlew :frontend:shells:meldestelle-portal:jsBrowserDistribution \ -Pproduction=true \ --max-workers=4 \ - --no-daemon \ -Dkotlin.daemon.jvm.options="-Xmx4g" - - name: Buildx Setup - uses: actions/setup-buildx-action@v3 + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 - - name: Registry Login + - name: Log in to the Container registry uses: docker/login-action@v3 with: - registry: git.mo-code.at + registry: ${{ env.REGISTRY }} username: ${{ secrets.REGISTRY_USER }} password: ${{ secrets.REGISTRY_TOKEN }} - - name: Docker Build and Push Web-App - uses: docker/build-push-action@v5 + - name: Extract metadata + id: meta + uses: docker/metadata-action@v5 with: - context: . - file: config/docker/caddy/web-app/Dockerfile + images: ${{ env.REGISTRY }}/${{ env.IMAGE_PREFIX }}/${{ matrix.image }} + tags: | + type=raw,value=latest,enable=${{ github.ref == 'refs/heads/main' }} + type=sha,format=long + + - name: Build and push Docker image + uses: docker/build-push-action@v6 + with: + context: ${{ matrix.context }} + file: ${{ matrix.dockerfile }} push: true - tags: git.mo-code.at/mocode-software/meldestelle/web-app:latest + # Fokus auf ARM64 für Zora, AMD64 bleibt für Kompatibilität (optional) + platforms: linux/arm64 + 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 +# cache-from: type=gha +# cache-to: type=gha,mode=max