11on : push
2+
23jobs :
3- build :
4+ build-amd64 :
45 runs-on : ubuntu-latest-64-cores
56 steps :
6- - name : Set up QEMU
7- uses : docker/setup-qemu-action@v2
8-
97 - name : Set up Docker Buildx
10- uses : docker/setup-buildx-action@v2
8+ uses : docker/setup-buildx-action@v3
119
1210 - name : Log into Docker Hub
13- uses : docker/login-action@v2
11+ uses : docker/login-action@v3
1412 with :
1513 username : ${{ secrets.DOCKERHUB_USERNAME }}
1614 password : ${{ secrets.DOCKERHUB_TOKEN }}
@@ -21,14 +19,16 @@ jobs:
2119 python-version : ' 3.11'
2220
2321 - name : Build for linux/amd64
24- uses : docker/build-push-action@v3
22+ uses : docker/build-push-action@v5
2523 with :
2624 build-args : |
2725 VCS_REF=${{ github.sha }}
2826 BUILDARCH=amd64
2927 load : true
3028 platforms : linux/amd64
31- tags : cs50/cli:amd64
29+ tags : |
30+ cs50/cli:amd64
31+ cs50/cli:canary-amd64
3232 cache-from : type=registry,ref=cs50/cli:amd64-buildcache
3333 cache-to : type=registry,ref=cs50/cli:amd64-buildcache,mode=max
3434
@@ -37,15 +37,55 @@ jobs:
3737 run : |
3838 docker push cs50/cli:amd64
3939
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+
4078 - name : Build for linux/arm64
41- uses : docker/build-push-action@v3
79+ uses : docker/build-push-action@v5
4280 with :
4381 build-args : |
4482 VCS_REF=${{ github.sha }}
4583 BUILDARCH=arm64
4684 load : true
4785 platforms : linux/arm64
48- tags : cs50/cli:arm64
86+ tags : |
87+ cs50/cli:arm64
88+ cs50/cli:canary-arm64
4989 cache-from : type=registry,ref=cs50/cli:arm64-buildcache
5090 cache-to : type=registry,ref=cs50/cli:arm64-buildcache,mode=max
5191
5494 run : |
5595 docker push cs50/cli:arm64
5696
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+
57111 - name : Create multi-arch manifest and push to Docker Hub
58112 if : ${{ github.ref == 'refs/heads/main' }}
59113 run : |
@@ -62,6 +116,13 @@ jobs:
62116 --amend cs50/cli:arm64
63117 docker manifest push cs50/cli:latest
64118
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+
65126 - name : Re-deploy depdendents
66127 if : ${{ github.ref == 'refs/heads/main' }}
67128 uses : actions/github-script@v6
78139 workflow_id: 'main.yml',
79140 ref: 'main'
80141 });
81- }
142+ }
0 commit comments