-
Notifications
You must be signed in to change notification settings - Fork 7
133 lines (131 loc) · 4.08 KB
/
docker-image.yaml
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: Publish build-deploy-image
on:
push:
branches:
- 'main'
- 'build-image'
tags:
- 'v*.*.*'
pull_request:
branches:
- 'main'
- 'release/*'
jobs:
docker:
runs-on: ubuntu-latest
strategy:
matrix:
goversion:
- 1.22
steps:
-
name: Checkout PR
uses: actions/checkout@v4
if: ${{ github.event_name == 'pull_request' }}
with:
fetch-depth: "0"
ref: ${{ github.event.pull_request.head.sha }}
-
name: Checkout Branch or Tag
uses: actions/checkout@v4
if: ${{ github.event_name != 'pull_request' }}
with:
fetch-depth: "0"
-
name: Set version for non-tag build
if: "!startsWith(github.ref, 'refs/tags/')"
id: version_non-tag_build
run: |
VERSION=$(echo $(git describe --abbrev=0 --tags)+$(git rev-parse --short=8 HEAD))
DOCKER_TAG=$(echo $(git describe --abbrev=0 --tags)-$(git rev-parse --short=8 HEAD))
BUILD=$(date +%FT%T%z)
echo "VERSION=$VERSION" >> $GITHUB_ENV
echo "DOCKER_TAG=$DOCKER_TAG" >> $GITHUB_ENV
echo "BUILD=$BUILD" >> $GITHUB_ENV
echo "build-deploy-tool $VERSION (built: $BUILD / go ${{ matrix.goversion }})"
-
name: Set version for tag build
if: "startsWith(github.ref, 'refs/tags/')"
id: version_tag_build
run: |
VERSION=$(echo $(git describe --abbrev=0 --tags))
BUILD=$(date +%FT%T%z)
echo "VERSION=$VERSION" >> $GITHUB_ENV
echo "DOCKER_TAG=$VERSION" >> $GITHUB_ENV
echo "BUILD=$BUILD" >> $GITHUB_ENV
echo "build-deploy-tool $VERSION (built: $BUILD / go ${{ matrix.goversion }})"
-
name: Docker meta
id: meta
uses: docker/metadata-action@v5
with:
# list of Docker images to use as base name for tags
images: |
${{ github.repository_owner }}/build-deploy-image
ghcr.io/${{ github.repository_owner }}/build-deploy-image
tags: |
# set edge tag for default branch
type=edge,enable={{is_default_branch}}
# set tag+build for default branch
type=raw,value=${{ env.DOCKER_TAG}},enable={{is_default_branch}}
# tag event
type=ref,event=tag
# pull request event
type=ref,event=pr
# pull request event
type=ref,event=branch
-
name: Set up QEMU
uses: docker/setup-qemu-action@v3
-
name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
with:
buildkitd-flags: --debug
-
name: Login to DockerHub
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
-
name: Login to GHCR
uses: docker/login-action@v3
with:
registry: ghcr.io
username: ${{ github.repository_owner }}
password: ${{ secrets.GITHUB_TOKEN }}
-
name: Cache
uses: actions/cache@v4
id: cache
with:
path: |
go-mod
go-build
key: cache-${{ hashFiles('**/go.mod') }}
-
name: inject cache into docker
uses: reproducible-containers/buildkit-cache-dance@v3.1.0
with:
cache-map: |
{
"go-mod": "/go/pkg/mod",
"go-build": "/root/.cache/go-build"
}
skip-extraction: ${{ steps.cache.outputs.cache-hit }}
-
name: Build and push
uses: docker/build-push-action@v5
with:
context: .
platforms: linux/amd64,linux/arm64
build-args: |
"VERSION=${{ env.VERSION }}"
"BUILD=${{ env.BUILD }}"
"GO_VER=${{ matrix.goversion }}"
cache-from: type=gha
cache-to: type=gha,mode=max
push: true
tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }}