-
Notifications
You must be signed in to change notification settings - Fork 20
142 lines (125 loc) · 4.71 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
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: 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
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: 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
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: Re-deploy depdendents
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'
});
}