Compare commits
1 Commits
fix/115-ci
...
cd34e52064
| Author | SHA1 | Date | |
|---|---|---|---|
| cd34e52064 |
@@ -1,9 +1,5 @@
|
|||||||
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
|
||||||
@@ -16,6 +12,7 @@ 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:
|
||||||
@@ -28,7 +25,25 @@ 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$
|
||||||
|
|||||||
21
Dockerfile
21
Dockerfile
@@ -15,25 +15,8 @@ RUN go mod download
|
|||||||
|
|
||||||
COPY . .
|
COPY . .
|
||||||
|
|
||||||
# Run all checks - build fails if any check fails.
|
# Run all checks - build fails if any check fails
|
||||||
#
|
RUN make check
|
||||||
# CHECK_EPOCH is a cache-busting build argument. Without it, an
|
|
||||||
# unchanged tree leaves this layer's cache key identical and Docker
|
|
||||||
# serves the previous verdict instead of re-running the suite, so the
|
|
||||||
# build reports a green it did not earn. A build argument's value
|
|
||||||
# participates in the cache key of later instructions in the stage even
|
|
||||||
# when they do not reference it, so a fresh value busts this layer
|
|
||||||
# either way. It is expanded into the command deliberately: that makes
|
|
||||||
# the invalidation a property of the command string itself rather than
|
|
||||||
# of how a given builder treats unreferenced args, and it surfaces the
|
|
||||||
# epoch in the build log as a diagnostic.
|
|
||||||
#
|
|
||||||
# Placing the ARG here and nowhere earlier keeps everything above it
|
|
||||||
# (toolchain install, go mod download) cached, so only the check and the
|
|
||||||
# steps after it re-run. script/cibuild passes a fresh value per run; a
|
|
||||||
# plain `docker build` without it caches as before.
|
|
||||||
ARG CHECK_EPOCH
|
|
||||||
RUN echo "check epoch: ${CHECK_EPOCH}" && make check
|
|
||||||
|
|
||||||
# Build the binary
|
# Build the binary
|
||||||
RUN make build
|
RUN make build
|
||||||
|
|||||||
@@ -393,10 +393,7 @@ them. We provide:
|
|||||||
- `script/check` — run test, lint, and fmt-check
|
- `script/check` — run test, lint, and fmt-check
|
||||||
- `script/docker` — build the Docker image tagged via
|
- `script/docker` — build the Docker image tagged via
|
||||||
`script/projectname`
|
`script/projectname`
|
||||||
- `script/cibuild` — CI entrypoint: `docker build .` with a fresh
|
- `script/cibuild` — CI entrypoint: plain `docker build .`
|
||||||
`CHECK_EPOCH` build argument, so the Dockerfile's `make check` layer
|
|
||||||
is never served from the cache and a green build always means the
|
|
||||||
checks ran on this invocation
|
|
||||||
- `script/precommit` — run by the git pre-commit hook; `go mod tidy`
|
- `script/precommit` — run by the git pre-commit hook; `go mod tidy`
|
||||||
guard, then `script/check`
|
guard, then `script/check`
|
||||||
- `script/install-precommit` — install the git pre-commit hook
|
- `script/install-precommit` — install the git pre-commit hook
|
||||||
|
|||||||
22
TODO.md
22
TODO.md
@@ -25,24 +25,12 @@ confirm make check still passes.
|
|||||||
|
|
||||||
# Completed Steps
|
# Completed Steps
|
||||||
|
|
||||||
- 2026-08-09: `script/cibuild` can no longer report a green it did not
|
|
||||||
earn. The Dockerfile declares `ARG CHECK_EPOCH` immediately above the
|
|
||||||
check step and expands it into the `RUN` command, and `script/cibuild`
|
|
||||||
passes a fresh `$(date +%s%N)` per invocation, so the `make check`
|
|
||||||
layer is always re-executed while the pinned toolchain install and
|
|
||||||
`go mod download` stay cached. Verified by experiment: before the fix
|
|
||||||
a second run on an unchanged tree returned in 283 ms with the check
|
|
||||||
layer `CACHED`; after it the check runs every time, and a deliberately
|
|
||||||
planted always-failing test made the build fail with exactly that
|
|
||||||
test's message
|
|
||||||
- 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` set to the
|
in `Dockerfile` and `script/bootstrap`); `.golangci.yml` migrated to
|
||||||
org-standard v2-schema config used across the org's repos
|
the v2 schema (owner-authorized; becomes the new org canonical), so
|
||||||
(owner-authorized; same file is being landed as canonical via prompts
|
the lll/funlen/cyclop/dupl thresholds now apply; deprecated
|
||||||
PR #24), with settings under `linters.settings` so the
|
`gomodguard` disabled in favor of `gomodguard_v2`; fixed the
|
||||||
lll/funlen/cyclop/dupl thresholds apply; fixed the resulting
|
resulting `goconst`, `dupl`, and `lll` findings
|
||||||
`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,18 +1,13 @@
|
|||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
# script/cibuild: run the CI build. The Dockerfile runs make check, and
|
# script/cibuild: run the CI build. The Dockerfile runs make check, so
|
||||||
# the CHECK_EPOCH build argument below is fresh on every invocation, so
|
# a successful build implies all checks pass.
|
||||||
# the check layer is never served from the Docker layer cache: a
|
|
||||||
# successful build means the checks were executed and passed on this
|
|
||||||
# run, not on some earlier one. Only the check step and the steps after
|
|
||||||
# it are invalidated; the toolchain install and go mod download stay
|
|
||||||
# cached.
|
|
||||||
set -eu
|
set -eu
|
||||||
|
|
||||||
ROOT="$(cd "$(dirname "$0")/.." && pwd -P)"
|
ROOT="$(cd "$(dirname "$0")/.." && pwd -P)"
|
||||||
|
|
||||||
main() {
|
main() {
|
||||||
cd "$ROOT"
|
cd "$ROOT"
|
||||||
docker build --build-arg CHECK_EPOCH="$(date +%s%N)" .
|
docker build .
|
||||||
}
|
}
|
||||||
|
|
||||||
main "$@"
|
main "$@"
|
||||||
|
|||||||
Reference in New Issue
Block a user