Skip to content
Original file line number Diff line number Diff line change
Expand Up @@ -31,8 +31,17 @@ jobs:
strategy:
fail-fast: false
matrix:
runners: ['ubuntu-22.04', 'ubuntu-22.04-arm']
runs-on: ${{matrix.runners}}
include:
- name: amd64-build
runner: ubuntu-22.04
arch: amd64
- name: arm64-build
runner: ubuntu-22.04-arm
arch: arm64
- name: ppc64le-build
runner: ubuntu-22.04
arch: ppc64le
runs-on: ${{ matrix.runner }}
steps:

- name: Checkout
Expand All @@ -59,12 +68,7 @@ jobs:
docker rmi -f $(docker images -aq)

- 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
run: echo "arch=${{ matrix.arch }}" >> $GITHUB_ENV

- name: Start minikube cluster
run: |
Expand Down
86 changes: 63 additions & 23 deletions .github/workflows/pr-check.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -22,28 +22,37 @@ jobs:
strategy:
fail-fast: false
matrix:
runners: ['ubuntu-22.04', 'ubuntu-22.04-arm']
runs-on: ${{matrix.runners}}
include:
- name: amd64-build
runner: ubuntu-22.04
arch: amd64
- name: arm64-build
runner: ubuntu-22.04-arm
arch: arm64
- name: ppc64le-build
runner: ubuntu-22.04
arch: ppc64le
runs-on: ${{ matrix.runner }}
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
run: echo "arch=${{ matrix.arch }}" >> $GITHUB_ENV
- 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 QEMU
uses: docker/setup-qemu-action@v2
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
with:
driver: docker-container
platforms: linux/amd64,linux/arm64,linux/ppc64le
- name: Login to Registry
uses: docker/login-action@v3
with:
Expand Down Expand Up @@ -81,17 +90,21 @@ jobs:
strategy:
fail-fast: false
matrix:
runners: ['ubuntu-22.04', 'ubuntu-22.04-arm']
runs-on: ${{matrix.runners}}
include:
- name: amd64-build
runner: ubuntu-22.04
arch: amd64
- name: arm64-build
runner: ubuntu-22.04-arm
arch: arm64
- name: ppc64le-build
runner: ubuntu-22.04
arch: ppc64le
runs-on: ${{ matrix.runner }}
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
run: echo "arch=${{ matrix.arch }}" >> $GITHUB_ENV
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think we should also have QEMU setup in this workflow (like ubi9-build.yaml)

- name: Checkout
uses: actions/checkout@v4
with:
Expand All @@ -100,8 +113,13 @@ jobs:
run: sudo rm -rf /usr/local/lib/android
- name: Cleanup docker images
run: docker system prune -af
- name: Set up QEMU
uses: docker/setup-qemu-action@v2
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
with:
driver: docker-container
platforms: linux/amd64,linux/arm64,linux/ppc64le
- name: Login to Registry
uses: docker/login-action@v3
with:
Expand Down Expand Up @@ -147,7 +165,7 @@ jobs:
echo "=========================================="
echo "Publishing UBI9 base image manifest"
echo "=========================================="
echo "Verifying both architecture images exist..."
echo "Verifying all 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
Expand All @@ -156,28 +174,39 @@ jobs:
echo "ERROR: arm64 base image not found"
exit 1
}
echo "Both images verified, extracting digests..."
docker manifest inspect ${{ env.REGISTRY }}/base-developer-image:ppc64le-pr-${{github.event.number}} || {
echo "ERROR: ppc64le base image not found"
exit 1
}
echo "All 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')
PPC64LE_DIGEST=$(docker manifest inspect ${{ env.REGISTRY }}/base-developer-image:ppc64le-pr-${{github.event.number}} | \
jq -r '.manifests[] | select(.platform.architecture == "ppc64le") | .digest')

echo "AMD64 digest: $AMD64_DIGEST"
echo "ARM64 digest: $ARM64_DIGEST"
echo "PPC64LE digest: $PPC64LE_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
--amend ${{ env.REGISTRY }}/base-developer-image@$ARM64_DIGEST \
--amend ${{ env.REGISTRY }}/base-developer-image@$PPC64LE_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 annotate ${{ env.REGISTRY }}/base-developer-image:pr-${{github.event.number}} \
${{ env.REGISTRY }}/base-developer-image@$PPC64LE_DIGEST \
--os linux --arch ppc64le

docker manifest push ${{ env.REGISTRY }}/base-developer-image:pr-${{github.event.number}}

Expand All @@ -197,7 +226,7 @@ jobs:
echo "=========================================="
echo "Publishing UDI9 manifest"
echo "=========================================="
echo "Verifying both architecture images exist..."
echo "Verifying all 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
Expand All @@ -206,28 +235,39 @@ jobs:
echo "ERROR: arm64 UDI image not found"
exit 1
}
echo "Both images verified, extracting digests..."
docker manifest inspect ${{ env.REGISTRY }}/universal-developer-image:ppc64le-pr-${{github.event.number}} || {
echo "ERROR: ppc64le UDI image not found"
exit 1
}
echo "All 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')
PPC64LE_DIGEST=$(docker manifest inspect ${{ env.REGISTRY }}/universal-developer-image:ppc64le-pr-${{github.event.number}} | \
jq -r '.manifests[] | select(.platform.architecture == "ppc64le") | .digest')

echo "AMD64 digest: $AMD64_DIGEST"
echo "ARM64 digest: $ARM64_DIGEST"
echo "ARM64 digest: $PPC64LE_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
--amend ${{ env.REGISTRY }}/universal-developer-image@$ARM64_DIGEST \
--amend ${{ env.REGISTRY }}/universal-developer-image@$PPC64LE_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 annotate ${{ env.REGISTRY }}/universal-developer-image:pr-${{github.event.number}} \
${{ env.REGISTRY }}/universal-developer-image@$PPC64LE_DIGEST \
--os linux --arch ppc64le

docker manifest push ${{ env.REGISTRY }}/universal-developer-image:pr-${{github.event.number}}
- name: 'Comment PR'
Expand All @@ -240,4 +280,4 @@ jobs:
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}})`
})
})
76 changes: 52 additions & 24 deletions .github/workflows/ubi9-build.yaml
Original file line number Diff line number Diff line change
@@ -1,11 +1,9 @@

name: Build of UBI 9 based Developer Images

on:
push:
branches: [ main ]
workflow_dispatch:

workflow_call:
# Map the workflow outputs to job outputs
secrets:
Expand All @@ -15,8 +13,8 @@ on:
required: true
outputs:
uniq_tag:
description: "The first output string"
value: ${{ jobs.build_universal_ubi9_image.outputs.output1 }}
description: "The unique tag for universal developer image"
value: ${{ jobs.publish-udi.outputs.uniq_tag }}

env:
# Use repository variable if set, otherwise fallback to default registry
Expand All @@ -28,24 +26,35 @@ jobs:
strategy:
fail-fast: false
matrix:
runners: ['ubuntu-22.04', 'ubuntu-22.04-arm']
runs-on: ${{matrix.runners}}
include:
- name: amd64-build
runner: ubuntu-22.04
arch: amd64
- name: arm64-build
runner: ubuntu-22.04-arm
arch: arm64
- name: ppc64le-build
runner: ubuntu-22.04
arch: ppc64le
runs-on: ${{ matrix.runner }}
steps:
- name: Checkout
uses: actions/checkout@v4
- 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
run: echo "arch=${{ matrix.arch }}" >> $GITHUB_ENV
- name: Set short_sha environment variable
run: echo short_sha="$(git rev-parse --short=7 HEAD)" >> $GITHUB_ENV
- name: Free runner space
run: sudo rm -rf /usr/local/lib/android
- name: Cleanup docker images
run: docker system prune -af
- name: Set up QEMU
uses: docker/setup-qemu-action@v2
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
with:
driver: docker-container
platforms: linux/amd64,linux/arm64,linux/ppc64le
- name: Login to Registry
uses: docker/login-action@v3
with:
Expand Down Expand Up @@ -81,7 +90,8 @@ jobs:
do
docker manifest create ${{ env.REGISTRY }}/base-developer-image:${tag} \
--amend ${{ env.REGISTRY }}/base-developer-image:amd64-${{env.short_sha}} \
--amend ${{ env.REGISTRY }}/base-developer-image:arm64-${{env.short_sha}}
--amend ${{ env.REGISTRY }}/base-developer-image:arm64-${{env.short_sha}} \
--amend ${{ env.REGISTRY }}/base-developer-image:ppc64le-${{env.short_sha}}

docker manifest annotate ${{ env.REGISTRY }}/base-developer-image:${tag} \
${{ env.REGISTRY }}/base-developer-image:amd64-${{env.short_sha}} \
Expand All @@ -90,6 +100,10 @@ jobs:
docker manifest annotate ${{ env.REGISTRY }}/base-developer-image:${tag} \
${{ env.REGISTRY }}/base-developer-image:arm64-${{env.short_sha}} \
--os linux --arch arm64

docker manifest annotate ${{ env.REGISTRY }}/base-developer-image:${tag} \
${{ env.REGISTRY }}/base-developer-image:ppc64le-${{env.short_sha}} \
--os linux --arch ppc64le

docker manifest push ${{ env.REGISTRY }}/base-developer-image:${tag}
done
Expand All @@ -99,25 +113,36 @@ jobs:
strategy:
fail-fast: false
matrix:
runners: ['ubuntu-22.04', 'ubuntu-22.04-arm']
runs-on: ${{matrix.runners}}
include:
- name: amd64-build
runner: ubuntu-22.04
arch: amd64
- name: arm64-build
runner: ubuntu-22.04-arm
arch: arm64
- name: ppc64le-build
runner: ubuntu-22.04
arch: ppc64le
runs-on: ${{ matrix.runner }}
needs: publish-base-image
steps:
- name: Checkout
uses: actions/checkout@v4
- 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
run: echo "arch=${{ matrix.arch }}" >> $GITHUB_ENV
- name: Set short_sha environment variable
run: echo short_sha="$(git rev-parse --short=7 HEAD)" >> $GITHUB_ENV
- name: Free runner space
run: sudo rm -rf /usr/local/lib/android
- name: Cleanup docker images
run: docker system prune -af
- name: Set up QEMU
uses: docker/setup-qemu-action@v2
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
with:
driver: docker-container
platforms: linux/amd64,linux/arm64,linux/ppc64le
- name: Login to Registry
uses: docker/login-action@v3
with:
Expand Down Expand Up @@ -153,7 +178,8 @@ jobs:
do
docker manifest create ${{ env.REGISTRY }}/universal-developer-image:${tag} \
--amend ${{ env.REGISTRY }}/universal-developer-image:amd64-${{env.short_sha}} \
--amend ${{ env.REGISTRY }}/universal-developer-image:arm64-${{env.short_sha}}
--amend ${{ env.REGISTRY }}/universal-developer-image:arm64-${{env.short_sha}} \
--amend ${{ env.REGISTRY }}/universal-developer-image:ppc64le-${{env.short_sha}}

docker manifest annotate ${{ env.REGISTRY }}/universal-developer-image:${tag} \
${{ env.REGISTRY }}/universal-developer-image:amd64-${{env.short_sha}} \
Expand All @@ -163,11 +189,13 @@ jobs:
${{ env.REGISTRY }}/universal-developer-image:arm64-${{env.short_sha}} \
--os linux --arch arm64

docker manifest annotate ${{ env.REGISTRY }}/universal-developer-image:${tag} \
${{ env.REGISTRY }}/universal-developer-image:ppc64le-${{env.short_sha}} \
--os linux --arch ppc64le

docker manifest push ${{ env.REGISTRY }}/universal-developer-image:${tag}
done
- name: Get tag with uniq prefix
id: setTagName
# set the image with uniq tag prefix (for example: quay.io/..../base-developer-image:ubi9-7ad6cab) to env. var
# and define it for output. This output with tag image will be used in caller job
run: |
echo "uniq_tag=${{ env.REGISTRY }}/universal-developer-image:ubi9-${{env.short_sha}}" >> $GITHUB_OUTPUT
Loading