From 0642d2f9d2572f52bea09ef361a3fcc4c4e32bd6 Mon Sep 17 00:00:00 2001 From: humocs-man <1+humocs-man@noreply.localhost> Date: Sun, 9 Aug 2026 16:22:46 +0000 Subject: [PATCH] .gitea/workflows/redhat_build.yml aktualisiert --- .gitea/workflows/redhat_build.yml | 123 ++++++++++++++---------------- 1 file changed, 56 insertions(+), 67 deletions(-) diff --git a/.gitea/workflows/redhat_build.yml b/.gitea/workflows/redhat_build.yml index 27b4415..f81d70f 100644 --- a/.gitea/workflows/redhat_build.yml +++ b/.gitea/workflows/redhat_build.yml @@ -1,15 +1,16 @@ -name: RHEL Build container image +name: Build container image on: - # pull_request: - # branches: - # - main - schedule: - - cron: '05 12 * * 2,5' + # pull_request: + # branches: + # - main + # schedule: + # - cron: '05 12 * * 2,5' workflow_dispatch: env: IMAGE_DESC: "Custom Fedora bootc image" + IMAGE_NAME: "${{ github.event.repository.name }}" DEFAULT_TAG: "stable" concurrency: @@ -27,21 +28,17 @@ jobs: id-token: write steps: - # 1. Gitea/OCI-Umgebungsvariablen vorbereiten - name: Prepare environment run: | - # Extrahiert den Domain-Host aus der Gitea-URL + # Extrahiert die reine Domain/Host aus der Gitea-URL REGISTRY_HOST=$(echo "${{ github.server_url }}" | awk -F/ '{print $3}') - OWNER_LOWER=$(echo "${{ github.repository_owner }}" | tr '[:upper:]' '[:lower:]') - - # Extrahiert den Repository-Namen sicher - REPO_NAME=$(echo "${{ github.repository }}" | cut -d'/' -f2 | tr '[:upper:]' '[:lower:]') + OWNER_LOWER="${{ github.repository_owner }}" + NAME_LOWER="${{ env.IMAGE_NAME }}" echo "REGISTRY_HOST=${REGISTRY_HOST}" >> ${GITHUB_ENV} - echo "IMAGE_REGISTRY=${REGISTRY_HOST}/${OWNER_LOWER}" >> ${GITHUB_ENV} - echo "IMAGE_NAME=${REPO_NAME}" >> ${GITHUB_ENV} + echo "IMAGE_REGISTRY=${REGISTRY_HOST}/${OWNER_LOWER,,}" >> ${GITHUB_ENV} + echo "IMAGE_NAME=${NAME_LOWER,,}" >> ${GITHUB_ENV} - # 2. Tag-Namen & Branch-Sanitizing - name: Determine image tag run: | BRANCH="${GITHUB_REF_NAME}" @@ -54,11 +51,12 @@ jobs: echo "IS_TEST_BUILD=true" >> ${GITHUB_ENV} fi - # 3. Repository auschecken - - name: Checkout repository + - name: Checkout uses: actions/checkout@v7.0.1 - # 4. Metadata & OCI-Labels erzeugen + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v4.2.0 + - name: Image Metadata id: metadata uses: docker/metadata-action@v6.2.0 @@ -78,56 +76,48 @@ jobs: org.opencontainers.image.title=${{ env.IMAGE_NAME }} org.opencontainers.image.url=${{ github.server_url }}/${{ github.repository }} org.opencontainers.image.vendor=${{ github.repository_owner }} - org.opencontainers.image.version=${{ env.IMAGE_TAG }} + org.opencontainers.image.version=${{ env.IMAGE_TAG }}.{{date 'YYYYMMDD'}} containers.bootc=1 ostree.bootable=1 - - - name: Install Buildah - run: | - sudo apt-get update && sudo apt-get install -y buildah fuse-overlayfs - - # 5. Image mit Buildah bauen (sudo + chroot + Array) - - name: Build Image with Buildah - run: | - # Metadata-Labels sauber in ein Bash-Array einlesen (schützt Leerzeichen) - BUILD_ARGS=() - while IFS= read -r line; do - if [ -n "$line" ]; then - BUILD_ARGS+=("--label" "$line") - fi - done <<< "${{ steps.metadata.outputs.labels }}" - # Kombiniert: sudo + --isolation chroot - sudo buildah bud \ - --isolation chroot \ - --format oci \ - "${BUILD_ARGS[@]}" \ - -t "${{ env.IMAGE_NAME }}:${{ env.IMAGE_TAG }}" \ - -f ./Containerfile . - - # 6. In lokales OCI-Verzeichnis exportieren - - name: Export Image to OCI Layout - run: | - sudo buildah push ${{ env.IMAGE_NAME }}:${{ env.IMAGE_TAG }} oci:./oci-image - # Rechte auf den Export-Ordner für nachfolgende Runner-Schritte freigeben - sudo chown -R $(id -u):$(id -g) ./oci-image - - # 7. Chunkah via Project Bluefin Action ausführen - - name: Process OCI Image with Chunkah - uses: projectbluefin/actions/bootc-build/chunka@v1 + # 1. Buildx baut das Image mit Registry-Cache und exportiert ein lokaes OCI-Archiv + - name: Build Image to OCI Archive (Docker Buildx) + uses: docker/build-push-action@v7.3.0 + id: build_image with: - target: ./oci-image + context: . + file: ./Containerfile + tags: ${{ steps.metadata.outputs.tags }} + labels: ${{ steps.metadata.outputs.labels }} + outputs: type=oci,dest=./oci-image.tar + cache-from: type=registry,ref=${{ env.IMAGE_REGISTRY }}/${{ env.IMAGE_NAME }}:buildcache + cache-to: type=registry,ref=${{ env.IMAGE_REGISTRY }}/${{ env.IMAGE_NAME }}:buildcache,mode=max - # 8. Skopeo nativ installieren (100% Gitea-act_runner kompatibel) + # 2. OCI-Archiv entpacken + - name: Extract OCI Layout + run: | + mkdir -p ./oci-image + tar -xf ./oci-image.tar -C ./oci-image + rm ./oci-image.tar + + # 3. OCI-Image mit Chunkah verarbeiten + - name: Process OCI Image with Chunkah + uses: projectbluefin/actions/bootc-build/chunka@main + with: + source-image: "oci:./oci-image" + + # 4. Skopeo nativ installieren - name: Install Skopeo + if: github.event_name != 'pull_request' run: | sudo apt-get update && sudo apt-get install -y skopeo - # 9. Gechunketes Image für ALLE Tags pushen & Manifest-Digest erfassen - - name: Push Chunked Image to Registry + # 5. Gechunketes Image mit Skopeo pushen & Digest erfassen + - name: Push Chunked Image via Skopeo + if: github.event_name != 'pull_request' run: | echo "${{ secrets.REGISTRY }}" | skopeo login "${{ env.REGISTRY_HOST }}" -u "${{ github.repository_owner }}" --password-stdin - + for TAG_REF in ${{ steps.metadata.outputs.tags }}; do echo "Pushe gechunketes Image nach: docker://${TAG_REF}" skopeo copy \ @@ -135,18 +125,16 @@ jobs: --digestfile /tmp/digest.txt \ oci:./oci-image "docker://${TAG_REF}" done - - # Speichere den exakten Manifest-Digest für Cosign + echo "IMAGE_DIGEST=$(cat /tmp/digest.txt)" >> ${GITHUB_ENV} - # 10. Cosign installieren - name: Install Cosign - if: env.IS_TEST_BUILD == 'false' + if: github.event_name != 'pull_request' && env.IS_TEST_BUILD == 'false' uses: sigstore/cosign-installer@v4.1.2 - # 11. Container Image signieren + # 6. Container Image signieren (nutzt direkt den von Skopeo erzeugten Digest) - name: Sign container image - if: env.IS_TEST_BUILD == 'false' + if: github.event_name != 'pull_request' && env.IS_TEST_BUILD == 'false' env: COSIGN_PRIVATE_KEY: ${{ secrets.SIGNING_SECRET }} COSIGN_PASSWORD: "" @@ -159,13 +147,14 @@ jobs: cosign sign -y \ --key env://COSIGN_PRIVATE_KEY \ --recursive \ + --use-signing-config=false \ + --new-bundle-format=false \ --registry-referrers-mode=legacy \ "${IMAGE_REF}" - - # 12. Runner-Speicher aufräumen + - name: Post-Build Cleanup if: always() run: | - echo "Bereinige temporäre Dateien und Buildah-Storage..." + echo "Räume temporäre Dateien und Buildx-Cache auf..." rm -rf ./oci-image /tmp/digest.txt || true - sudo buildah rmi --all --force || true \ No newline at end of file + docker buildx prune -a -f || true \ No newline at end of file