Skip to content
This repository was archived by the owner on Jul 23, 2025. It is now read-only.

Commit 670ea70

Browse files
authored
chore: CI updates (#64)
* chore(ci): at most one active PR for surgeon * chore(ci): add basic go CI checks * chore(ci): add goreleaser * chore(ci): add goreleaser * fix: version of cli app using git status * fix(ci): remove templ from tools
1 parent 921f64b commit 670ea70

9 files changed

Lines changed: 193 additions & 27 deletions

File tree

.github/workflows/go.yml

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
# This workflow will build a golang project
2+
# For more information see: https://docs.github.com/en/actions/automating-builds-and-tests/building-and-testing-go
3+
4+
name: Go
5+
6+
on:
7+
push:
8+
branches: [ "main" ]
9+
pull_request:
10+
branches: [ "main" ]
11+
12+
jobs:
13+
14+
build:
15+
runs-on: ubuntu-latest
16+
steps:
17+
- uses: actions/checkout@v4
18+
19+
- name: Set up Go
20+
uses: actions/setup-go@v4
21+
with:
22+
go-version: '1.24'
23+
- name: Build
24+
working-directory: ./cli/cmd
25+
run: go build -v .
26+
27+
28+
- name: Test
29+
working-directory: ./cli/cmd
30+
run: go test -v ./...

.github/workflows/release.yml

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
# .github/workflows/release.yml
2+
name: goreleaser
3+
4+
on:
5+
push:
6+
# run only against tags
7+
tags:
8+
- "*"
9+
10+
permissions:
11+
contents: write
12+
packages: write
13+
# issues: write
14+
id-token: write
15+
16+
env:
17+
REGISTRY: ghcr.io
18+
IMAGE_NAME: ${{ github.repository }}
19+
20+
jobs:
21+
goreleaser:
22+
runs-on: ubuntu-latest
23+
steps:
24+
- name: Checkout
25+
uses: actions/checkout@v4
26+
with:
27+
fetch-depth: 0
28+
- name: Set up Go
29+
uses: actions/setup-go@v5
30+
with:
31+
go-version: stable
32+
# More assembly might be required: Docker logins, GPG, etc.
33+
# It all depends on your needs.
34+
- name: Run GoReleaser
35+
working-directory: ./cli
36+
uses: goreleaser/goreleaser-action@v6
37+
with:
38+
# either 'goreleaser' (default) or 'goreleaser-pro'
39+
distribution: goreleaser-pro
40+
# 'latest', 'nightly', or a semver
41+
version: "~> v2"
42+
args: release --clean
43+
env:
44+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
45+
# Your GoReleaser Pro key, if you are using the 'goreleaser-pro' distribution
46+
GORELEASER_KEY: ${{ secrets.GORELEASER_KEY }}

.github/workflows/surgeon.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,5 +37,5 @@ jobs:
3737
uses: peter-evans/create-pull-request@v7
3838
with:
3939
commit-message: pull upstream changes
40-
branch-suffix: random
40+
branch: surgeon-patch
4141
delete-branch: true

cli/.goreleaser.yaml

Lines changed: 35 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,20 +7,22 @@ before:
77
hooks:
88
# You may remove this if you don't use go modules.
99
- go mod tidy
10-
# you may remove this if you don't need go generate
11-
- go generate ./...
10+
1211

1312
builds:
1413
- env:
1514
- CGO_ENABLED=0
1615
goos:
1716
- linux
17+
- darwin
1818
goarch:
1919
- amd64
2020
- arm64
2121
main: ./cmd
2222
binary: scripts-cli
2323
id: scripts-cli
24+
ldflags:
25+
- -s -w -X main.version={{.Version}} -X main.commit={{.Commit}} -X main.date={{ .CommitDate }} -X main.builtBy=goreleaser
2426

2527
archives:
2628
- formats: [ 'tar.gz' ]
@@ -39,10 +41,40 @@ archives:
3941

4042
changelog:
4143
sort: asc
44+
use: github
45+
format: "{{ .SHA }}: {{ .Message }}{{ with .AuthorUsername }} (@{{ . }}){{ end }}"
4246
filters:
4347
exclude:
44-
- "^docs:"
4548
- "^test:"
49+
- "^test\\("
50+
- "^chore: update$"
51+
- "^chore: docs$"
52+
- "^docs: update$"
53+
- "^chore: typo$"
54+
- "^chore: auto-update generated files$"
55+
- "^chore\\(deps\\): "
56+
- "^(build|ci): "
57+
- "merge conflict"
58+
- "merge conflict"
59+
- Merge pull request
60+
- Merge remote-tracking branch
61+
- Merge branch
62+
- go mod tidy
63+
groups:
64+
- title: "New Features"
65+
regexp: '^.*?feat(\(.+\))??!?:.+$'
66+
order: 100
67+
- title: "Security updates"
68+
regexp: '^.*?sec(\(.+\))??!?:.+$'
69+
order: 150
70+
- title: "Bug fixes"
71+
regexp: '^.*?(fix|refactor)(\(.+\))??!?:.+$'
72+
order: 200
73+
- title: "Documentation updates"
74+
regexp: ^.*?docs?(\(.+\))??!?:.+$
75+
order: 400
76+
- title: Other work
77+
order: 9999
4678

4779
release:
4880
footer: >-

cli/Taskfile.yml

Lines changed: 26 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,20 @@ vars:
66
GREETING: Hello, World!
77

88
tasks:
9+
dev:
10+
dir: cli
11+
desc: Setup tools
12+
cmds:
13+
- go install github.com/caarlos0/svu@latest
14+
- go install github.com/golangci/golangci-lint/v2/cmd/golangci-lint@v2.0.2
15+
- go install mvdan.cc/gofumpt@latest
916
build:
17+
vars:
18+
NEXT:
19+
sh: svu n
1020
dir: cli
1121
cmds:
12-
- CGO_ENABLED=0 go build -v -trimpath -ldflags="-X github.com/bketelsen/IncusScripts/cli/cmd/main.commit=$(git rev-parse HEAD)" -o scripts-cli ./cmd
22+
- CGO_ENABLED=0 go build -v -trimpath -ldflags="-X main.commit=$(git rev-parse HEAD) -X main.version={{.NEXT}}-dev" -o scripts-cli ./cmd
1323
silent: true
1424
install:
1525
dir: cli
@@ -31,3 +41,18 @@ tasks:
3141
cmds:
3242
- goreleaser check
3343
silent: true
44+
release:
45+
desc: Create a new tag
46+
vars:
47+
NEXT:
48+
sh: svu n
49+
prompt: "This will release {{.NEXT}}. Continue?"
50+
preconditions:
51+
- sh: '[ $(git symbolic-ref --short HEAD) = "main" ]'
52+
msg: Not on main branch
53+
- sh: "[ $(git status --porcelain=2 | wc -l) = 0 ]"
54+
msg: "Git is dirty"
55+
cmds:
56+
- git tag {{.NEXT}}
57+
- echo {{.NEXT}}
58+
- git push origin --tags

cli/cmd/cmd

27.9 MB
Binary file not shown.

cli/cmd/main.go

Lines changed: 33 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import (
77
"path"
88

99
"github.com/bketelsen/inclient"
10+
goversion "github.com/bketelsen/toolbox/go-version"
1011
"github.com/charmbracelet/log"
1112
incus "github.com/lxc/incus/v6/client"
1213
config "github.com/lxc/incus/v6/shared/cliconfig"
@@ -18,17 +19,37 @@ import (
1819
var repository string
1920
var app *cobra.Command
2021

21-
const version = "0.0.1"
22-
23-
var commit string
24-
25-
// Version returns the current version string
26-
func Version() string {
27-
clen := 0
28-
if len(commit) > 7 {
29-
clen = 8
30-
}
31-
return fmt.Sprintf("v%s %s", version, commit[:clen])
22+
var (
23+
version = ""
24+
commit = ""
25+
treeState = ""
26+
date = ""
27+
builtBy = ""
28+
)
29+
var bversion = buildVersion(version, commit, date, builtBy, treeState)
30+
31+
// buildVersion builds the version info for the application
32+
func buildVersion(version, commit, date, builtBy, treeState string) goversion.Info {
33+
return goversion.GetVersionInfo(
34+
goversion.WithAppDetails("scripts-cli", "Incus Helper-Scripts", "https://bketelsen.github.io/IncusScripts/"),
35+
func(i *goversion.Info) {
36+
if commit != "" {
37+
i.GitCommit = commit
38+
}
39+
if treeState != "" {
40+
i.GitTreeState = treeState
41+
}
42+
if date != "" {
43+
i.BuildDate = date
44+
}
45+
if version != "" {
46+
i.GitVersion = version
47+
}
48+
if builtBy != "" {
49+
i.BuiltBy = builtBy
50+
}
51+
},
52+
)
3253
}
3354

3455
func main() {
@@ -47,7 +68,7 @@ Support information at https://github.com/bketelsen/IncusScripts/
4768
app.SilenceErrors = true
4869
app.CompletionOptions = cobra.CompletionOptions{HiddenDefaultCmd: true}
4970

50-
app.Version = Version()
71+
app.Version = bversion.String()
5172

5273
// Global flags
5374
globalCmd := cmdGlobal{cmd: app}

cli/go.mod

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,12 @@
11
module github.com/bketelsen/IncusScripts/cli
22

3-
go 1.23.7
3+
go 1.24
44

55
toolchain go1.24.0
66

77
require (
88
github.com/bketelsen/inclient v0.2.0
9+
github.com/bketelsen/toolbox v0.9.0
910
github.com/charmbracelet/glamour v0.8.0
1011
github.com/charmbracelet/huh v0.6.0
1112
github.com/charmbracelet/huh/spinner v0.0.0-20250207133237-2eba4f31bf81
@@ -22,9 +23,11 @@ require (
2223
github.com/aymerick/douceur v0.2.0 // indirect
2324
github.com/catppuccin/go v0.3.0 // indirect
2425
github.com/charmbracelet/bubbles v0.20.0 // indirect
25-
github.com/charmbracelet/bubbletea v1.3.0 // indirect
26-
github.com/charmbracelet/lipgloss v1.0.0 // indirect
26+
github.com/charmbracelet/bubbletea v1.3.4 // indirect
27+
github.com/charmbracelet/colorprofile v0.2.3-0.20250311203215-f60798e515dc // indirect
28+
github.com/charmbracelet/lipgloss v1.1.0 // indirect
2729
github.com/charmbracelet/x/ansi v0.8.0 // indirect
30+
github.com/charmbracelet/x/cellbuf v0.0.13-0.20250311204145-2c3ea96c31dd // indirect
2831
github.com/charmbracelet/x/exp/strings v0.0.0-20250209221203-add6d453fbb2 // indirect
2932
github.com/charmbracelet/x/term v0.2.1 // indirect
3033
github.com/cpuguy83/go-md2man/v2 v2.0.6 // indirect
@@ -52,7 +55,7 @@ require (
5255
github.com/muesli/ansi v0.0.0-20230316100256-276c6243b2f6 // indirect
5356
github.com/muesli/cancelreader v0.2.2 // indirect
5457
github.com/muesli/reflow v0.3.0 // indirect
55-
github.com/muesli/termenv v0.15.3-0.20240618155329-98d742f6907a // indirect
58+
github.com/muesli/termenv v0.16.0 // indirect
5659
github.com/muhlemmer/gu v0.3.1 // indirect
5760
github.com/pelletier/go-toml/v2 v2.2.3 // indirect
5861
github.com/pkg/sftp v1.13.9 // indirect
@@ -65,6 +68,7 @@ require (
6568
github.com/spf13/cast v1.7.1 // indirect
6669
github.com/spf13/pflag v1.0.6 // indirect
6770
github.com/subosito/gotenv v1.6.0 // indirect
71+
github.com/xo/terminfo v0.0.0-20220910002029-abceb7e1c41e // indirect
6872
github.com/yuin/goldmark v1.7.8 // indirect
6973
github.com/yuin/goldmark-emoji v1.0.4 // indirect
7074
github.com/zitadel/logging v0.6.2 // indirect

cli/go.sum

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -16,26 +16,32 @@ github.com/aymerick/douceur v0.2.0 h1:Mv+mAeH1Q+n9Fr+oyamOlAkUNPWPlA8PPGR0QAaYuP
1616
github.com/aymerick/douceur v0.2.0/go.mod h1:wlT5vV2O3h55X9m7iVYN0TBM0NH/MmbLnd30/FjWUq4=
1717
github.com/bketelsen/inclient v0.2.0 h1:EL5vLoILpeCCgVnrr61YAJVc9OinYrC+lRNM5w0Z4eM=
1818
github.com/bketelsen/inclient v0.2.0/go.mod h1:vXG1/L1e65+OEXW8kvFnHcpEG5LoZkhP8Oa2gsU+WyU=
19+
github.com/bketelsen/toolbox v0.9.0 h1:ZPaM85ROv69+rq0JTJ5aEQCN+PqPnDF2OweffWA4YEk=
20+
github.com/bketelsen/toolbox v0.9.0/go.mod h1:XGfiiH/z6wN/iwKmVSKoiv6Iji0r3rnjHY+dkM+ArhM=
1921
github.com/bmatcuk/doublestar/v4 v4.8.1 h1:54Bopc5c2cAvhLRAzqOGCYHYyhcDHsFF4wWIR5wKP38=
2022
github.com/bmatcuk/doublestar/v4 v4.8.1/go.mod h1:xBQ8jztBU6kakFMg+8WGxn0c6z1fTSPVIjEY1Wr7jzc=
2123
github.com/catppuccin/go v0.3.0 h1:d+0/YicIq+hSTo5oPuRi5kOpqkVA5tAsU6dNhvRu+aY=
2224
github.com/catppuccin/go v0.3.0/go.mod h1:8IHJuMGaUUjQM82qBrGNBv7LFq6JI3NnQCF6MOlZjpc=
2325
github.com/charmbracelet/bubbles v0.20.0 h1:jSZu6qD8cRQ6k9OMfR1WlM+ruM8fkPWkHvQWD9LIutE=
2426
github.com/charmbracelet/bubbles v0.20.0/go.mod h1:39slydyswPy+uVOHZ5x/GjwVAFkCsV8IIVy+4MhzwwU=
25-
github.com/charmbracelet/bubbletea v1.3.0 h1:fPMyirm0u3Fou+flch7hlJN9krlnVURrkUVDwqXjoAc=
26-
github.com/charmbracelet/bubbletea v1.3.0/go.mod h1:eTaHfqbIwvBhFQM/nlT1NsGc4kp8jhF8LfUK67XiTDM=
27+
github.com/charmbracelet/bubbletea v1.3.4 h1:kCg7B+jSCFPLYRA52SDZjr51kG/fMUEoPoZrkaDHyoI=
28+
github.com/charmbracelet/bubbletea v1.3.4/go.mod h1:dtcUCyCGEX3g9tosuYiut3MXgY/Jsv9nKVdibKKRRXo=
29+
github.com/charmbracelet/colorprofile v0.2.3-0.20250311203215-f60798e515dc h1:4pZI35227imm7yK2bGPcfpFEmuY1gc2YSTShr4iJBfs=
30+
github.com/charmbracelet/colorprofile v0.2.3-0.20250311203215-f60798e515dc/go.mod h1:X4/0JoqgTIPSFcRA/P6INZzIuyqdFY5rm8tb41s9okk=
2731
github.com/charmbracelet/glamour v0.8.0 h1:tPrjL3aRcQbn++7t18wOpgLyl8wrOHUEDS7IZ68QtZs=
2832
github.com/charmbracelet/glamour v0.8.0/go.mod h1:ViRgmKkf3u5S7uakt2czJ272WSg2ZenlYEZXT2x7Bjw=
2933
github.com/charmbracelet/huh v0.6.0 h1:mZM8VvZGuE0hoDXq6XLxRtgfWyTI3b2jZNKh0xWmax8=
3034
github.com/charmbracelet/huh v0.6.0/go.mod h1:GGNKeWCeNzKpEOh/OJD8WBwTQjV3prFAtQPpLv+AVwU=
3135
github.com/charmbracelet/huh/spinner v0.0.0-20250207133237-2eba4f31bf81 h1:eSzW0o+ud+AkROByxsypoxG2diTJmdG4UiZHGB3Lddo=
3236
github.com/charmbracelet/huh/spinner v0.0.0-20250207133237-2eba4f31bf81/go.mod h1:OMLJm7px/Snis72/Fiklxm7u5tNM1/2fq2cVv4FCxv4=
33-
github.com/charmbracelet/lipgloss v1.0.0 h1:O7VkGDvqEdGi93X+DeqsQ7PKHDgtQfF8j8/O2qFMQNg=
34-
github.com/charmbracelet/lipgloss v1.0.0/go.mod h1:U5fy9Z+C38obMs+T+tJqst9VGzlOYGj4ri9reL3qUlo=
37+
github.com/charmbracelet/lipgloss v1.1.0 h1:vYXsiLHVkK7fp74RkV7b2kq9+zDLoEU4MZoFqR/noCY=
38+
github.com/charmbracelet/lipgloss v1.1.0/go.mod h1:/6Q8FR2o+kj8rz4Dq0zQc3vYf7X+B0binUUBwA0aL30=
3539
github.com/charmbracelet/log v0.4.0 h1:G9bQAcx8rWA2T3pWvx7YtPTPwgqpk7D68BX21IRW8ZM=
3640
github.com/charmbracelet/log v0.4.0/go.mod h1:63bXt/djrizTec0l11H20t8FDSvA4CRZJ1KH22MdptM=
3741
github.com/charmbracelet/x/ansi v0.8.0 h1:9GTq3xq9caJW8ZrBTe0LIe2fvfLR/bYXKTx2llXn7xE=
3842
github.com/charmbracelet/x/ansi v0.8.0/go.mod h1:wdYl/ONOLHLIVmQaxbIYEC/cRKOQyjTkowiI4blgS9Q=
43+
github.com/charmbracelet/x/cellbuf v0.0.13-0.20250311204145-2c3ea96c31dd h1:vy0GVL4jeHEwG5YOXDmi86oYw2yuYUGqz6a8sLwg0X8=
44+
github.com/charmbracelet/x/cellbuf v0.0.13-0.20250311204145-2c3ea96c31dd/go.mod h1:xe0nKWGd3eJgtqZRaN9RjMtK7xUYchjzPr7q6kcvCCs=
3945
github.com/charmbracelet/x/exp/golden v0.0.0-20240815200342-61de596daa2b h1:MnAMdlwSltxJyULnrYbkZpp4k58Co7Tah3ciKhSNo0Q=
4046
github.com/charmbracelet/x/exp/golden v0.0.0-20240815200342-61de596daa2b/go.mod h1:wDlXFlCrmJ8J+swcL/MnGUuYnqgQdW9rhSD61oNMb6U=
4147
github.com/charmbracelet/x/exp/strings v0.0.0-20250209221203-add6d453fbb2 h1:T4U0DL+XmD0D+kiUar+6CjR/bWtztHsTzwgvw62kyPY=
@@ -117,8 +123,8 @@ github.com/muesli/cancelreader v0.2.2 h1:3I4Kt4BQjOR54NavqnDogx/MIoWBFa0StPA8ELU
117123
github.com/muesli/cancelreader v0.2.2/go.mod h1:3XuTXfFS2VjM+HTLZY9Ak0l6eUKfijIfMUZ4EgX0QYo=
118124
github.com/muesli/reflow v0.3.0 h1:IFsN6K9NfGtjeggFP+68I4chLZV2yIKsXJFNZ+eWh6s=
119125
github.com/muesli/reflow v0.3.0/go.mod h1:pbwTDkVPibjO2kyvBQRBxTWEEGDGq0FlB1BIKtnHY/8=
120-
github.com/muesli/termenv v0.15.3-0.20240618155329-98d742f6907a h1:2MaM6YC3mGu54x+RKAA6JiFFHlHDY1UbkxqppT7wYOg=
121-
github.com/muesli/termenv v0.15.3-0.20240618155329-98d742f6907a/go.mod h1:hxSnBBYLK21Vtq/PHd0S2FYCxBXzBua8ov5s1RobyRQ=
126+
github.com/muesli/termenv v0.16.0 h1:S5AlUN9dENB57rsbnkPyfdGuWIlkmzJjbFf0Tf5FWUc=
127+
github.com/muesli/termenv v0.16.0/go.mod h1:ZRfOIKPFDYQoDFF4Olj7/QJbW60Ol/kL1pU3VfY/Cnk=
122128
github.com/muhlemmer/gu v0.3.1 h1:7EAqmFrW7n3hETvuAdmFmn4hS8W+z3LgKtrnow+YzNM=
123129
github.com/muhlemmer/gu v0.3.1/go.mod h1:YHtHR+gxM+bKEIIs7Hmi9sPT3ZDUvTN/i88wQpZkrdM=
124130
github.com/muhlemmer/httpforwarded v0.1.0 h1:x4DLrzXdliq8mprgUMR0olDvHGkou5BJsK/vWUetyzY=
@@ -165,6 +171,8 @@ github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOf
165171
github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
166172
github.com/subosito/gotenv v1.6.0 h1:9NlTDc1FTs4qu0DDq7AEtTPNw6SVm7uBMsUCUjABIf8=
167173
github.com/subosito/gotenv v1.6.0/go.mod h1:Dk4QP5c2W3ibzajGcXpNraDfq2IrhjMIvMSWPKKo0FU=
174+
github.com/xo/terminfo v0.0.0-20220910002029-abceb7e1c41e h1:JVG44RsyaB9T2KIHavMF/ppJZNG9ZpyihvCd0w101no=
175+
github.com/xo/terminfo v0.0.0-20220910002029-abceb7e1c41e/go.mod h1:RbqR21r5mrJuqunuUZ/Dhy/avygyECGrLceyNeo4LiM=
168176
github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY=
169177
github.com/yuin/goldmark v1.7.1/go.mod h1:uzxRWxtg69N339t3louHJ7+O03ezfj6PlliRlaOzY1E=
170178
github.com/yuin/goldmark v1.7.8 h1:iERMLn0/QJeHFhxSt3p6PeN9mGnvIKSpG9YYorDMnic=

0 commit comments

Comments
 (0)