2020jobs :
2121 build-ci-container :
2222 if : github.repository_owner == 'llvm'
23- runs-on : depot-ubuntu-22.04-16
24- outputs :
25- container-name : ${{ steps.vars.outputs.container-name }}
26- container-name-agent : ${{ steps.vars.outputs.container-name-agent }}
27- container-name-tag : ${{ steps.vars.outputs.container-name-tag }}
28- container-name-agent-tag : ${{ steps.vars.outputs.container-name-agent-tag }}
29- container-filename : ${{ steps.vars.outputs.container-filename }}
30- container-agent-filename : ${{ steps.vars.outputs.container-agent-filename }}
23+ runs-on : ${{ matrix.runs-on }}
24+ strategy :
25+ matrix :
26+ include :
27+ # The arch names should match the names used on dockerhub.
28+ # See https://github.com/docker-library/official-images#architectures-other-than-amd64
29+ - arch : amd64
30+ runs-on : depot-ubuntu-22.04-16
31+ - arch : arm64v8
32+ runs-on : depot-ubuntu-22.04-arm-16
3133 steps :
3234 - name : Checkout LLVM
3335 uses : actions/checkout@v4
3436 with :
3537 sparse-checkout : .github/workflows/containers/github-action-ci/
38+ # podman is not installed by default on the ARM64 images.
39+ - name : Install Podman
40+ if : runner.arch == 'ARM64'
41+ run : |
42+ sudo apt-get install podman
3643 - name : Write Variables
3744 id : vars
3845 run : |
39- tag=`date +%s`
40- container_name="ghcr.io/$GITHUB_REPOSITORY_OWNER/ci-ubuntu-22.04"
46+ tag=$(git rev-parse --short=12 HEAD)
47+ container_name="ghcr.io/$GITHUB_REPOSITORY_OWNER/${{ matrix.arch }}/ ci-ubuntu-22.04"
4148 echo "container-name=$container_name" >> $GITHUB_OUTPUT
4249 echo "container-name-agent=$container_name-agent" >> $GITHUB_OUTPUT
4350 echo "container-name-tag=$container_name:$tag" >> $GITHUB_OUTPUT
6168 - name : Upload container image
6269 uses : actions/upload-artifact@v4
6370 with :
64- name : container
71+ name : container-${{ matrix.arch }}
6572 path : " *.tar"
6673 retention-days : 14
6774
@@ -84,18 +91,29 @@ jobs:
8491 steps :
8592 - name : Download container
8693 uses : actions/download-artifact@v4
87- with :
88- name : container
8994
9095 - name : Push Container
9196 run : |
92- podman load -i ${{ needs.build-ci-container.outputs.container-filename }}
93- podman tag ${{ needs.build-ci-container.outputs.container-name-tag }} ${{ needs.build-ci-container.outputs.container-name }}:latest
97+ function push_container {
98+ image_name=$1
99+ latest_name=$(echo $image_name | sed 's/:[.0-9]\+$/:latest/g')
100+ podman tag $image_name $latest_name
101+ echo "Pushing $image_name ..."
102+ podman push $image_name
103+ echo "Pushing $latest_name ..."
104+ podman push $latest_name
105+ }
106+
94107 podman login -u ${{ github.actor }} -p $GITHUB_TOKEN ghcr.io
95- podman push ${{ needs.build-ci-container.outputs.container-name-tag }}
96- podman push ${{ needs.build-ci-container.outputs.container-name }}:latest
108+ for f in $(find . -iname *.tar); do
109+ image_name=$(podman load -q -i $f | sed 's/Loaded image: //g')
110+ push_container $image_name
97111
98- podman load -i ${{ needs.build-ci-container.outputs.container-agent-filename }}
99- podman tag ${{ needs.build-ci-container.outputs.container-name-agent-tag }} ${{ needs.build-ci-container.outputs.container-name-agent }}:latest
100- podman push ${{ needs.build-ci-container.outputs.container-name-agent-tag }}
101- podman push ${{ needs.build-ci-container.outputs.container-name-agent }}:latest
112+ if echo $image_name | grep '/amd64/'; then
113+ # For amd64, create an alias with the arch component removed.
114+ # This matches the convention used on dockerhub.
115+ default_image_name=$(echo $(dirname $(dirname $image_name))/$(basename $image_name))
116+ podman tag $image_name $default_image_name
117+ push_container $default_image_name
118+ fi
119+ done
0 commit comments