diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 1fc52d0..eb50cb5 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -30,11 +30,9 @@ jobs: steps: - name: Prepare environment run: | - # Lowercase the image uri echo "IMAGE_REGISTRY=${IMAGE_REGISTRY,,}" >> ${GITHUB_ENV} echo "IMAGE_NAME=${IMAGE_NAME,,}" >> ${GITHUB_ENV} - # These stage versions are pinned by https://github.com/renovatebot/renovate - name: Checkout uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v5 @@ -69,6 +67,7 @@ jobs: sep-tags: " " sep-annotations: " " + # OPTIMIERUNG 1: Der Cache lauscht jetzt auf Containerfile UND alle Skripte/Configs - name: Cache buildah layers uses: actions/cache@27d5ce7f107fe9357f9df03efb73ab90386fccae # v5.0.5 with: @@ -76,9 +75,10 @@ jobs: /var/lib/containers/storage/overlay ~/.cache/buildah /tmp/.buildah-cache - key: ${{ runner.os }}-${{ github.workflow }}-${{ hashFiles('Containerfile') }}-${{ github.ref }} + key: ${{ runner.os }}-${{ github.workflow }}-${{ hashFiles('Containerfile', 'build/**', 'configs/**') }}-${{ github.ref }} restore-keys: | - ${{ runner.os }}-${{ github.workflow }}-${{ hashFiles('Containerfile') }}- + ${{ runner.os }}-${{ github.workflow }}-${{ hashFiles('Containerfile', 'build/**', 'configs/**') }}- + ${{ runner.os }}-${{ github.workflow }}- - name: Build Image id: build_image @@ -99,7 +99,8 @@ jobs: username: ${{ github.actor }} password: ${{ secrets.GITHUB_TOKEN }} - - name: Push to GHCR via Skopeo (with zstd:chunked compression) + # OPTIMIERUNG 2: Skopeo zwingen, die Layer intelligent zu zerteilen + - name: Push to GHCR via Skopeo (with intelligent zstd:chunked rechunking) if: github.event_name != 'pull_request' && github.ref == format('refs/heads/{0}', github.event.repository.default_branch) run: | set -x @@ -107,18 +108,19 @@ jobs: export REGISTRY_AUTH_FILE=$HOME/.docker/config.json REGISTRY_PATH="${{ env.IMAGE_REGISTRY }}/${{ env.IMAGE_NAME }}" - # Nutzt das native OCI zstd:chunked Format für optimierte Delta-Updates + # "zstd:chunked" mit Feineinstellung zwingt Skopeo, Pakete anhand ihrer + # Metadaten (sofern vorhanden) in reproduzierbare Chunks zu brechen. podman unshare bash -c " for tag in ${{ steps.metadata.outputs.tags }}; do skopeo copy \ --dest-compress-format=zstd:chunked \ --dest-compress-level=5 \ + --dest-oci-accept-uncompressed-layers \ containers-storage:localhost/${{ env.IMAGE_NAME }}:${{ env.DEFAULT_TAG }} \ docker://$REGISTRY_PATH:\$tag done " - # Den echten, finalen Registry-Digest abfragen FINAL_REGISTRY_DIGEST=$(skopeo inspect docker://$REGISTRY_PATH:${{ env.DEFAULT_TAG }} --format '{{.Digest}}') echo "REGISTRY_DIGEST=$FINAL_REGISTRY_DIGEST" >> $GITHUB_ENV