Skip to content

Commit 47a0d02

Browse files
committed
build: goreleaser
1 parent 8825cf5 commit 47a0d02

File tree

7 files changed

+95
-94
lines changed

7 files changed

+95
-94
lines changed

.github/workflows/release.yml

Lines changed: 9 additions & 83 deletions
Original file line numberDiff line numberDiff line change
@@ -9,99 +9,25 @@ permissions:
99
contents: write
1010

1111
jobs:
12-
build:
13-
name: Build binaries
12+
release:
13+
name: Release
1414
runs-on: ubuntu-latest
15-
strategy:
16-
matrix:
17-
include:
18-
# Linux
19-
- goos: linux
20-
goarch: amd64
21-
name: linux-amd64
22-
- goos: linux
23-
goarch: arm64
24-
name: linux-arm64
25-
26-
# macOS
27-
- goos: darwin
28-
goarch: amd64
29-
name: darwin-amd64
30-
- goos: darwin
31-
goarch: arm64
32-
name: darwin-arm64
33-
34-
# Windows
35-
- goos: windows
36-
goarch: amd64
37-
name: windows-amd64
38-
- goos: windows
39-
goarch: arm64
40-
name: windows-arm64
41-
4215
steps:
4316
- name: Checkout code
4417
uses: actions/checkout@v4
18+
with:
19+
fetch-depth: 0
4520

4621
- name: Set up Go
4722
uses: actions/setup-go@v4
4823
with:
4924
go-version: '1.21'
5025

51-
- name: Get version
52-
id: version
53-
run: echo "VERSION=${GITHUB_REF#refs/tags/}" >> $GITHUB_OUTPUT
54-
55-
- name: Build binary
56-
env:
57-
GOOS: ${{ matrix.goos }}
58-
GOARCH: ${{ matrix.goarch }}
59-
CGO_ENABLED: 0
60-
run: |
61-
OUTPUT_NAME="ssh-dashboard-${{ steps.version.outputs.VERSION }}-${{ matrix.name }}"
62-
if [ "${{ matrix.goos }}" = "windows" ]; then
63-
OUTPUT_NAME="${OUTPUT_NAME}.exe"
64-
fi
65-
go build -ldflags="-s -w" -o "${OUTPUT_NAME}" ./cmd/ssh_dashboard
66-
67-
- name: Upload artifacts
68-
uses: actions/upload-artifact@v4
26+
- name: Run GoReleaser
27+
uses: goreleaser/goreleaser-action@v5
6928
with:
70-
name: binaries-${{ matrix.name }}
71-
path: ssh-dashboard-*
72-
73-
release:
74-
name: Create Release
75-
needs: build
76-
runs-on: ubuntu-latest
77-
steps:
78-
- name: Checkout code
79-
uses: actions/checkout@v4
80-
81-
- name: Download artifacts
82-
uses: actions/download-artifact@v4
83-
with:
84-
pattern: binaries-*
85-
merge-multiple: true
86-
87-
- name: Get version
88-
id: version
89-
run: echo "VERSION=${GITHUB_REF#refs/tags/}" >> $GITHUB_OUTPUT
90-
91-
- name: Generate checksums
92-
run: |
93-
sha256sum ssh-dashboard-* > checksums.txt
94-
95-
- name: Create Release
96-
uses: softprops/action-gh-release@v1
97-
with:
98-
name: Release ${{ steps.version.outputs.VERSION }}
99-
draft: false
100-
prerelease: false
101-
generate_release_notes: true
102-
files: |
103-
ssh-dashboard-*
104-
checksums.txt
29+
distribution: goreleaser
30+
version: latest
31+
args: release --clean
10532
env:
10633
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
107-

.gitignore

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,9 @@ test_*
1111
*.out
1212
vendor/
1313

14+
# GoReleaser
15+
dist/
16+
1417
# IDE
1518
.vscode/
1619
.idea/

.goreleaser.yml

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
version: 2
2+
3+
project_name: ssh-dashboard
4+
5+
before:
6+
hooks:
7+
- go mod tidy
8+
9+
builds:
10+
- id: ssh-dashboard
11+
main: ./cmd/ssh_dashboard
12+
binary: ssh-dashboard
13+
env:
14+
- CGO_ENABLED=0
15+
goos:
16+
- linux
17+
- darwin
18+
- windows
19+
goarch:
20+
- amd64
21+
- arm64
22+
ldflags:
23+
- -s -w
24+
25+
archives:
26+
- id: default
27+
name_template: >-
28+
{{ .ProjectName }}-{{ .Version }}-{{ .Os }}-{{ .Arch }}
29+
{{- if eq .Os "windows" }}.exe{{ end }}
30+
formats: [binary]
31+
32+
checksum:
33+
name_template: 'checksums.txt'
34+
35+
release:
36+
github:
37+
owner: alpindale
38+
name: ssh-dashboard
39+
draft: false
40+
prerelease: auto
41+
name_template: "Release {{ .Version }}"
42+
43+
changelog:
44+
sort: asc
45+
filters:
46+
exclude:
47+
- '^docs:'
48+
- '^test:'
49+
- '^chore:'

Makefile

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
.PHONY: build clean install test run
1+
.PHONY: build clean install test run snapshot
22

33
BINARY_NAME=ssh-dashboard
44
INSTALL_PATH=$(HOME)/.local/bin
@@ -14,6 +14,10 @@ build-all:
1414
@GOOS=darwin GOARCH=arm64 go build -o ${BINARY_NAME}-darwin-arm64 ./cmd/ssh_dashboard
1515
@GOOS=windows GOARCH=amd64 go build -o ${BINARY_NAME}-windows-amd64.exe ./cmd/ssh_dashboard
1616

17+
snapshot:
18+
@echo "Building snapshot with goreleaser..."
19+
@goreleaser release --snapshot --clean
20+
1721
clean:
1822
@echo "Cleaning..."
1923
@go clean
@@ -50,6 +54,7 @@ help:
5054
@echo "Available targets:"
5155
@echo " build - Build the binary"
5256
@echo " build-all - Build for multiple platforms"
57+
@echo " snapshot - Build snapshot with goreleaser"
5358
@echo " clean - Remove built binaries"
5459
@echo " install - Install to ${INSTALL_PATH}"
5560
@echo " uninstall - Remove from ${INSTALL_PATH}"

README.md

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -147,14 +147,22 @@ make run
147147

148148
### Build for Multiple Platforms
149149

150+
The project uses [GoReleaser](https://goreleaser.com/) for multi-platform builds and releases.
151+
152+
**Test the release locally:**
153+
```bash
154+
goreleaser release --snapshot --clean
155+
```
156+
157+
**Build all platforms with Make:**
150158
```bash
151159
make build-all
152160
```
153161

154162
This creates binaries for:
155-
- Linux (amd64)
156-
- macOS (amd64 and arm64)
157-
- Windows (amd64) [not tested]
163+
- Linux (amd64, arm64)
164+
- macOS (amd64, arm64)
165+
- Windows (amd64, arm64)
158166

159167
### Clean
160168

go.mod

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,17 @@ module github.com/alpindale/ssh-dashboard
22

33
go 1.24.4
44

5+
require (
6+
github.com/charmbracelet/bubbles v0.21.0
7+
github.com/charmbracelet/bubbletea v1.3.10
8+
github.com/charmbracelet/lipgloss v1.1.0
9+
golang.org/x/crypto v0.43.0
10+
)
11+
512
require (
613
github.com/atotto/clipboard v0.1.4 // indirect
714
github.com/aymanbagabas/go-osc52/v2 v2.0.1 // indirect
8-
github.com/charmbracelet/bubbles v0.21.0 // indirect
9-
github.com/charmbracelet/bubbletea v1.3.10 // indirect
1015
github.com/charmbracelet/colorprofile v0.2.3-0.20250311203215-f60798e515dc // indirect
11-
github.com/charmbracelet/harmonica v0.2.0 // indirect
12-
github.com/charmbracelet/lipgloss v1.1.0 // indirect
1316
github.com/charmbracelet/x/ansi v0.10.1 // indirect
1417
github.com/charmbracelet/x/cellbuf v0.0.13-0.20250311204145-2c3ea96c31dd // indirect
1518
github.com/charmbracelet/x/term v0.2.1 // indirect
@@ -24,7 +27,6 @@ require (
2427
github.com/rivo/uniseg v0.4.7 // indirect
2528
github.com/sahilm/fuzzy v0.1.1 // indirect
2629
github.com/xo/terminfo v0.0.0-20220910002029-abceb7e1c41e // indirect
27-
golang.org/x/crypto v0.43.0 // indirect
2830
golang.org/x/sys v0.37.0 // indirect
2931
golang.org/x/text v0.30.0 // indirect
3032
)

go.sum

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,24 +2,28 @@ github.com/atotto/clipboard v0.1.4 h1:EH0zSVneZPSuFR11BlR9YppQTVDbh5+16AmcJi4g1z
22
github.com/atotto/clipboard v0.1.4/go.mod h1:ZY9tmq7sm5xIbd9bOK4onWV4S6X0u6GY7Vn0Yu86PYI=
33
github.com/aymanbagabas/go-osc52/v2 v2.0.1 h1:HwpRHbFMcZLEVr42D4p7XBqjyuxQH5SMiErDT4WkJ2k=
44
github.com/aymanbagabas/go-osc52/v2 v2.0.1/go.mod h1:uYgXzlJ7ZpABp8OJ+exZzJJhRNQ2ASbcXHWsFqH8hp8=
5+
github.com/aymanbagabas/go-udiff v0.2.0 h1:TK0fH4MteXUDspT88n8CKzvK0X9O2xu9yQjWpi6yML8=
6+
github.com/aymanbagabas/go-udiff v0.2.0/go.mod h1:RE4Ex0qsGkTAJoQdQQCA0uG+nAzJO/pI/QwceO5fgrA=
57
github.com/charmbracelet/bubbles v0.21.0 h1:9TdC97SdRVg/1aaXNVWfFH3nnLAwOXr8Fn6u6mfQdFs=
68
github.com/charmbracelet/bubbles v0.21.0/go.mod h1:HF+v6QUR4HkEpz62dx7ym2xc71/KBHg+zKwJtMw+qtg=
79
github.com/charmbracelet/bubbletea v1.3.10 h1:otUDHWMMzQSB0Pkc87rm691KZ3SWa4KUlvF9nRvCICw=
810
github.com/charmbracelet/bubbletea v1.3.10/go.mod h1:ORQfo0fk8U+po9VaNvnV95UPWA1BitP1E0N6xJPlHr4=
911
github.com/charmbracelet/colorprofile v0.2.3-0.20250311203215-f60798e515dc h1:4pZI35227imm7yK2bGPcfpFEmuY1gc2YSTShr4iJBfs=
1012
github.com/charmbracelet/colorprofile v0.2.3-0.20250311203215-f60798e515dc/go.mod h1:X4/0JoqgTIPSFcRA/P6INZzIuyqdFY5rm8tb41s9okk=
11-
github.com/charmbracelet/harmonica v0.2.0 h1:8NxJWRWg/bzKqqEaaeFNipOu77YR5t8aSwG4pgaUBiQ=
12-
github.com/charmbracelet/harmonica v0.2.0/go.mod h1:KSri/1RMQOZLbw7AHqgcBycp8pgJnQMYYT8QZRqZ1Ao=
1313
github.com/charmbracelet/lipgloss v1.1.0 h1:vYXsiLHVkK7fp74RkV7b2kq9+zDLoEU4MZoFqR/noCY=
1414
github.com/charmbracelet/lipgloss v1.1.0/go.mod h1:/6Q8FR2o+kj8rz4Dq0zQc3vYf7X+B0binUUBwA0aL30=
1515
github.com/charmbracelet/x/ansi v0.10.1 h1:rL3Koar5XvX0pHGfovN03f5cxLbCF2YvLeyz7D2jVDQ=
1616
github.com/charmbracelet/x/ansi v0.10.1/go.mod h1:3RQDQ6lDnROptfpWuUVIUG64bD2g2BgntdxH0Ya5TeE=
1717
github.com/charmbracelet/x/cellbuf v0.0.13-0.20250311204145-2c3ea96c31dd h1:vy0GVL4jeHEwG5YOXDmi86oYw2yuYUGqz6a8sLwg0X8=
1818
github.com/charmbracelet/x/cellbuf v0.0.13-0.20250311204145-2c3ea96c31dd/go.mod h1:xe0nKWGd3eJgtqZRaN9RjMtK7xUYchjzPr7q6kcvCCs=
19+
github.com/charmbracelet/x/exp/golden v0.0.0-20241011142426-46044092ad91 h1:payRxjMjKgx2PaCWLZ4p3ro9y97+TVLZNaRZgJwSVDQ=
20+
github.com/charmbracelet/x/exp/golden v0.0.0-20241011142426-46044092ad91/go.mod h1:wDlXFlCrmJ8J+swcL/MnGUuYnqgQdW9rhSD61oNMb6U=
1921
github.com/charmbracelet/x/term v0.2.1 h1:AQeHeLZ1OqSXhrAWpYUtZyX1T3zVxfpZuEQMIQaGIAQ=
2022
github.com/charmbracelet/x/term v0.2.1/go.mod h1:oQ4enTYFV7QN4m0i9mzHrViD7TQKvNEEkHUMCmsxdUg=
2123
github.com/erikgeiser/coninput v0.0.0-20211004153227-1c3628e74d0f h1:Y/CXytFA4m6baUTXGLOoWe4PQhGxaX0KpnayAqC48p4=
2224
github.com/erikgeiser/coninput v0.0.0-20211004153227-1c3628e74d0f/go.mod h1:vw97MGsxSvLiUE2X8qFplwetxpGLQrlU1Q9AUEIzCaM=
25+
github.com/kylelemons/godebug v1.1.0 h1:RPNrshWIDI6G2gRW9EHilWtl7Z6Sb1BR0xunSBf0SNc=
26+
github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw=
2327
github.com/lucasb-eyer/go-colorful v1.2.0 h1:1nnpGOrhyZZuNyfu1QjKiUICQ74+3FNCN69Aj6K7nkY=
2428
github.com/lucasb-eyer/go-colorful v1.2.0/go.mod h1:R4dSotOR9KMtayYi1e77YzuveK+i7ruzyGqttikkLy0=
2529
github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY=
@@ -43,9 +47,13 @@ github.com/xo/terminfo v0.0.0-20220910002029-abceb7e1c41e h1:JVG44RsyaB9T2KIHavM
4347
github.com/xo/terminfo v0.0.0-20220910002029-abceb7e1c41e/go.mod h1:RbqR21r5mrJuqunuUZ/Dhy/avygyECGrLceyNeo4LiM=
4448
golang.org/x/crypto v0.43.0 h1:dduJYIi3A3KOfdGOHX8AVZ/jGiyPa3IbBozJ5kNuE04=
4549
golang.org/x/crypto v0.43.0/go.mod h1:BFbav4mRNlXJL4wNeejLpWxB7wMbc79PdRGhWKncxR0=
50+
golang.org/x/exp v0.0.0-20220909182711-5c715a9e8561 h1:MDc5xs78ZrZr3HMQugiXOAkSZtfTpbJLDr/lwfgO53E=
51+
golang.org/x/exp v0.0.0-20220909182711-5c715a9e8561/go.mod h1:cyybsKvd6eL0RnXn6p/Grxp8F5bW7iYuBgsNCOHpMYE=
4652
golang.org/x/sys v0.0.0-20210809222454-d867a43fc93e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
4753
golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
4854
golang.org/x/sys v0.37.0 h1:fdNQudmxPjkdUTPnLn5mdQv7Zwvbvpaxqs831goi9kQ=
4955
golang.org/x/sys v0.37.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks=
56+
golang.org/x/term v0.36.0 h1:zMPR+aF8gfksFprF/Nc/rd1wRS1EI6nDBGyWAvDzx2Q=
57+
golang.org/x/term v0.36.0/go.mod h1:Qu394IJq6V6dCBRgwqshf3mPF85AqzYEzofzRdZkWss=
5058
golang.org/x/text v0.30.0 h1:yznKA/E9zq54KzlzBEAWn1NXSQ8DIp/NYMy88xJjl4k=
5159
golang.org/x/text v0.30.0/go.mod h1:yDdHFIX9t+tORqspjENWgzaCVXgk0yYnYuSZ8UzzBVM=

0 commit comments

Comments
 (0)