Skip to content

Commit dcddbda

Browse files
authored
dev: use goreleaser to create Docker images (#4370)
1 parent 5a78c8a commit dcddbda

File tree

6 files changed

+147
-119
lines changed

6 files changed

+147
-119
lines changed

.github/workflows/tag.yml

+6-66
Original file line numberDiff line numberDiff line change
@@ -20,58 +20,6 @@ jobs:
2020
- name: Unshallow
2121
run: git fetch --prune --unshallow
2222

23-
- name: Create release
24-
uses: goreleaser/goreleaser-action@v5
25-
with:
26-
version: latest
27-
args: release --clean
28-
env:
29-
GITHUB_TOKEN: ${{ secrets.GOLANGCI_LINT_TOKEN }}
30-
31-
docker-release:
32-
needs: release
33-
runs-on: ubuntu-latest
34-
strategy:
35-
matrix:
36-
target:
37-
- Dockerfile: build/Dockerfile
38-
- Dockerfile: build/alpine.Dockerfile
39-
steps:
40-
- uses: actions/checkout@v4
41-
42-
- name: Install Go
43-
uses: actions/setup-go@v5
44-
with:
45-
# https://github.com/actions/setup-go#supported-version-syntax
46-
# ex:
47-
# - 1.18beta1 -> 1.18.0-beta.1
48-
# - 1.18rc1 -> 1.18.0-rc.1
49-
go-version: '1.22'
50-
51-
- name: Unshallow
52-
run: git fetch --prune --unshallow
53-
54-
- name: Prepare
55-
id: prepare
56-
run: |
57-
TAG=${GITHUB_REF#refs/tags/}
58-
MAJOR=${TAG%.*}
59-
SHORT_COMMIT=${GITHUB_SHA::8}
60-
DATE=$(date '+%Y-%m-%dT%H:%M:%SZ')
61-
echo tag_name=${TAG} >> $GITHUB_OUTPUT
62-
echo major_tag=${MAJOR} >> $GITHUB_OUTPUT
63-
echo short_commit=${SHORT_COMMIT} >> $GITHUB_OUTPUT
64-
echo date=${DATE} >> $GITHUB_OUTPUT
65-
if [[ ${{ matrix.target.Dockerfile }} == *"alpine"* ]]; then
66-
echo full_tag_name=${TAG}-alpine >> $GITHUB_OUTPUT
67-
echo full_major_tag=${MAJOR}-alpine >> $GITHUB_OUTPUT
68-
echo latest_tag=latest-alpine >> $GITHUB_OUTPUT
69-
else
70-
echo full_tag_name=${TAG} >> $GITHUB_OUTPUT
71-
echo full_major_tag=${MAJOR} >> $GITHUB_OUTPUT
72-
echo latest_tag=latest >> $GITHUB_OUTPUT
73-
fi
74-
7523
- name: Set up QEMU
7624
uses: docker/setup-qemu-action@v3
7725

@@ -81,18 +29,10 @@ jobs:
8129
- name: Login do docker.io
8230
run: docker login -u golangci -p ${{ secrets.GOLANGCI_LINT_DOCKER_TOKEN }}
8331

84-
- name: Build and publish ${{ matrix.target.Dockerfile }}
85-
uses: docker/build-push-action@v5
32+
- name: Create release
33+
uses: goreleaser/goreleaser-action@v5
8634
with:
87-
context: .
88-
file: ${{ matrix.target.Dockerfile }}
89-
platforms: linux/amd64,linux/arm64
90-
push: true
91-
build-args: |
92-
VERSION=${{ steps.prepare.outputs.tag_name }}
93-
SHORT_COMMIT=${{ steps.prepare.outputs.short_commit }}
94-
DATE=${{ steps.prepare.outputs.date }}
95-
tags: |
96-
golangci/golangci-lint:${{ steps.prepare.outputs.full_tag_name }}
97-
golangci/golangci-lint:${{ steps.prepare.outputs.full_major_tag }}
98-
golangci/golangci-lint:${{ steps.prepare.outputs.latest_tag }}
35+
version: latest
36+
args: release --clean --timeout=90m
37+
env:
38+
GITHUB_TOKEN: ${{ secrets.GOLANGCI_LINT_TOKEN }}

.goreleaser.yml

+114
Original file line numberDiff line numberDiff line change
@@ -132,3 +132,117 @@ nfpms:
132132
- /usr/bin/go
133133
rpm:
134134
group: Development/Tools
135+
136+
docker_manifests:
137+
# basic
138+
- name_template: 'golangci/golangci-lint:latest'
139+
image_templates:
140+
- 'golangci/golangci-lint:{{ .Tag }}-amd64'
141+
- 'golangci/golangci-lint:{{ .Tag }}-arm64'
142+
- name_template: 'golangci/golangci-lint:v{{ .Major }}.{{ .Minor }}'
143+
image_templates:
144+
- 'golangci/golangci-lint:v{{ .Major }}.{{ .Minor }}-amd64'
145+
- 'golangci/golangci-lint:v{{ .Major }}.{{ .Minor }}-arm64'
146+
- name_template: 'golangci/golangci-lint:{{ .Tag }}'
147+
image_templates:
148+
- 'golangci/golangci-lint:{{ .Tag }}-amd64'
149+
- 'golangci/golangci-lint:{{ .Tag }}-arm64'
150+
151+
# alpine
152+
- name_template: 'golangci/golangci-lint:latest-alpine'
153+
image_templates:
154+
- 'golangci/golangci-lint:{{ .Tag }}-alpine-amd64'
155+
- 'golangci/golangci-lint:{{ .Tag }}-alpine-arm64'
156+
- name_template: 'golangci/golangci-lint:v{{ .Major }}.{{ .Minor }}-alpine'
157+
image_templates:
158+
- 'golangci/golangci-lint:v{{ .Major }}.{{ .Minor }}-alpine-amd64'
159+
- 'golangci/golangci-lint:v{{ .Major }}.{{ .Minor }}-alpine-arm64'
160+
- name_template: 'golangci/golangci-lint:{{ .Tag }}'
161+
image_templates:
162+
- 'golangci/golangci-lint:{{ .Tag }}-alpine-amd64'
163+
- 'golangci/golangci-lint:{{ .Tag }}-alpine-arm64'
164+
165+
dockers:
166+
- use: buildx
167+
goos: linux
168+
goarch: amd64
169+
dockerfile: build/buildx.Dockerfile
170+
image_templates:
171+
- 'golangci/golangci-lint:latest-amd64'
172+
- 'golangci/golangci-lint:{{ .Tag }}-amd64'
173+
- 'golangci/golangci-lint:v{{ .Major }}.{{ .Minor }}-amd64'
174+
build_flag_templates:
175+
- '--pull'
176+
# https://github.com/opencontainers/image-spec/blob/main/annotations.md#pre-defined-annotation-keys
177+
- '--label=org.opencontainers.image.title={{.ProjectName}}'
178+
- '--label=org.opencontainers.image.description=Fast linters Runner for Go'
179+
- '--label=org.opencontainers.image.source={{.GitURL}}'
180+
- '--label=org.opencontainers.image.url={{.GitURL}}'
181+
- '--label=org.opencontainers.image.documentation=https://golangci-lint.run'
182+
- '--label=org.opencontainers.image.created={{.Date}}'
183+
- '--label=org.opencontainers.image.revision={{.FullCommit}}'
184+
- '--label=org.opencontainers.image.version={{.Version}}'
185+
- '--platform=linux/amd64'
186+
187+
- use: buildx
188+
goos: linux
189+
goarch: arm64
190+
dockerfile: build/buildx.Dockerfile
191+
image_templates:
192+
- 'golangci/golangci-lint:latest-arm64'
193+
- 'golangci/golangci-lint:{{ .Tag }}-arm64'
194+
- 'golangci/golangci-lint:v{{ .Major }}.{{ .Minor }}-arm64'
195+
build_flag_templates:
196+
- '--pull'
197+
# https://github.com/opencontainers/image-spec/blob/main/annotations.md#pre-defined-annotation-keys
198+
- '--label=org.opencontainers.image.title={{.ProjectName}}'
199+
- '--label=org.opencontainers.image.description=Fast linters Runner for Go'
200+
- '--label=org.opencontainers.image.source={{.GitURL}}'
201+
- '--label=org.opencontainers.image.url={{.GitURL}}'
202+
- '--label=org.opencontainers.image.documentation=https://golangci-lint.run'
203+
- '--label=org.opencontainers.image.created={{.Date}}'
204+
- '--label=org.opencontainers.image.revision={{.FullCommit}}'
205+
- '--label=org.opencontainers.image.version={{.Version}}'
206+
- '--platform=linux/arm64'
207+
208+
- use: buildx
209+
goos: linux
210+
goarch: amd64
211+
dockerfile: build/buildx-alpine.Dockerfile
212+
image_templates:
213+
- 'golangci/golangci-lint:latest-alpine-amd64'
214+
- 'golangci/golangci-lint:{{ .Tag }}-alpine-amd64'
215+
- 'golangci/golangci-lint:v{{ .Major }}.{{ .Minor }}-alpine-amd64'
216+
build_flag_templates:
217+
- '--pull'
218+
# https://github.com/opencontainers/image-spec/blob/main/annotations.md#pre-defined-annotation-keys
219+
- '--label=org.opencontainers.image.title={{.ProjectName}}'
220+
- '--label=org.opencontainers.image.description=Fast linters Runner for Go'
221+
- '--label=org.opencontainers.image.source={{.GitURL}}'
222+
- '--label=org.opencontainers.image.url={{.GitURL}}'
223+
- '--label=org.opencontainers.image.documentation=https://golangci-lint.run'
224+
- '--label=org.opencontainers.image.created={{.Date}}'
225+
- '--label=org.opencontainers.image.revision={{.FullCommit}}'
226+
- '--label=org.opencontainers.image.version={{.Version}}'
227+
- '--platform=linux/amd64'
228+
229+
- use: buildx
230+
goos: linux
231+
goarch: arm64
232+
dockerfile: build/buildx-alpine.Dockerfile
233+
image_templates:
234+
- 'golangci/golangci-lint:latest-alpine-arm64'
235+
- 'golangci/golangci-lint:{{ .Tag }}-alpine-arm64'
236+
- 'golangci/golangci-lint:v{{ .Major }}.{{ .Minor }}-alpine-arm64'
237+
build_flag_templates:
238+
- '--pull'
239+
# https://github.com/opencontainers/image-spec/blob/main/annotations.md#pre-defined-annotation-keys
240+
- '--label=org.opencontainers.image.title={{.ProjectName}}'
241+
- '--label=org.opencontainers.image.description=Fast linters Runner for Go'
242+
- '--label=org.opencontainers.image.source={{.GitURL}}'
243+
- '--label=org.opencontainers.image.url={{.GitURL}}'
244+
- '--label=org.opencontainers.image.documentation=https://golangci-lint.run'
245+
- '--label=org.opencontainers.image.created={{.Date}}'
246+
- '--label=org.opencontainers.image.revision={{.FullCommit}}'
247+
- '--label=org.opencontainers.image.version={{.Version}}'
248+
- '--platform=linux/arm64'

build/Dockerfile

-22
This file was deleted.

build/alpine.Dockerfile

-31
This file was deleted.

build/buildx-alpine.Dockerfile

+16
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
# syntax=docker/dockerfile:1.4
2+
FROM golang:1.22-alpine
3+
4+
# related to https://github.com/golangci/golangci-lint/issues/3107
5+
ENV GOROOT /usr/local/go
6+
7+
# gcc is required to support cgo;
8+
# git and mercurial are needed most times for go get`, etc.
9+
# See https://github.com/docker-library/golang/issues/80
10+
RUN apk --no-cache add gcc musl-dev git mercurial
11+
12+
# Set all directories as safe
13+
RUN git config --global --add safe.directory '*'
14+
15+
COPY golangci-lint /usr/bin/
16+
CMD ["golangci-lint"]

build/buildx.Dockerfile

+11
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
# syntax=docker/dockerfile:1.4
2+
FROM golang:1.22
3+
4+
# related to https://github.com/golangci/golangci-lint/issues/3107
5+
ENV GOROOT /usr/local/go
6+
7+
# Set all directories as safe
8+
RUN git config --global --add safe.directory '*'
9+
10+
COPY golangci-lint /usr/bin/
11+
CMD ["golangci-lint"]

0 commit comments

Comments
 (0)