-
Notifications
You must be signed in to change notification settings - Fork 149
133 lines (113 loc) · 4.44 KB
/
upload_app_image.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
name: Build Backend and Push Docker Image
on:
workflow_dispatch:
release:
types: [ released ]
pull_request:
branches:
- master
types: [ closed ]
paths:
- '**.py'
- 'requirements.txt'
- '!./web/**'
jobs:
build_amd64:
runs-on: ubuntu-latest
env:
DOCKERHUB_USERNAME: rikasai
DOCKER_REPOSITORY_NAME: fast-runner-backend
ARCH: amd64
steps:
- name: Check out the repository
uses: actions/checkout@v2
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v1
- name: Log in to Docker Hub
uses: docker/login-action@v2
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
- name: Get Git tag if exists
id: get_tag
run: |
GIT_TAG=$(git describe --tags --exact-match ${{ github.sha }} 2> /dev/null || echo "")
echo "GIT_TAG=$GIT_TAG" >> $GITHUB_ENV
- name: Build AMD64 Image
uses: docker/build-push-action@v2
with:
context: .
file: ./Dockerfile
platforms: linux/amd64
push: true
tags: |
${{ env.DOCKERHUB_USERNAME }}/${{ env.DOCKER_REPOSITORY_NAME }}:latest-amd64
${{ env.GIT_TAG != '' && format('{0}/{1}:{2}-amd64', env.DOCKERHUB_USERNAME, env.DOCKER_REPOSITORY_NAME, env.GIT_TAG) || '' }}
build_arm64:
runs-on: ubuntu-24.04-arm
env:
DOCKERHUB_USERNAME: rikasai
DOCKER_REPOSITORY_NAME: fast-runner-backend
ARCH: arm64
steps:
- name: Check out the repository
uses: actions/checkout@v2
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v1
- name: Log in to Docker Hub
uses: docker/login-action@v2
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
- name: Get Git tag if exists
id: get_tag
run: |
GIT_TAG=$(git describe --tags --exact-match ${{ github.sha }} 2> /dev/null || echo "")
echo "GIT_TAG=$GIT_TAG" >> $GITHUB_ENV
- name: Build ARM64 Image
uses: docker/build-push-action@v2
with:
context: .
file: ./Dockerfile
platforms: linux/arm64
push: true
tags: |
${{ env.DOCKERHUB_USERNAME }}/${{ env.DOCKER_REPOSITORY_NAME }}:latest-arm64
${{ env.GIT_TAG != '' && format('{0}/{1}:{2}-arm64', env.DOCKERHUB_USERNAME, env.DOCKER_REPOSITORY_NAME, env.GIT_TAG) || '' }}
create_manifest:
needs: [build_amd64, build_arm64]
runs-on: ubuntu-latest
env:
DOCKERHUB_USERNAME: rikasai
DOCKER_REPOSITORY_NAME: fast-runner-backend
steps:
- name: Check out the repository
uses: actions/checkout@v2
- name: Log in to Docker Hub
uses: docker/login-action@v2
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
- name: Get Git tag if exists
id: get_tag
run: |
GIT_TAG=$(git describe --tags --exact-match ${{ github.sha }} 2> /dev/null || echo "")
echo "GIT_TAG=$GIT_TAG" >> $GITHUB_ENV
- name: Create and push multi-arch manifests
run: |
# 启用 Docker CLI 实验性功能
export DOCKER_CLI_EXPERIMENTAL=enabled
# 创建并推送 latest manifest
docker manifest rm ${{ env.DOCKERHUB_USERNAME }}/${{ env.DOCKER_REPOSITORY_NAME }}:latest || true
docker manifest create ${{ env.DOCKERHUB_USERNAME }}/${{ env.DOCKER_REPOSITORY_NAME }}:latest \
--amend ${{ env.DOCKERHUB_USERNAME }}/${{ env.DOCKER_REPOSITORY_NAME }}:latest-amd64 \
--amend ${{ env.DOCKERHUB_USERNAME }}/${{ env.DOCKER_REPOSITORY_NAME }}:latest-arm64
docker manifest push ${{ env.DOCKERHUB_USERNAME }}/${{ env.DOCKER_REPOSITORY_NAME }}:latest
# 如果存在 tag,创建并推送 tag manifest
if [ ! -z "${{ env.GIT_TAG }}" ]; then
docker manifest rm ${{ env.DOCKERHUB_USERNAME }}/${{ env.DOCKER_REPOSITORY_NAME }}:${{ env.GIT_TAG }} || true
docker manifest create ${{ env.DOCKERHUB_USERNAME }}/${{ env.DOCKER_REPOSITORY_NAME }}:${{ env.GIT_TAG }} \
--amend ${{ env.DOCKERHUB_USERNAME }}/${{ env.DOCKER_REPOSITORY_NAME }}:${{ env.GIT_TAG }}-amd64 \
--amend ${{ env.DOCKERHUB_USERNAME }}/${{ env.DOCKER_REPOSITORY_NAME }}:${{ env.GIT_TAG }}-arm64
docker manifest push ${{ env.DOCKERHUB_USERNAME }}/${{ env.DOCKER_REPOSITORY_NAME }}:${{ env.GIT_TAG }}
fi