Compare commits
2 Commits
cd34e52064
...
fix/117-bo
| Author | SHA1 | Date | |
|---|---|---|---|
| db933f32a6 | |||
| 9347a2838b |
@@ -1,5 +1,9 @@
|
|||||||
version: "2"
|
version: "2"
|
||||||
|
|
||||||
|
# Config schema uses the golangci-lint v2 layout (settings live under
|
||||||
|
# linters.settings, not top-level linters-settings) so that the
|
||||||
|
# thresholds below are actually applied by golangci-lint >= v2.
|
||||||
|
|
||||||
run:
|
run:
|
||||||
timeout: 5m
|
timeout: 5m
|
||||||
modules-download-mode: readonly
|
modules-download-mode: readonly
|
||||||
@@ -12,7 +16,6 @@ linters:
|
|||||||
- depguard # Dependency allow/block lists
|
- 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
|
- wsl # Deprecated, replaced by wsl_v5
|
||||||
- gomodguard # Deprecated, replaced by gomodguard_v2
|
|
||||||
- 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
|
||||||
settings:
|
settings:
|
||||||
@@ -25,25 +28,7 @@ linters:
|
|||||||
max-complexity: 15
|
max-complexity: 15
|
||||||
dupl:
|
dupl:
|
||||||
threshold: 100
|
threshold: 100
|
||||||
exclusions:
|
|
||||||
generated: lax
|
|
||||||
paths:
|
|
||||||
- third_party$
|
|
||||||
- builtin$
|
|
||||||
- examples$
|
|
||||||
|
|
||||||
issues:
|
issues:
|
||||||
max-issues-per-linter: 0
|
max-issues-per-linter: 0
|
||||||
max-same-issues: 0
|
max-same-issues: 0
|
||||||
|
|
||||||
formatters:
|
|
||||||
enable:
|
|
||||||
- gofmt
|
|
||||||
- gofumpt
|
|
||||||
- goimports
|
|
||||||
exclusions:
|
|
||||||
generated: lax
|
|
||||||
paths:
|
|
||||||
- third_party$
|
|
||||||
- builtin$
|
|
||||||
- examples$
|
|
||||||
|
|||||||
19
TODO.md
19
TODO.md
@@ -25,12 +25,21 @@ confirm make check still passes.
|
|||||||
|
|
||||||
# Completed Steps
|
# Completed Steps
|
||||||
|
|
||||||
|
- 2026-08-09: `script/bootstrap` now installs the pinned `golangci-lint`
|
||||||
|
and `goimports` unconditionally instead of only when the binary is
|
||||||
|
absent from `PATH`, so the commit pins actually take effect on
|
||||||
|
already-provisioned machines; it also warns when `PATH` resolves
|
||||||
|
either tool to a copy outside the directory `go install` writes to.
|
||||||
|
The `missing` presence check is retained for `git`, `make`, and `go`
|
||||||
|
(#117)
|
||||||
- 2026-08-07: golangci-lint bumped to v2.12.2 (commit-pinned installs
|
- 2026-08-07: golangci-lint bumped to v2.12.2 (commit-pinned installs
|
||||||
in `Dockerfile` and `script/bootstrap`); `.golangci.yml` migrated to
|
in `Dockerfile` and `script/bootstrap`); `.golangci.yml` set to the
|
||||||
the v2 schema (owner-authorized; becomes the new org canonical), so
|
org-standard v2-schema config used across the org's repos
|
||||||
the lll/funlen/cyclop/dupl thresholds now apply; deprecated
|
(owner-authorized; same file is being landed as canonical via prompts
|
||||||
`gomodguard` disabled in favor of `gomodguard_v2`; fixed the
|
PR #24), with settings under `linters.settings` so the
|
||||||
resulting `goconst`, `dupl`, and `lll` findings
|
lll/funlen/cyclop/dupl thresholds apply; fixed the resulting
|
||||||
|
`goconst`, `dupl`, and `lll` findings; the informational `gomodguard`
|
||||||
|
deprecation warning under this config is accepted
|
||||||
- 2026-07-07 Adopted scripts-to-rule-them-all: `script/` entrypoints,
|
- 2026-07-07 Adopted scripts-to-rule-them-all: `script/` entrypoints,
|
||||||
Makefile shims, README Entrypoints section
|
Makefile shims, README Entrypoints section
|
||||||
- 2026-02-20: iterative DNS resolver implemented; tests made hermetic
|
- 2026-02-20: iterative DNS resolver implemented; tests made hermetic
|
||||||
|
|||||||
@@ -1,10 +1,13 @@
|
|||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
# script/bootstrap: install all dependencies needed to build and develop
|
# script/bootstrap: install all dependencies needed to build and develop
|
||||||
# this repo. Idempotent: every install is guarded by a check so already
|
# this repo. Base tooling (git, make, go) comes from nix, apt, brew, or
|
||||||
# installed tools are skipped. Base tooling comes from nix, apt, brew,
|
# apk (detected in that order) and is installed only when absent;
|
||||||
# or apk (detected in that order); assumes nothing is present.
|
# assumes nothing is present. golangci-lint and goimports are always
|
||||||
# golangci-lint and goimports are installed via `go install` at the same
|
# (re)installed via `go install` at the same pinned commits the
|
||||||
# pinned commits the Dockerfile uses (never "latest").
|
# Dockerfile uses (never "latest") -- a presence check cannot tell the
|
||||||
|
# pinned build from an arbitrary one already on PATH, so guarding them
|
||||||
|
# would make the pins inert. Idempotent either way: running this twice
|
||||||
|
# succeeds both times and leaves the same result.
|
||||||
set -eu
|
set -eu
|
||||||
|
|
||||||
ROOT="$(cd "$(dirname "$0")/.." && pwd -P)"
|
ROOT="$(cd "$(dirname "$0")/.." && pwd -P)"
|
||||||
@@ -62,6 +65,31 @@ missing() {
|
|||||||
! command -v "$1" >/dev/null 2>&1
|
! command -v "$1" >/dev/null 2>&1
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# go_bin_dir: directory `go install` writes binaries to.
|
||||||
|
go_bin_dir() {
|
||||||
|
gobin="$(go env GOBIN)"
|
||||||
|
if [ -n "$gobin" ]; then
|
||||||
|
echo "$gobin"
|
||||||
|
else
|
||||||
|
echo "$(go env GOPATH)/bin"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# warn_if_shadowed <tool> <dir>: the pinned build was just installed
|
||||||
|
# into <dir>. If PATH resolves <tool> anywhere else, that other copy is
|
||||||
|
# what `make lint` and `make fmt` will actually run, and it is not the
|
||||||
|
# pinned version. Warn loudly rather than failing, since the fix is the
|
||||||
|
# user's PATH and not anything this script can do.
|
||||||
|
warn_if_shadowed() {
|
||||||
|
resolved="$(command -v "$1" 2>/dev/null || true)"
|
||||||
|
if [ "$resolved" != "$2/$1" ]; then
|
||||||
|
echo "bootstrap: WARNING: installed pinned $1 to $2/$1, but PATH" >&2
|
||||||
|
echo "bootstrap: WARNING: resolves $1 to ${resolved:-(not on PATH)};" >&2
|
||||||
|
echo "bootstrap: WARNING: put $2 first on PATH or lint results will" >&2
|
||||||
|
echo "bootstrap: WARNING: not match CI." >&2
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
main() {
|
main() {
|
||||||
cd "$ROOT"
|
cd "$ROOT"
|
||||||
|
|
||||||
@@ -69,10 +97,17 @@ main() {
|
|||||||
if missing make; then pkg_install gnumake make make make; fi
|
if missing make; then pkg_install gnumake make make make; fi
|
||||||
if missing go; then pkg_install go golang go go; fi
|
if missing go; then pkg_install go golang go go; fi
|
||||||
|
|
||||||
# Lint/format tools, pinned via go install (installs into
|
# Lint/format tools, pinned via go install. These are installed
|
||||||
# "$(go env GOPATH)/bin"; ensure that is on your PATH).
|
# unconditionally: `command -v` only proves *some* build is on PATH,
|
||||||
if missing golangci-lint; then go install "$GOLANGCI_LINT_REF"; fi
|
# and a wrong golangci-lint either cannot parse our v2-schema
|
||||||
if missing goimports; then go install "$GOIMPORTS_REF"; fi
|
# .golangci.yml at all or silently disagrees with CI. Installing at
|
||||||
|
# a fixed commit ref is idempotent and cheap with a warm module
|
||||||
|
# cache, so there is nothing to save by skipping it.
|
||||||
|
GOBIN_DIR="$(go_bin_dir)"
|
||||||
|
go install "$GOLANGCI_LINT_REF"
|
||||||
|
go install "$GOIMPORTS_REF"
|
||||||
|
warn_if_shadowed golangci-lint "$GOBIN_DIR"
|
||||||
|
warn_if_shadowed goimports "$GOBIN_DIR"
|
||||||
|
|
||||||
go mod download
|
go mod download
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user