1 Commits

Author SHA1 Message Date
bb19029f53 Migrate canonical .golangci.yml to gomodguard_v2 with a block list
All checks were successful
check / check (push) Successful in 9s
golangci-lint v2.12.0 deprecated gomodguard, and `linters.default: all`
enables it, so every lint run in every consuming Go repo prints a
deprecation warning. Disable the old name, which is what silences the
warning; name gomodguard_v2 in linters.enable so the settings block has
a visible owner; give it a blocked module list.

The block list restates only decisions already recorded in the Go
package defaults: zerolog, the pre-fork go-redis/redis, sergi/go-diff
and hexops/gotextdiff. Recorded rejections that repos vendoring this
file still require are deliberately absent, so a re-vendor cannot
redden a repo that has done nothing wrong.
2026-08-31 01:54:40 +00:00
3 changed files with 36 additions and 32 deletions

View File

@@ -10,13 +10,21 @@ run:
linters: linters:
default: all default: all
enable:
# Successor to the deprecated gomodguard. Named explicitly, rather than
# left to `default: all`, because it carries the module policy below.
- gomodguard_v2
disable: disable:
# Genuinely incompatible with project patterns # Genuinely incompatible with project patterns
- exhaustruct # Requires all struct fields - exhaustruct # Requires all struct fields
- depguard # Dependency allow/block lists
- godot # Requires comments to end with periods - godot # Requires comments to end with periods
- wsl # Deprecated, replaced by wsl_v5
- wrapcheck # Too verbose for internal packages - wrapcheck # Too verbose for internal packages
- varnamelen # Short names like db, id are idiomatic Go - varnamelen # Short names like db, id are idiomatic Go
# Deprecated: the warning is attached to the old name, so it is
# silenced by disabling that name, not by enabling the successor.
- wsl # Deprecated, replaced by wsl_v5
- gomodguard # Deprecated, replaced by gomodguard_v2
settings: settings:
lll: lll:
line-length: 88 line-length: 88
@@ -27,32 +35,27 @@ linters:
max-complexity: 15 max-complexity: 15
dupl: dupl:
threshold: 100 threshold: 100
depguard: # Only decisions already recorded in the Go package defaults are
# Test-support code must not be compiled into the shipped binary. A # listed here. Entries match the module path exactly (the default
# test-support package exists to hand a test privileges the program # match-type), so a differently-versioned module path is unaffected.
# itself must never have, so a file that is not a test must not import gomodguard_v2:
# one. Test files, and the files inside a package whose directory name blocked:
# ends in `test`, are where that code belongs, and are exempt. - module: github.com/rs/zerolog
# recommendations:
# The deny list below is the one part of this file a repository is - log/slog
# expected to extend, and the only part it may. depguard matches an reason: "Structured logging is stdlib log/slog."
# import path against a list of prefixes, so it cannot be told "any path - module: github.com/go-redis/redis
# whose last segment ends in test"; a repository's own test-support recommendations:
# packages have to be named here one at a time, by full import path, - github.com/redis/go-redis/v9
# under a module path that differs from repository to repository. Add reason: "Pre-fork module; use the maintained go-redis v9."
# them; change nothing else. - module: github.com/sergi/go-diff
rules: recommendations:
test-support: - github.com/aymanbagabas/go-udiff
list-mode: lax reason: "No unified diff output; use go-udiff."
files: - module: github.com/hexops/gotextdiff
- "$all" recommendations:
- "!$test" - github.com/aymanbagabas/go-udiff
- "!**/*test/**" reason: "Unmaintained fork; use go-udiff."
deny:
- pkg: net/http/httptest
desc: >-
Test-support code belongs in test files and in packages whose
directory name ends in test, not in the shipped binary.
issues: issues:
max-issues-per-linter: 0 max-issues-per-linter: 0

View File

@@ -21,6 +21,11 @@ fmt-check, and commit.
# Completed Steps # Completed Steps
- 2026-08-31: Migrated the canonical `.golangci.yml` from the deprecated
`gomodguard` to `gomodguard_v2`: the old linter is disabled by name (which is
what silences the deprecation warning), the successor is named explicitly in
`linters.enable`, and it carries a `blocked` module list drawn only from
decisions already recorded in the Go package defaults.
- 2026-08-07: Set the canonical `.golangci.yml` to the org-standard v2-schema - 2026-08-07: Set the canonical `.golangci.yml` to the org-standard v2-schema
config already deployed byte-identical across the org's Go repos (settings config already deployed byte-identical across the org's Go repos (settings
under `linters.settings` so thresholds like lll/funlen/cyclop/dupl actually under `linters.settings` so thresholds like lll/funlen/cyclop/dupl actually

View File

@@ -269,11 +269,7 @@ style conventions are in separate documents:
byte-identical, so that no repo can quietly loosen its own linting. Linter byte-identical, so that no repo can quietly loosen its own linting. Linter
configuration changes are made to the canonical copy in the `prompts` repo and configuration changes are made to the canonical copy in the `prompts` repo and
reach consuming repos by re-vendoring; an agent may open a PR against reach consuming repos by re-vendoring; an agent may open a PR against
canonical, which only the user merges. One list is exempt from byte-identity, canonical, which only the user merges. The canonical golangci-lint version is
because it cannot be written once for every repo: the `deny` list of the
`test-support` depguard rule, where a repo names its own test-support packages
by full import path. A repo adds entries there and changes nothing else, and a
re-vendor carries its entries forward. The canonical golangci-lint version is
v2.12.2 (released 2026-05-06), installed commit-pinned via v2.12.2 (released 2026-05-06), installed commit-pinned via
`go install github.com/golangci/golangci-lint/v2/cmd/golangci-lint@c0d3ddc9cf3faa61a4e378e879ece580256d76e5`. `go install github.com/golangci/golangci-lint/v2/cmd/golangci-lint@c0d3ddc9cf3faa61a4e378e879ece580256d76e5`.