Add UBI10 support for UDI with updated tool versions #93
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| # | |
| # Copyright (c) 2021-2025 Red Hat, Inc. | |
| # This program and the accompanying materials are made | |
| # available under the terms of the Eclipse Public License 2.0 | |
| # which is available at https://www.eclipse.org/legal/epl-2.0/ | |
| # | |
| # SPDX-License-Identifier: EPL-2.0 | |
| # | |
| name: Pull Request Check | |
| # Trigger the workflow on pull request | |
| on: [pull_request] | |
| env: | |
| # Use repository variable if set, otherwise fallback to default registry | |
| REGISTRY: ${{ vars.REGISTRY || 'quay.io/devfile' }} | |
| jobs: | |
| build-base-image: | |
| name: Build base image (UBI9) | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| runners: ['ubuntu-22.04', 'ubuntu-22.04-arm'] | |
| runs-on: ${{matrix.runners}} | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@v4 | |
| with: | |
| ref: ${{ github.event.pull_request.head.sha }} | |
| - name: Set arch environment variable | |
| run: | | |
| if [[ ${{matrix.runners}} == 'ubuntu-22.04' ]]; then | |
| echo arch="amd64" >> $GITHUB_ENV | |
| else | |
| echo arch="arm64" >> $GITHUB_ENV | |
| fi | |
| - name: Free runner space | |
| run: sudo rm -rf /usr/local/lib/android | |
| - name: Cleanup docker images | |
| run: docker system prune -af | |
| - name: Add expiration label to base Dockerfile (UBI9) | |
| run: sed -i '/^FROM/a LABEL quay.expires-after=4w' base/ubi9/Dockerfile | |
| - name: Set up Docker Buildx | |
| uses: docker/setup-buildx-action@v3 | |
| - name: Login to Registry | |
| uses: docker/login-action@v3 | |
| with: | |
| registry: ${{ env.REGISTRY }} | |
| username: ${{ secrets.QUAY_USERNAME }} | |
| password: ${{ secrets.QUAY_PASSWORD }} | |
| - name: Build base image (UBI9) | |
| run: | | |
| echo "==========================================" | |
| echo "Building UBI9 base image for ${{env.arch}}" | |
| echo "==========================================" | |
| cd base/ubi9 && docker buildx build \ | |
| --platform linux/${{env.arch}} \ | |
| --progress=plain \ | |
| --push \ | |
| -t ${{ env.REGISTRY }}/base-developer-image:${{env.arch}}-pr-${{github.event.number}} . | |
| - name: Verify base image is available (UBI9) | |
| run: | | |
| echo "Verifying base image is available in registry..." | |
| for i in {1..5}; do | |
| if docker manifest inspect ${{ env.REGISTRY }}/base-developer-image:${{env.arch}}-pr-${{github.event.number}} >/dev/null 2>&1; then | |
| echo "Base image is available!" | |
| exit 0 | |
| fi | |
| echo "Waiting for image to be available... ($i/5)" | |
| sleep 10 | |
| done | |
| echo "ERROR: Base image not available after 5 attempts" | |
| exit 1 | |
| - name: Display docker images | |
| run: docker images | |
| build-udi: | |
| name: Build udi (UDI9) | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| runners: ['ubuntu-22.04', 'ubuntu-22.04-arm'] | |
| runs-on: ${{matrix.runners}} | |
| needs: build-base-image | |
| steps: | |
| - name: Set arch environment variable | |
| run: | | |
| if [[ ${{matrix.runners}} == 'ubuntu-22.04' ]]; then | |
| echo arch="amd64" >> $GITHUB_ENV | |
| else | |
| echo arch="arm64" >> $GITHUB_ENV | |
| fi | |
| - name: Checkout | |
| uses: actions/checkout@v4 | |
| with: | |
| ref: ${{ github.event.pull_request.head.sha }} | |
| - name: Free runner space | |
| run: sudo rm -rf /usr/local/lib/android | |
| - name: Cleanup docker images | |
| run: docker system prune -af | |
| - name: Set up Docker Buildx | |
| uses: docker/setup-buildx-action@v3 | |
| - name: Login to Registry | |
| uses: docker/login-action@v3 | |
| with: | |
| registry: ${{ env.REGISTRY }} | |
| username: ${{ secrets.QUAY_USERNAME }} | |
| password: ${{ secrets.QUAY_PASSWORD }} | |
| - name: Verify base image exists before UDI build (UDI9) | |
| run: | | |
| echo "Verifying base image exists in registry..." | |
| docker manifest inspect ${{ env.REGISTRY }}/base-developer-image:${{env.arch}}-pr-${{github.event.number}} || { | |
| echo "ERROR: Base image not found: ${{ env.REGISTRY }}/base-developer-image:${{env.arch}}-pr-${{github.event.number}}" | |
| exit 1 | |
| } | |
| echo "Base image verified successfully!" | |
| - name: Update UDI Dockerfile (UDI9) | |
| run: sed "s|quay.io/devfile/base-developer-image:ubi9-latest|${{ env.REGISTRY }}/base-developer-image:${{env.arch}}-pr-${{github.event.number}}|" -i "universal/ubi9/Dockerfile" | |
| - name: Add expiration label to UDI Dockerfile (UDI9) | |
| run: sed -i '/^FROM/a LABEL quay.expires-after=4w' universal/ubi9/Dockerfile | |
| - name: Build udi (UDI9) | |
| run: | | |
| echo "==========================================" | |
| echo "Building UDI9 image for ${{env.arch}}" | |
| echo "==========================================" | |
| cd universal/ubi9 && docker buildx build \ | |
| --platform linux/${{env.arch}} \ | |
| --progress=plain \ | |
| --push \ | |
| -t ${{ env.REGISTRY }}/universal-developer-image:${{env.arch}}-pr-${{github.event.number}} . | |
| publish-base-image: | |
| name: Publish base image (UBI9) | |
| runs-on: ubuntu-22.04 | |
| needs: build-base-image | |
| steps: | |
| - name: Login to Registry | |
| uses: docker/login-action@v3 | |
| with: | |
| registry: ${{ env.REGISTRY }} | |
| username: ${{ secrets.QUAY_USERNAME }} | |
| password: ${{ secrets.QUAY_PASSWORD }} | |
| - name: Publish UBI9 base image manifest | |
| run: | | |
| echo "==========================================" | |
| echo "Publishing UBI9 base image manifest" | |
| echo "==========================================" | |
| echo "Verifying both architecture images exist..." | |
| docker manifest inspect ${{ env.REGISTRY }}/base-developer-image:amd64-pr-${{github.event.number}} || { | |
| echo "ERROR: amd64 base image not found" | |
| exit 1 | |
| } | |
| docker manifest inspect ${{ env.REGISTRY }}/base-developer-image:arm64-pr-${{github.event.number}} || { | |
| echo "ERROR: arm64 base image not found" | |
| exit 1 | |
| } | |
| echo "Both images verified, extracting digests..." | |
| # Extract the actual image digest for each architecture from the manifest list | |
| AMD64_DIGEST=$(docker manifest inspect ${{ env.REGISTRY }}/base-developer-image:amd64-pr-${{github.event.number}} | \ | |
| jq -r '.manifests[] | select(.platform.architecture == "amd64") | .digest') | |
| ARM64_DIGEST=$(docker manifest inspect ${{ env.REGISTRY }}/base-developer-image:arm64-pr-${{github.event.number}} | \ | |
| jq -r '.manifests[] | select(.platform.architecture == "arm64") | .digest') | |
| echo "AMD64 digest: $AMD64_DIGEST" | |
| echo "ARM64 digest: $ARM64_DIGEST" | |
| echo "Creating multi-arch manifest..." | |
| docker manifest create ${{ env.REGISTRY }}/base-developer-image:pr-${{github.event.number}} \ | |
| --amend ${{ env.REGISTRY }}/base-developer-image@$AMD64_DIGEST \ | |
| --amend ${{ env.REGISTRY }}/base-developer-image@$ARM64_DIGEST | |
| docker manifest annotate ${{ env.REGISTRY }}/base-developer-image:pr-${{github.event.number}} \ | |
| ${{ env.REGISTRY }}/base-developer-image@$AMD64_DIGEST \ | |
| --os linux --arch amd64 | |
| docker manifest annotate ${{ env.REGISTRY }}/base-developer-image:pr-${{github.event.number}} \ | |
| ${{ env.REGISTRY }}/base-developer-image@$ARM64_DIGEST \ | |
| --os linux --arch arm64 | |
| docker manifest push ${{ env.REGISTRY }}/base-developer-image:pr-${{github.event.number}} | |
| publish-udi: | |
| name: Publish udi (UDI9) | |
| runs-on: ubuntu-22.04 | |
| needs: build-udi | |
| steps: | |
| - name: Login to Registry | |
| uses: docker/login-action@v3 | |
| with: | |
| registry: ${{ env.REGISTRY }} | |
| username: ${{ secrets.QUAY_USERNAME }} | |
| password: ${{ secrets.QUAY_PASSWORD }} | |
| - name: Publish UDI9 manifest | |
| run: | | |
| echo "==========================================" | |
| echo "Publishing UDI9 manifest" | |
| echo "==========================================" | |
| echo "Verifying both architecture images exist..." | |
| docker manifest inspect ${{ env.REGISTRY }}/universal-developer-image:amd64-pr-${{github.event.number}} || { | |
| echo "ERROR: amd64 UDI image not found" | |
| exit 1 | |
| } | |
| docker manifest inspect ${{ env.REGISTRY }}/universal-developer-image:arm64-pr-${{github.event.number}} || { | |
| echo "ERROR: arm64 UDI image not found" | |
| exit 1 | |
| } | |
| echo "Both images verified, extracting digests..." | |
| # Extract the actual image digest for each architecture from the manifest list | |
| AMD64_DIGEST=$(docker manifest inspect ${{ env.REGISTRY }}/universal-developer-image:amd64-pr-${{github.event.number}} | \ | |
| jq -r '.manifests[] | select(.platform.architecture == "amd64") | .digest') | |
| ARM64_DIGEST=$(docker manifest inspect ${{ env.REGISTRY }}/universal-developer-image:arm64-pr-${{github.event.number}} | \ | |
| jq -r '.manifests[] | select(.platform.architecture == "arm64") | .digest') | |
| echo "AMD64 digest: $AMD64_DIGEST" | |
| echo "ARM64 digest: $ARM64_DIGEST" | |
| echo "Creating multi-arch manifest..." | |
| docker manifest create ${{ env.REGISTRY }}/universal-developer-image:pr-${{github.event.number}} \ | |
| --amend ${{ env.REGISTRY }}/universal-developer-image@$AMD64_DIGEST \ | |
| --amend ${{ env.REGISTRY }}/universal-developer-image@$ARM64_DIGEST | |
| docker manifest annotate ${{ env.REGISTRY }}/universal-developer-image:pr-${{github.event.number}} \ | |
| ${{ env.REGISTRY }}/universal-developer-image@$AMD64_DIGEST \ | |
| --os linux --arch amd64 | |
| docker manifest annotate ${{ env.REGISTRY }}/universal-developer-image:pr-${{github.event.number}} \ | |
| ${{ env.REGISTRY }}/universal-developer-image@$ARM64_DIGEST \ | |
| --os linux --arch arm64 | |
| docker manifest push ${{ env.REGISTRY }}/universal-developer-image:pr-${{github.event.number}} | |
| - name: 'Comment PR' | |
| uses: actions/github-script@v7 | |
| with: | |
| script: | | |
| const { repo: { owner, repo } } = context; | |
| await github.rest.issues.createComment({ | |
| issue_number: ${{github.event.number}}, | |
| owner: context.repo.owner, | |
| repo: context.repo.repo, | |
| body: `Pull Request images published ✨\n\nBase: [${{ env.REGISTRY }}/base-developer-image:pr-${{github.event.number}}](https://${{ env.REGISTRY }}/base-developer-image:pr-${{github.event.number}})\nUDI: [${{ env.REGISTRY }}/universal-developer-image:pr-${{github.event.number}}](https://${{ env.REGISTRY }}/universal-developer-image:pr-${{github.event.number}})` | |
| }) |