-
Notifications
You must be signed in to change notification settings - Fork 19
182 lines (159 loc) · 6.49 KB
/
main.yml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
on: push
jobs:
build-amd64:
runs-on: ubuntu-latest-64-cores
steps:
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Log into Docker Hub
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
- name: Setup Python
uses: actions/setup-python@v5
with:
python-version: '3.11'
- name: Build for linux/amd64
uses: docker/build-push-action@v5
with:
build-args: |
VCS_REF=${{ github.sha }}
BUILDARCH=amd64
load: true
platforms: linux/amd64
tags: |
cs50/cli:amd64
cs50/cli:canary-amd64
cache-from: type=registry,ref=cs50/cli:amd64-buildcache
cache-to: type=registry,ref=cs50/cli:amd64-buildcache,mode=max
- name: Tag image with ubuntu-22.04 suffix
if: ${{ github.ref == 'refs/heads/ubuntu-22.04' }}
run: |
docker tag cs50/cli:amd64 cs50/cli:amd64-ubuntu-22.04
docker tag cs50/cli:canary-amd64 cs50/cli:canary-amd64-ubuntu-22.04
- name: Push linux/amd64 build to Docker Hub
if: ${{ github.ref == 'refs/heads/main' }}
run: |
docker push cs50/cli:amd64
- name: Push linux/amd64 build to Docker Hub (canary)
run: |
docker push cs50/cli:canary-amd64
- name: Push linux/amd64 build to Docker Hub with ubuntu-22.04 suffix
if: ${{ github.ref == 'refs/heads/ubuntu-22.04' }}
run: |
docker push cs50/cli:amd64-ubuntu-22.04
docker push cs50/cli:canary-amd64-ubuntu-22.04
build-arm64:
runs-on: ubuntu-latest-64-cores-arm
steps:
- name: Install Docker (remove once Docker is pre-installed on arm64 runners)
run: |
export DEBIAN_FRONTEND=noninteractive
sudo apt update
sudo apt install -y ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
$(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
sudo usermod -aG docker $USER
sudo apt install -y acl
sudo setfacl --modify user:$USER:rw /var/run/docker.sock
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Log into Docker Hub
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
- name: Install Python (replace with setup-python once available on arm64 runners)
run: |
sudo apt install -y python3
- name: Build for linux/arm64
uses: docker/build-push-action@v5
with:
build-args: |
VCS_REF=${{ github.sha }}
BUILDARCH=arm64
load: true
platforms: linux/arm64
tags: |
cs50/cli:arm64
cs50/cli:canary-arm64
cache-from: type=registry,ref=cs50/cli:arm64-buildcache
cache-to: type=registry,ref=cs50/cli:arm64-buildcache,mode=max
- name: Tag image with ubuntu-22.04 suffix
if: ${{ github.ref == 'refs/heads/ubuntu-22.04' }}
run: |
docker tag cs50/cli:arm64 cs50/cli:arm64-ubuntu-22.04
docker tag cs50/cli:canary-arm64 cs50/cli:canary-arm64-ubuntu-22.04
- name: Push linux/arm64 build to Docker Hub
if: ${{ github.ref == 'refs/heads/main' }}
run: |
docker push cs50/cli:arm64
- name: Push linux/arm64 build to Docker Hub (canary)
run: |
docker push cs50/cli:canary-arm64
- name: Push linux/arm64 build to Docker Hub with ubuntu-22.04 suffix
if: ${{ github.ref == 'refs/heads/ubuntu-22.04' }}
run: |
docker push cs50/cli:arm64-ubuntu-22.04
docker push cs50/cli:canary-arm64-ubuntu-22.04
finalize:
needs: [build-amd64, build-arm64]
runs-on: ubuntu-latest
steps:
- name: Log into Docker Hub
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
- name: Create multi-arch manifest and push to Docker Hub
if: ${{ github.ref == 'refs/heads/main' }}
run: |
docker manifest create cs50/cli:latest \
--amend cs50/cli:amd64 \
--amend cs50/cli:arm64
docker manifest push cs50/cli:latest
- name: Create multi-arch manifest and push to Docker Hub (canary)
run: |
docker manifest create cs50/cli:canary \
--amend cs50/cli:canary-amd64 \
--amend cs50/cli:canary-arm64
docker manifest push cs50/cli:canary
- name: Create multi-arch manifest and push to Docker Hub with ubuntu-22.04 suffix
if: ${{ github.ref == 'refs/heads/ubuntu-22.04' }}
run: |
docker manifest create cs50/cli:ubuntu-22.04 \
--amend cs50/cli:amd64-ubuntu-22.04 \
--amend cs50/cli:arm64-ubuntu-22.04
docker manifest push cs50/cli:ubuntu-22.04
- name: Create multi-arch manifest and push to Docker Hub (canary) with ubuntu-22.04 suffix
if: ${{ github.ref == 'refs/heads/ubuntu-22.04' }}
run: |
docker manifest create cs50/cli:canary-ubuntu-22.04 \
--amend cs50/cli:canary-amd64-ubuntu-22.04 \
--amend cs50/cli:canary-arm64-ubuntu-22.04
docker manifest push cs50/cli:canary-ubuntu-22.04
- name: Re-deploy dependents
if: ${{ github.ref == 'refs/heads/main' }}
uses: actions/github-script@v7
with:
github-token: ${{ secrets.DEPLOY50_PAT }}
script: |
const dependents = [
'server'
];
for (let dependent of dependents) {
await github.rest.actions.createWorkflowDispatch({
owner: 'cs50',
repo: dependent,
workflow_id: 'main.yml',
ref: 'main'
});
}