Skip to content

Commit 06f78b4

Browse files
committed
Release: Use GoReleaser for release
- use github actions and goreleaser to automatically build and publish release on new tags - build binaries - build dep/rpm packages for linux - build docker images tagged with release version and 'latest' tag - publish release on github releases - publish docker images on github container registry - replace `Dockerfile` with `Dockerfile.goreleaser` - update `docker-compose.yml` to use `ghcr.io`
1 parent 7628a47 commit 06f78b4

File tree

6 files changed

+234
-24
lines changed

6 files changed

+234
-24
lines changed

.github/workflows/release.yml

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
name: Release
2+
3+
on:
4+
push:
5+
tags:
6+
- 'v*.*'
7+
8+
permissions:
9+
contents: write
10+
packages: write
11+
12+
jobs:
13+
goreleaser:
14+
runs-on: ubuntu-latest
15+
steps:
16+
-
17+
name: Checkout
18+
uses: actions/checkout@v2
19+
with:
20+
fetch-depth: 0
21+
-
22+
name: Set up Go
23+
uses: actions/setup-go@v2
24+
with:
25+
go-version: 1.17
26+
27+
28+
- name: Login to GitHub Container Registry
29+
uses: docker/login-action@v1
30+
with:
31+
registry: ghcr.io
32+
username: ${{ github.repository_owner }}
33+
password: ${{ secrets.GITHUB_TOKEN }}
34+
35+
- name: Run GoReleaser
36+
uses: goreleaser/goreleaser-action@v2
37+
with:
38+
distribution: goreleaser
39+
version: latest
40+
args: release --rm-dist
41+
env:
42+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
43+
44+
- name: Upload assets
45+
uses: actions/upload-artifact@v2
46+
with:
47+
name: ssh-chat
48+
path: dist/*.*

.gitignore

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,4 +4,8 @@ host_key.pub
44
ssh-chat
55
*.log
66
.*
7+
!.goreleaser.yml
8+
!.github
79
vendor/
10+
dist
11+
sshchat

.goreleaser.yml

Lines changed: 165 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,165 @@
1+
project_name: ssh-chat
2+
3+
env:
4+
- GO111MODULE=on
5+
- CGO_ENABLED=0
6+
7+
before:
8+
hooks:
9+
- go mod download
10+
11+
builds:
12+
- id: "ssh-chat"
13+
dir: "./cmd/ssh-chat"
14+
binary: "ssh-chat"
15+
ldflags: -X main.Version={{ .Version }} -extldflags "-static"
16+
goos:
17+
- linux
18+
- windows
19+
- freebsd
20+
- darwin
21+
goarch:
22+
- amd64
23+
- 386
24+
- arm
25+
- arm64
26+
goarm:
27+
- 6
28+
- 7
29+
ignore:
30+
- goos: darwin
31+
goarch: 386
32+
- goos: darwin
33+
goarch: arm
34+
- goos: freebsd
35+
goarch: 386
36+
- goos: freebsd
37+
goarch: arm
38+
- goos: freebsd
39+
goarch: arm64
40+
- goos: windows
41+
goarch: arm
42+
- goos: windows
43+
goarch: arm64
44+
45+
dockers:
46+
- image_templates:
47+
- "ghcr.io/shazow/{{ .ProjectName }}:latest-amd64"
48+
- "ghcr.io/shazow/{{ .ProjectName }}:{{ .Version }}-amd64"
49+
ids: [ssh-chat]
50+
goarch: amd64
51+
build_flag_templates:
52+
- --platform=linux/amd64
53+
- --label=org.opencontainers.image.title={{ .ProjectName }}
54+
- --label=org.opencontainers.image.description={{ .ProjectName }}
55+
- --label=org.opencontainers.image.url=https://github.com/shazow/{{ .ProjectName }}
56+
- --label=org.opencontainers.image.source=https://github.com/shazow/{{ .ProjectName }}
57+
- --label=org.opencontainers.image.version={{ .Version }}
58+
- --label=org.opencontainers.image.created={{ .Date }}
59+
- --label=org.opencontainers.image.revision={{ .FullCommit }}
60+
- --label=org.opencontainers.image.licenses=MIT
61+
dockerfile: Dockerfile.goreleaser
62+
use: buildx
63+
- image_templates:
64+
- "ghcr.io/shazow/{{ .ProjectName }}:latest-arm64v8"
65+
- "ghcr.io/shazow/{{ .ProjectName }}:{{ .Version }}-arm64v8"
66+
ids: [ssh-chat]
67+
goarch: arm64
68+
build_flag_templates:
69+
- --platform=linux/arm64/v8
70+
- --label=org.opencontainers.image.title={{ .ProjectName }}
71+
- --label=org.opencontainers.image.description={{ .ProjectName }}
72+
- --label=org.opencontainers.image.url=https://github.com/shazow/{{ .ProjectName }}
73+
- --label=org.opencontainers.image.source=https://github.com/shazow/{{ .ProjectName }}
74+
- --label=org.opencontainers.image.version={{ .Version }}
75+
- --label=org.opencontainers.image.created={{ .Date }}
76+
- --label=org.opencontainers.image.revision={{ .FullCommit }}
77+
- --label=org.opencontainers.image.licenses=MIT
78+
dockerfile: Dockerfile.goreleaser
79+
use: buildx
80+
- image_templates:
81+
- "ghcr.io/shazow/{{ .ProjectName }}:latest-arm32v6"
82+
- "ghcr.io/shazow/{{ .ProjectName }}:{{ .Version }}-arm32v6"
83+
ids: [ssh-chat]
84+
goarch: arm
85+
goarm: 6
86+
build_flag_templates:
87+
- --platform=linux/arm/v6
88+
- --label=org.opencontainers.image.title={{ .ProjectName }}
89+
- --label=org.opencontainers.image.description={{ .ProjectName }}
90+
- --label=org.opencontainers.image.url=https://github.com/shazow/{{ .ProjectName }}
91+
- --label=org.opencontainers.image.source=https://github.com/shazow/{{ .ProjectName }}
92+
- --label=org.opencontainers.image.version={{ .Version }}
93+
- --label=org.opencontainers.image.created={{ .Date }}
94+
- --label=org.opencontainers.image.revision={{ .FullCommit }}
95+
- --label=org.opencontainers.image.licenses=MIT
96+
dockerfile: Dockerfile.goreleaser
97+
use: buildx
98+
- image_templates:
99+
- "ghcr.io/shazow/{{ .ProjectName }}:latest-arm32v7"
100+
- "ghcr.io/shazow/{{ .ProjectName }}:{{ .Version }}-arm32v7"
101+
ids: [ssh-chat]
102+
goarch: arm
103+
goarm: 7
104+
build_flag_templates:
105+
- --platform=linux/arm/v7
106+
- --label=org.opencontainers.image.title={{ .ProjectName }}
107+
- --label=org.opencontainers.image.description={{ .ProjectName }}
108+
- --label=org.opencontainers.image.url=https://github.com/shazow/{{ .ProjectName }}
109+
- --label=org.opencontainers.image.source=https://github.com/shazow/{{ .ProjectName }}
110+
- --label=org.opencontainers.image.version={{ .Version }}
111+
- --label=org.opencontainers.image.created={{ .Date }}
112+
- --label=org.opencontainers.image.revision={{ .FullCommit }}
113+
- --label=org.opencontainers.image.licenses=MIT
114+
dockerfile: Dockerfile.goreleaser
115+
use: buildx
116+
117+
docker_manifests:
118+
- name_template: ghcr.io/shazow/{{ .ProjectName }}:latest
119+
image_templates:
120+
- ghcr.io/shazow/{{ .ProjectName }}:latest-amd64
121+
- ghcr.io/shazow/{{ .ProjectName }}:latest-arm64v8
122+
- ghcr.io/shazow/{{ .ProjectName }}:latest-arm32v7
123+
- ghcr.io/shazow/{{ .ProjectName }}:latest-arm32v6
124+
- name_template: ghcr.io/shazow/{{ .ProjectName }}:{{ .Version }}
125+
image_templates:
126+
- ghcr.io/shazow/{{ .ProjectName }}:{{ .Version }}-amd64
127+
- ghcr.io/shazow/{{ .ProjectName }}:{{ .Version }}-arm64v8
128+
- ghcr.io/shazow/{{ .ProjectName }}:{{ .Version }}-arm32v7
129+
- ghcr.io/shazow/{{ .ProjectName }}:{{ .Version }}-arm32v6
130+
131+
nfpms:
132+
- maintainer: Andrey Petrov <[email protected]>
133+
description: "{{ .ProjectName }}"
134+
homepage: https://github.com/shazow/{{ .ProjectName }}
135+
license: MIT
136+
formats:
137+
- deb
138+
- rpm
139+
140+
archives:
141+
- id: ssh-chat
142+
builds:
143+
- ssh-chat
144+
format: tar.gz
145+
format_overrides:
146+
- goos: windows
147+
format: zip
148+
files:
149+
- LICENSE*
150+
- README*
151+
- CHANGELOG*
152+
153+
release:
154+
github:
155+
owner: shazow
156+
name: ssh-chat
157+
ids: [ssh-chat]
158+
prerelease: auto
159+
160+
changelog:
161+
sort: asc
162+
filters:
163+
exclude:
164+
- '^docs:'
165+
- typo

Dockerfile

Lines changed: 0 additions & 21 deletions
This file was deleted.

Dockerfile.goreleaser

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
FROM scratch
2+
3+
COPY ssh-chat /usr/local/bin/ssh-chat
4+
WORKDIR /sshchat
5+
6+
ENTRYPOINT [ "/usr/local/bin/ssh-chat" ]

docker-compose.yml

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,15 @@
1-
version: '3'
1+
version: '3.7'
22
services:
3-
app:
4-
build: .
3+
ssh-chat:
4+
image: ghcr.io/shazow/ssh-chat:latest
55
ports:
66
- 2022:2022
77
restart: always
8+
volumes:
9+
- ./sshchat:/sshchat
10+
command:
11+
- --verbose
12+
- --identity=id
13+
- --bind=":2022"
14+
- --admin=admins
15+
- --motd=motd

0 commit comments

Comments
 (0)