lint: adopt org-standard .golangci.yml and golangci-lint v2.12.2 (closes #14)
All checks were successful
check / check (push) Successful in 55s
All checks were successful
check / check (push) Successful in 55s
backend/.golangci.yml declared version: "2" on line 1 but used the golangci-lint v1 schema below it: a top-level linters-settings key and an issues.exclude-use-default key that does not exist in v2. Under v2 that config does not validate, so every threshold in it was inert -- lll fell back to its 120-column default rather than the intended 88, and funlen, cyclop and dupl were not applied at all. The `0 issues.` result the repo has been relying on was therefore meaningless. Replace it with the org-standard file verbatim (sha256 021cc83f4e6fc7c31b95b34b846723dfcf20b66b7baeea1dc40406e643346bcb) and repoint the golangci-lint pin in Dockerfile.backend from v2.7.2 to the org-standard v2.12.2. Run `golangci-lint config verify` as the first step of the backend lint target so this class of silent breakage fails the build in future instead of degrading to default thresholds. It now runs everywhere `make check` runs, including the pre-commit hook and the Docker build. With the config actually loading, lll reports server.go:65 at 93 columns. Fix it, plus the two other over-long lines called out on the issue (server.go:97 at 81 and reportbuf.go:166 at 88) which are inside the 88-column lint limit but over the 77-column hard wrap in the Go styleguide. All three were long //nolint justifications on the code line; move the justification into a preceding comment block and leave a short directive behind. No suppression is added or widened, and .golangci.yml is not touched after the copy. Verified: `cd backend && make check` reports `0 issues.`, root `make check` passes, and `make docker` builds green against the pinned v2.12.2.
This commit is contained in:
@@ -163,7 +163,9 @@ func (b *Buffer) writeFile(data []byte) {
|
||||
name := fmt.Sprintf("reports-%s.jsonl.zst", ts)
|
||||
path := filepath.Join(b.dataDir, name)
|
||||
|
||||
f, err := os.OpenFile( //nolint:gosec // path built from controlled dataDir + timestamp
|
||||
// path is built from the operator-supplied dataDir plus a
|
||||
// generated timestamp, so it carries no external input.
|
||||
f, err := os.OpenFile( //nolint:gosec // see comment above
|
||||
path,
|
||||
os.O_WRONLY|os.O_CREATE|os.O_EXCL,
|
||||
filePerms,
|
||||
|
||||
@@ -62,7 +62,10 @@ func New(
|
||||
OnStart: func(_ context.Context) error {
|
||||
s.startupTime = time.Now().UTC()
|
||||
|
||||
go func() { //nolint:contextcheck // fx OnStart ctx is startup-only; run() creates its own
|
||||
// The fx OnStart context is scoped to startup and is
|
||||
// cancelled once the hook returns; run() derives its
|
||||
// own context instead of inheriting this one.
|
||||
go func() { //nolint:contextcheck // see comment above
|
||||
s.run()
|
||||
}()
|
||||
|
||||
@@ -94,7 +97,9 @@ func (s *Server) run() {
|
||||
}
|
||||
|
||||
func (s *Server) serve() int {
|
||||
var ctx context.Context //nolint:wsl // ctx must be declared before multi-assign
|
||||
// Declared up front because the multi-assign below also writes
|
||||
// s.cancelFunc, so := cannot be used.
|
||||
var ctx context.Context //nolint:wsl // see comment above
|
||||
|
||||
ctx, s.cancelFunc = context.WithCancel(
|
||||
context.Background(),
|
||||
|
||||
Reference in New Issue
Block a user