20
20
jobs :
21
21
build-ci-container :
22
22
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
31
33
steps :
32
34
- name : Checkout LLVM
33
35
uses : actions/checkout@v4
34
36
with :
35
37
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
36
43
- name : Write Variables
37
44
id : vars
38
45
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"
41
48
echo "container-name=$container_name" >> $GITHUB_OUTPUT
42
49
echo "container-name-agent=$container_name-agent" >> $GITHUB_OUTPUT
43
50
echo "container-name-tag=$container_name:$tag" >> $GITHUB_OUTPUT
61
68
- name : Upload container image
62
69
uses : actions/upload-artifact@v4
63
70
with :
64
- name : container
71
+ name : container-${{ matrix.arch }}
65
72
path : " *.tar"
66
73
retention-days : 14
67
74
@@ -84,18 +91,29 @@ jobs:
84
91
steps :
85
92
- name : Download container
86
93
uses : actions/download-artifact@v4
87
- with :
88
- name : container
89
94
90
95
- name : Push Container
91
96
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
+
94
107
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
97
111
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