Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

workflows/build-ci-container: Add an arm64 container #120828

Open
wants to merge 9 commits into
base: main
Choose a base branch
from
Open
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
60 changes: 39 additions & 21 deletions .github/workflows/build-ci-container.yml
Original file line number Diff line number Diff line change
Expand Up @@ -20,24 +20,31 @@ on:
jobs:
build-ci-container:
if: github.repository_owner == 'llvm'
runs-on: depot-ubuntu-22.04-16
outputs:
container-name: ${{ steps.vars.outputs.container-name }}
container-name-agent: ${{ steps.vars.outputs.container-name-agent }}
container-name-tag: ${{ steps.vars.outputs.container-name-tag }}
container-name-agent-tag: ${{ steps.vars.outputs.container-name-agent-tag }}
container-filename: ${{ steps.vars.outputs.container-filename }}
container-agent-filename: ${{ steps.vars.outputs.container-agent-filename }}
runs-on: ${{ matrix.runs-on }}
strategy:
matrix:
include:
# The arch names should match the names used on dockerhub.
# See https://github.com/docker-library/official-images#architectures-other-than-amd64
- arch: amd64
runs-on: depot-ubuntu-22.04-16
- arch: arm64v8
runs-on: depot-ubuntu-22.04-arm-16
steps:
- name: Checkout LLVM
uses: actions/checkout@v4
with:
sparse-checkout: .github/workflows/containers/github-action-ci/
# podman is not installed by default on the ARM64 images.
- name: Install Podman
if: runner.arch == 'ARM64'
run: |
sudo apt-get install podman
boomanaiden154 marked this conversation as resolved.
Show resolved Hide resolved
- name: Write Variables
id: vars
run: |
tag=`date +%s`
container_name="ghcr.io/$GITHUB_REPOSITORY_OWNER/ci-ubuntu-22.04"
tag=$(git rev-parse --short=12 HEAD)
container_name="ghcr.io/$GITHUB_REPOSITORY_OWNER/${{ matrix.arch }}/ci-ubuntu-22.04"
echo "container-name=$container_name" >> $GITHUB_OUTPUT
echo "container-name-agent=$container_name-agent" >> $GITHUB_OUTPUT
echo "container-name-tag=$container_name:$tag" >> $GITHUB_OUTPUT
Expand All @@ -61,7 +68,7 @@ jobs:
- name: Upload container image
uses: actions/upload-artifact@v4
with:
name: container
name: container-${{ matrix.arch }}
path: "*.tar"
retention-days: 14

Expand All @@ -84,18 +91,29 @@ jobs:
steps:
- name: Download container
uses: actions/download-artifact@v4
with:
name: container

- name: Push Container
run: |
podman load -i ${{ needs.build-ci-container.outputs.container-filename }}
podman tag ${{ needs.build-ci-container.outputs.container-name-tag }} ${{ needs.build-ci-container.outputs.container-name }}:latest
function push_container {
image_name=$1
latest_name=$(echo $image_name | sed 's/:[.0-9]\+$/:latest/g')
podman tag $image_name $latest_name
echo "Pushing $image_name ..."
podman push $image_name
echo "Pushing $latest_name ..."
podman push $latest_name
}

podman login -u ${{ github.actor }} -p $GITHUB_TOKEN ghcr.io
podman push ${{ needs.build-ci-container.outputs.container-name-tag }}
podman push ${{ needs.build-ci-container.outputs.container-name }}:latest
for f in $(find . -iname *.tar); do
image_name=$(podman load -q -i $f | sed 's/Loaded image: //g')
push_container $image_name

podman load -i ${{ needs.build-ci-container.outputs.container-agent-filename }}
podman tag ${{ needs.build-ci-container.outputs.container-name-agent-tag }} ${{ needs.build-ci-container.outputs.container-name-agent }}:latest
podman push ${{ needs.build-ci-container.outputs.container-name-agent-tag }}
podman push ${{ needs.build-ci-container.outputs.container-name-agent }}:latest
if echo $image_name | grep '/amd64/'; then
# For amd64, create an alias with the arch component removed.
boomanaiden154 marked this conversation as resolved.
Show resolved Hide resolved
# This matches the convention used on dockerhub.
default_image_name=$(echo $(dirname $(dirname $image_name))/$(basename $image_name))
podman tag $image_name $default_image_name
push_container $default_image_name
fi
done