Skip to content

fix(ci): o lint volta a rodar sob Go 1.27 - #43

Merged
lvcas-dotcom merged 1 commit into
mainfrom
fix/lint-no-go-1.27
Aug 28, 2026
Merged

fix(ci): o lint volta a rodar sob Go 1.27#43
lvcas-dotcom merged 1 commit into
mainfrom
fix/lint-no-go-1.27

Conversation

@lvcas-dotcom

Copy link
Copy Markdown
Owner

Todo job pede go-version: stable com check-latest, então o CI passou a usar Go 1.27 no dia em que ele saiu. O lint morreu com pânico dentro do staticcheck, construindo IR do pacote internal/poll — biblioteca padrão, isInitialPkg: false. Nada neste repositório mudou, e nada aqui é capaz de consertar aquele stack trace.

A causa é de versão. O Go 1.27 trouxe inicializador de struct referenciando campo embutido diretamente, e a biblioteca padrão passou a usar isso. O staticcheck só aprendeu essa sintaxe na 2026.2 (honnef.co/go/tools v0.8.0); a v2.12.2 carregava a v0.7.0, cujo construtor de IR não reconhece o *ast.KeyValueExpr que a construção nova produz e entra em pânico. A golangci-lint v2.13.1 é a primeira release que carrega a v0.8.0.

Verificado com a condição do CI reproduzida, e não só pelas notas de release: golangci-lint v2.13.1 compilada com go1.27.0, rodando sob GOTOOLCHAIN=go1.27.0, devolve "0 issues" nos três passes do make lint — sem tag, com integration e com benchmark. go build, go test e go vet também passam sob 1.27.

A mesma versão está fixada no release.yml, que roda make lint antes de publicar. Sem os dois, o próximo release morre no mesmo pânico.

What changes, and why

How it was verified

  • make fmt && make lint && make test
  • make test-integration (if it touches SQL, the catalog, or validation)

Checks

  • Nothing writes to the target database
  • No row value can reach output, logs or errors
  • New behaviour has a change under openspec/, validating with --strict
  • A new dependency, if any, is justified with measured numbers

Todo job pede `go-version: stable` com `check-latest`, então o CI passou a
usar Go 1.27 no dia em que ele saiu. O lint morreu com pânico dentro do
staticcheck, construindo IR do pacote `internal/poll` — biblioteca padrão,
`isInitialPkg: false`. Nada neste repositório mudou, e nada aqui é capaz de
consertar aquele stack trace.

A causa é de versão. O Go 1.27 trouxe inicializador de struct referenciando
campo embutido diretamente, e a biblioteca padrão passou a usar isso. O
staticcheck só aprendeu essa sintaxe na 2026.2 (honnef.co/go/tools v0.8.0);
a v2.12.2 carregava a v0.7.0, cujo construtor de IR não reconhece o
`*ast.KeyValueExpr` que a construção nova produz e entra em pânico. A
golangci-lint v2.13.1 é a primeira release que carrega a v0.8.0.

Verificado com a condição do CI reproduzida, e não só pelas notas de
release: golangci-lint v2.13.1 compilada com go1.27.0, rodando sob
GOTOOLCHAIN=go1.27.0, devolve "0 issues" nos três passes do `make lint` —
sem tag, com `integration` e com `benchmark`. `go build`, `go test` e
`go vet` também passam sob 1.27.

A mesma versão está fixada no release.yml, que roda `make lint` antes de
publicar. Sem os dois, o próximo release morre no mesmo pânico.
@lvcas-dotcom
lvcas-dotcom merged commit 1298414 into main Aug 28, 2026
10 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant