1
1
on : push
2
+
2
3
jobs :
3
- build :
4
+ build-amd64 :
4
5
runs-on : ubuntu-latest-64-cores
5
6
steps :
6
- - name : Set up QEMU
7
- uses : docker/setup-qemu-action@v2
8
-
9
7
- name : Set up Docker Buildx
10
- uses : docker/setup-buildx-action@v2
8
+ uses : docker/setup-buildx-action@v3
11
9
12
10
- name : Log into Docker Hub
13
- uses : docker/login-action@v2
11
+ uses : docker/login-action@v3
14
12
with :
15
13
username : ${{ secrets.DOCKERHUB_USERNAME }}
16
14
password : ${{ secrets.DOCKERHUB_TOKEN }}
@@ -21,14 +19,16 @@ jobs:
21
19
python-version : ' 3.11'
22
20
23
21
- name : Build for linux/amd64
24
- uses : docker/build-push-action@v3
22
+ uses : docker/build-push-action@v5
25
23
with :
26
24
build-args : |
27
25
VCS_REF=${{ github.sha }}
28
26
BUILDARCH=amd64
29
27
load : true
30
28
platforms : linux/amd64
31
- tags : cs50/cli:amd64
29
+ tags : |
30
+ cs50/cli:amd64
31
+ cs50/cli:canary-amd64
32
32
cache-from : type=registry,ref=cs50/cli:amd64-buildcache
33
33
cache-to : type=registry,ref=cs50/cli:amd64-buildcache,mode=max
34
34
@@ -37,15 +37,55 @@ jobs:
37
37
run : |
38
38
docker push cs50/cli:amd64
39
39
40
+ - name : Push linux/amd64 build to Docker Hub (canary)
41
+ run : |
42
+ docker push cs50/cli:canary-amd64
43
+
44
+ build-arm64 :
45
+ runs-on : ubuntu-latest-64-cores-arm
46
+ steps :
47
+ - name : Install Docker (remove once Docker is pre-installed on arm64 runners)
48
+ run : |
49
+ export DEBIAN_FRONTEND=noninteractive
50
+ sudo apt update
51
+ sudo apt install -y ca-certificates curl
52
+ sudo install -m 0755 -d /etc/apt/keyrings
53
+ sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
54
+ sudo chmod a+r /etc/apt/keyrings/docker.asc
55
+ echo \
56
+ "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
57
+ $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
58
+ sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
59
+ sudo apt update
60
+ sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
61
+ sudo usermod -aG docker $USER
62
+ sudo apt install -y acl
63
+ sudo setfacl --modify user:$USER:rw /var/run/docker.sock
64
+
65
+ - name : Set up Docker Buildx
66
+ uses : docker/setup-buildx-action@v3
67
+
68
+ - name : Log into Docker Hub
69
+ uses : docker/login-action@v3
70
+ with :
71
+ username : ${{ secrets.DOCKERHUB_USERNAME }}
72
+ password : ${{ secrets.DOCKERHUB_TOKEN }}
73
+
74
+ - name : Install Python (replace with setup-python once available on arm64 runners)
75
+ run : |
76
+ sudo apt install -y python3
77
+
40
78
- name : Build for linux/arm64
41
- uses : docker/build-push-action@v3
79
+ uses : docker/build-push-action@v5
42
80
with :
43
81
build-args : |
44
82
VCS_REF=${{ github.sha }}
45
83
BUILDARCH=arm64
46
84
load : true
47
85
platforms : linux/arm64
48
- tags : cs50/cli:arm64
86
+ tags : |
87
+ cs50/cli:arm64
88
+ cs50/cli:canary-arm64
49
89
cache-from : type=registry,ref=cs50/cli:arm64-buildcache
50
90
cache-to : type=registry,ref=cs50/cli:arm64-buildcache,mode=max
51
91
54
94
run : |
55
95
docker push cs50/cli:arm64
56
96
97
+ - name : Push linux/arm64 build to Docker Hub (canary)
98
+ run : |
99
+ docker push cs50/cli:canary-arm64
100
+
101
+ finalize :
102
+ needs : [build-amd64, build-arm64]
103
+ runs-on : ubuntu-latest
104
+ steps :
105
+ - name : Log into Docker Hub
106
+ uses : docker/login-action@v3
107
+ with :
108
+ username : ${{ secrets.DOCKERHUB_USERNAME }}
109
+ password : ${{ secrets.DOCKERHUB_TOKEN }}
110
+
57
111
- name : Create multi-arch manifest and push to Docker Hub
58
112
if : ${{ github.ref == 'refs/heads/main' }}
59
113
run : |
@@ -62,9 +116,16 @@ jobs:
62
116
--amend cs50/cli:arm64
63
117
docker manifest push cs50/cli:latest
64
118
119
+ - name : Create multi-arch manifest and push to Docker Hub (canary)
120
+ run : |
121
+ docker manifest create cs50/cli:canary \
122
+ --amend cs50/cli:canary-amd64 \
123
+ --amend cs50/cli:canary-arm64
124
+ docker manifest push cs50/cli:canary
125
+
65
126
- name : Re-deploy depdendents
66
127
if : ${{ github.ref == 'refs/heads/main' }}
67
- uses : actions/github-script@v6
128
+ uses : actions/github-script@v7
68
129
with :
69
130
github-token : ${{ secrets.DEPLOY50_PAT }}
70
131
script : |
78
139
workflow_id: 'main.yml',
79
140
ref: 'main'
80
141
});
81
- }
142
+ }
0 commit comments