Add gitbay CI: build, test, lint !6

merged merged by cmc on 2026-09-11 15:13 UTC · krz/skunky-art:ci/pipeline into main

8 files changed, +25 −15

Layout: unified · split

.gitbay/ci.yml added +19
@@ -0,0 +1,19 @@
1# gitbay CI. One build per push per job; each step runs with `sh -c` and the
2# job stops at the first failure. The image is the runner's default, named
3# here so a bump is a deliberate change.
4jobs:
5 build:
6 image: localhost/gitbay-ci:2
7 steps:
8 - go build ./...
9 - go vet ./...
10 test:
11 image: localhost/gitbay-ci:2
12 steps:
13 - go test ./... -count=1 -race -timeout 10m
14 # Pinned, and run through `go run` so the image needs no linter of its own.
15 # The first run on a runner compiles it; later runs hit the module cache.
16 lint:
17 image: localhost/gitbay-ci:2
18 steps:
19 - go run github.com/golangci/golangci-lint/v2/cmd/golangci-lint@v2.13.2 run ./...
.mailmap deleted −4
@@ -1,4 +0,0 @@
1lost+skunk <skunky@ebloid.ru> <skunky@macaw.me>
2lost+skunk <skunky@ebloid.ru> <me@lost-skunk.cc>
3lost+skunk <skunky@ebloid.ru> <skunky@noreply.git.macaw.me>
4lost+skunk <skunky@ebloid.ru> skunky <skunky@ebloid.ru>
app/i18n.go +1 −1
@@ -87,7 +87,7 @@ func ResolveLang(acceptLanguage string) string {
87 return DefaultLang 87 return DefaultLang
88 } 88 }
89 89
90 for _, part := range strings.Split(acceptLanguage, ",") { 90 for part := range strings.SplitSeq(acceptLanguage, ",") {
91 tag := strings.TrimSpace(part) 91 tag := strings.TrimSpace(part)
92 if i := strings.Index(tag, ";"); i >= 0 { 92 if i := strings.Index(tag, ";"); i >= 0 {
93 tag = tag[:i] 93 tag = tag[:i]
app/i18n_test.go +1 −1
@@ -27,7 +27,7 @@ func TestEnglishCatalogueCoversEveryKeyTheTemplatesUse(t *testing.T) {
27 } 27 }
28 28
29 for _, f := range files { 29 for _, f := range files {
30 src, err := os.ReadFile(f) 30 src, err := os.ReadFile(f) //nolint:gosec // G304: the test reads the repository's own template files
31 if err != nil { 31 if err != nil {
32 t.Fatalf("read %s: %v", f, err) 32 t.Fatalf("read %s: %v", f, err)
33 } 33 }
app/parsers.go +3 −3
@@ -79,9 +79,6 @@ func (s skunkyart) ParseComments(c devianter.Comments, daError devianter.Error)
79 return cmmts.String() 79 return cmmts.String()
80} 80}
81 81
82// DeviationList renders devs as an HTML grid, or as an Atom feed when the
83// request asked for one and allowAtom permits it. NSFW entries are dropped
84// unless the instance allows them. Passing content adds a navigation bar.
85// VisibleDeviation reports whether a deviation may be shown by this instance. 82// VisibleDeviation reports whether a deviation may be shown by this instance.
86// 83//
87// Both the HTML listing and the JSON API ask this, deliberately: an API that 84// Both the HTML listing and the JSON API ask this, deliberately: an API that
@@ -95,6 +92,9 @@ func VisibleDeviation(d *devianter.Deviation) bool {
95 return !d.NSFW || CFG.Nsfw 92 return !d.NSFW || CFG.Nsfw
96} 93}
97 94
95// DeviationList renders devs as an HTML grid, or as an Atom feed when the
96// request asked for one and allowAtom permits it. NSFW entries are dropped
97// unless the instance allows them. Passing content adds a navigation bar.
98func (s skunkyart) DeviationList(devs []devianter.Deviation, allowAtom bool, content ...DeviationList) string { 98func (s skunkyart) DeviationList(devs []devianter.Deviation, allowAtom bool, content ...DeviationList) string {
99 if s.Atom && s.Page > 1 { 99 if s.Atom && s.Page > 1 {
100 s.ReturnHTTPError(400) 100 s.ReturnHTTPError(400)
app/stat-freebsd.go −1
@@ -1,5 +1,4 @@
1//go:build freebsd 1//go:build freebsd
2// +build freebsd
3 2
4package app 3package app
5 4
app/stat.go −1
@@ -1,5 +1,4 @@
1//go:build !freebsd && !darwin 1//go:build !freebsd && !darwin
2// +build !freebsd,!darwin
3 2
4package app 3package app
5 4
app/util.go +1 −4
@@ -393,10 +393,7 @@ func (s skunkyart) NavBase(c DeviationList) string {
393 // i reached 1, so page one rendered no numbers at all. With nothing before it 393 // i reached 1, so page one rendered no numbers at all. With nothing before it
394 // to link back to and no further page to link on, the whole panel came out as 394 // to link back to and no further page to link on, the whole panel came out as
395 // a bare <br>. 395 // a bare <br>.
396 last := c.Pages 396 last := max(c.Pages, p)
397 if p > last {
398 last = p
399 }
400 397
401 for i, x := p-6, 0; (i <= last && i <= p+6) && x < 12; i++ { 398 for i, x := p-6, 0; (i <= last && i <= p+6) && x < 12; i++ {
402 if i > 0 { 399 if i > 0 {