Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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
- 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 "PPC64LE 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