Skip to content

Commit cb5a0d2

Browse files
committed
Using goreleaser to build and release
1 parent 46a351c commit cb5a0d2

File tree

8 files changed

+745
-120
lines changed

8 files changed

+745
-120
lines changed

.github/workflows/release.yml

Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
name: Release
2+
3+
on:
4+
push:
5+
tags:
6+
- "v*"
7+
8+
permissions:
9+
contents: write
10+
packages: write
11+
12+
env:
13+
GOLANG_VERSION: 1.24.3
14+
15+
jobs:
16+
goreleaser:
17+
runs-on: ubuntu-latest
18+
steps:
19+
- name: Checkout
20+
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
21+
with:
22+
fetch-depth: 0
23+
24+
- name: Set up Go
25+
uses: actions/setup-go@8e57b58e57be52ac95949151e2777ffda8501267 # v5.5.0
26+
with:
27+
go-version: ${{ env.GOLANG_VERSION }}
28+
29+
- name: Set up Docker Buildx
30+
uses: docker/setup-buildx-action@af1b253b8dc984466d22633f04ef341c1520ed2f # v3.11.1
31+
32+
- name: Log in to Docker Hub
33+
uses: docker/login-action@184bdaa0721073962dff0199f1fb9940f07167d1 # v3.5.0
34+
with:
35+
username: ${{ secrets.DOCKER_HUB_USERNAME }}
36+
password: ${{ secrets.DOCKER_HUB_ACCESS_TOKEN }}
37+
38+
- name: Run GoReleaser
39+
uses: goreleaser/goreleaser-action@v5.0.0
40+
with:
41+
distribution: goreleaser
42+
version: latest
43+
args: release --clean
44+
env:
45+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
46+
DOCKER_HUB_ORG: ${{ secrets.DOCKER_HUB_ORG }}
47+
48+
# Optional: Sign Docker images with cosign
49+
sign:
50+
needs: goreleaser
51+
runs-on: ubuntu-latest
52+
if: startsWith(github.ref, 'refs/tags/')
53+
steps:
54+
- name: Checkout
55+
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
56+
57+
- name: Install cosign
58+
uses: sigstore/cosign-installer@v3.9.2
59+
60+
- name: Log in to Docker Hub
61+
uses: docker/login-action@184bdaa0721073962dff0199f1fb9940f07167d1 # v3.5.0
62+
with:
63+
username: ${{ secrets.DOCKER_HUB_USERNAME }}
64+
password: ${{ secrets.DOCKER_HUB_ACCESS_TOKEN }}
65+
66+
- name: Sign Docker images
67+
run: |
68+
for component in tls admin api cli; do
69+
cosign sign --yes docker.io/${{ secrets.DOCKER_HUB_ORG }}/osctrl-$component:${{ github.ref_name }}
70+
cosign verify \
71+
--certificate-identity-regexp="https://github.com/${{ github.repository }}/.github/workflows/.*" \
72+
--certificate-oidc-issuer="https://token.actions.githubusercontent.com" \
73+
docker.io/${{ secrets.DOCKER_HUB_ORG }}/osctrl-$component:${{ github.ref_name }}
74+
done

.github/workflows/test-release.yml

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
name: Test Release
2+
3+
on:
4+
push:
5+
branches:
6+
- main
7+
pull_request:
8+
branches:
9+
- main
10+
11+
permissions:
12+
contents: read
13+
14+
env:
15+
GOLANG_VERSION: 1.24.3
16+
17+
jobs:
18+
test-build:
19+
runs-on: ubuntu-latest
20+
steps:
21+
- name: Checkout
22+
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
23+
with:
24+
fetch-depth: 0
25+
26+
- name: Set up Go
27+
uses: actions/setup-go@8e57b58e57be52ac95949151e2777ffda8501267 # v5.5.0
28+
with:
29+
go-version: ${{ env.GOLANG_VERSION }}
30+
31+
- name: Run GoReleaser build
32+
uses: goreleaser/goreleaser-action@v5.0.0
33+
with:
34+
distribution: goreleaser
35+
version: latest
36+
args: build --snapshot --clean --single-target
37+
38+
- name: Upload build artifacts
39+
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
40+
with:
41+
name: osctrl-binaries
42+
path: bin/
43+
retention-days: 1

.goreleaser.yml

Lines changed: 245 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,245 @@
1+
version: 2
2+
3+
before:
4+
hooks:
5+
- go mod tidy
6+
- go mod download
7+
8+
builds:
9+
- id: osctrl-tls
10+
main: ./cmd/tls
11+
binary: osctrl-tls
12+
env:
13+
- CGO_ENABLED=0
14+
goos:
15+
- linux
16+
- darwin
17+
- windows
18+
goarch:
19+
- amd64
20+
- arm64
21+
ignore:
22+
- goos: windows
23+
goarch: arm64
24+
ldflags:
25+
- -s -w
26+
- -X main.version={{.Version}}
27+
- -X main.commit={{.Commit}}
28+
- -X main.date={{.Date}}
29+
30+
- id: osctrl-admin
31+
main: ./cmd/admin
32+
binary: osctrl-admin
33+
env:
34+
- CGO_ENABLED=0
35+
goos:
36+
- linux
37+
- darwin
38+
- windows
39+
goarch:
40+
- amd64
41+
- arm64
42+
ignore:
43+
- goos: windows
44+
goarch: arm64
45+
ldflags:
46+
- -s -w
47+
- -X main.version={{.Version}}
48+
- -X main.commit={{.Commit}}
49+
- -X main.date={{.Date}}
50+
51+
- id: osctrl-api
52+
main: ./cmd/api
53+
binary: osctrl-api
54+
env:
55+
- CGO_ENABLED=0
56+
goos:
57+
- linux
58+
- darwin
59+
- windows
60+
goarch:
61+
- amd64
62+
- arm64
63+
ignore:
64+
- goos: windows
65+
goarch: arm64
66+
ldflags:
67+
- -s -w
68+
- -X main.version={{.Version}}
69+
- -X main.commit={{.Commit}}
70+
- -X main.date={{.Date}}
71+
72+
- id: osctrl-cli
73+
main: ./cmd/cli
74+
binary: osctrl-cli
75+
env:
76+
- CGO_ENABLED=0
77+
goos:
78+
- linux
79+
- darwin
80+
- windows
81+
goarch:
82+
- amd64
83+
- arm64
84+
ldflags:
85+
- -s -w
86+
- -X main.version={{.Version}}
87+
- -X main.commit={{.Commit}}
88+
- -X main.date={{.Date}}
89+
90+
archives:
91+
- name_template: >-
92+
{{ .ProjectName }}-
93+
{{- title .Os }}-
94+
{{- if eq .Arch "amd64" }}x86_64
95+
{{- else if eq .Arch "386" }}i386
96+
{{- else }}{{ .Arch }}{{ end }}
97+
files:
98+
- README.md
99+
- LICENSE
100+
- CHANGELOG.md
101+
102+
checksum:
103+
name_template: "checksums.txt"
104+
105+
snapshot: {}
106+
107+
changelog:
108+
sort: asc
109+
filters:
110+
exclude:
111+
- "^docs:"
112+
- "^test:"
113+
- "^ci:"
114+
- Merge pull request
115+
- Merge branch
116+
117+
dockers:
118+
- image_templates:
119+
- "{{ .Env.DOCKER_HUB_ORG }}/osctrl-tls:{{ .Version }}"
120+
- "{{ .Env.DOCKER_HUB_ORG }}/osctrl-tls:latest"
121+
dockerfile: deploy/cicd/docker/Dockerfile-osctrl-tls
122+
use: buildx
123+
build_flag_templates:
124+
- "--platform=linux/amd64"
125+
- "--platform=linux/arm64"
126+
extra_files:
127+
- osctrl-tls-linux-amd64
128+
- osctrl-tls-linux-arm64
129+
130+
- image_templates:
131+
- "{{ .Env.DOCKER_HUB_ORG }}/osctrl-admin:{{ .Version }}"
132+
- "{{ .Env.DOCKER_HUB_ORG }}/osctrl-admin:latest"
133+
dockerfile: deploy/cicd/docker/Dockerfile-osctrl-admin
134+
use: buildx
135+
build_flag_templates:
136+
- "--platform=linux/amd64"
137+
- "--platform=linux/arm64"
138+
extra_files:
139+
- osctrl-admin-linux-amd64
140+
- osctrl-admin-linux-arm64
141+
142+
- image_templates:
143+
- "{{ .Env.DOCKER_HUB_ORG }}/osctrl-api:{{ .Version }}"
144+
- "{{ .Env.DOCKER_HUB_ORG }}/osctrl-api:latest"
145+
dockerfile: deploy/cicd/docker/Dockerfile-osctrl-api
146+
use: buildx
147+
build_flag_templates:
148+
- "--platform=linux/amd64"
149+
- "--platform=linux/arm64"
150+
extra_files:
151+
- osctrl-api-linux-amd64
152+
- osctrl-api-linux-arm64
153+
154+
- image_templates:
155+
- "{{ .Env.DOCKER_HUB_ORG }}/osctrl-cli:{{ .Version }}"
156+
- "{{ .Env.DOCKER_HUB_ORG }}/osctrl-cli:latest"
157+
dockerfile: deploy/cicd/docker/Dockerfile-osctrl-cli
158+
use: buildx
159+
build_flag_templates:
160+
- "--platform=linux/amd64"
161+
- "--platform=linux/arm64"
162+
extra_files:
163+
- osctrl-cli-linux-amd64
164+
- osctrl-cli-linux-arm64
165+
166+
nfpms:
167+
- id: osctrl-tls
168+
maintainer: jmpsec/osctrl
169+
description: osctrl TLS component
170+
homepage: https://github.com/jmpsec/osctrl
171+
license: MIT
172+
formats:
173+
- deb
174+
bindir: /usr/bin
175+
contents:
176+
- src: osctrl-tls-linux-amd64
177+
dst: /usr/bin/osctrl-tls
178+
- src: osctrl-tls-linux-arm64
179+
dst: /usr/bin/osctrl-tls
180+
overrides:
181+
deb:
182+
scripts:
183+
postinstall: deploy/cicd/deb/post-install.sh
184+
preremove: deploy/cicd/deb/pre-remove.sh
185+
186+
- id: osctrl-admin
187+
maintainer: jmpsec/osctrl
188+
description: osctrl Admin component
189+
homepage: https://github.com/jmpsec/osctrl
190+
license: MIT
191+
formats:
192+
- deb
193+
bindir: /usr/bin
194+
contents:
195+
- src: osctrl-admin-linux-amd64
196+
dst: /usr/bin/osctrl-admin
197+
- src: osctrl-admin-linux-arm64
198+
dst: /usr/bin/osctrl-admin
199+
overrides:
200+
deb:
201+
scripts:
202+
postinstall: deploy/cicd/deb/post-install.sh
203+
preremove: deploy/cicd/deb/pre-remove.sh
204+
205+
- id: osctrl-api
206+
maintainer: jmpsec/osctrl
207+
description: osctrl API component
208+
homepage: https://github.com/jmpsec/osctrl
209+
license: MIT
210+
formats:
211+
- deb
212+
bindir: /usr/bin
213+
contents:
214+
- src: osctrl-api-linux-amd64
215+
dst: /usr/bin/osctrl-api
216+
- src: osctrl-api-linux-arm64
217+
dst: /usr/bin/osctrl-api
218+
overrides:
219+
deb:
220+
scripts:
221+
postinstall: deploy/cicd/deb/post-install.sh
222+
preremove: deploy/cicd/deb/pre-remove.sh
223+
224+
- id: osctrl-cli
225+
maintainer: jmpsec/osctrl
226+
description: osctrl CLI component
227+
homepage: https://github.com/jmpsec/osctrl
228+
license: MIT
229+
formats:
230+
- deb
231+
bindir: /usr/bin
232+
contents:
233+
- src: osctrl-cli-linux-amd64
234+
dst: /usr/bin/osctrl-cli
235+
- src: osctrl-cli-linux-arm64
236+
dst: /usr/bin/osctrl-cli
237+
overrides:
238+
deb:
239+
scripts:
240+
postinstall: deploy/cicd/deb/post-install.sh
241+
preremove: deploy/cicd/deb/pre-remove.sh
242+
243+
release:
244+
draft: false
245+
prerelease: false

0 commit comments

Comments
 (0)