Make the CI gate execute the checks it reports on (closes #119)
All checks were successful
check / check (push) Successful in 3m0s
All checks were successful
check / check (push) Successful in 3m0s
The check workflow ran `script/cibuild`, a plain `docker build .`. With a warm layer cache the lint and builder stages replayed instead of running, so a commit could report "Successful in 4s" without being formatted, linted, tested, or built. Squash-merging an already-built branch onto `next` hits exactly that path, so no merge was actually validated. The workflow now writes `.ci-fingerprint` into the build context: the hash of the last commit that touched the context. Any commit that changes code gets a new value, invalidates the `COPY . .` layer of both check stages, and really runs `make fmt-check`, `make lint`, `make test` and `make build`. A docs-only commit leaves it unchanged and still replays from cache in seconds, as `.dockerignore` already intends. The module download layer sits above `COPY . .` and stays cached either way, so this is cheaper than a scoped `--no-cache-filter`. `script/cibuild` is a model script shared across repos and is left untouched. The second half of the problem was that Gitea cancels the in-flight run when a newer commit lands on the same branch and records the cancellation as `failure`, marking commits red that were never tested. That cancellation is unconditional server-side for push events, so the superseding run now rewrites the exact `Has been cancelled` status to `skipped`. Genuine failures are never touched.
This commit is contained in:
@@ -12,7 +12,11 @@ WORKDIR /src
|
||||
COPY go.mod go.sum ./
|
||||
RUN go mod download
|
||||
|
||||
# Copy source code
|
||||
# Copy source code. In CI the context also carries .ci-fingerprint, whose
|
||||
# value changes with every commit that touches the build context (see
|
||||
# .gitea/workflows/check.yml). That invalidates this layer, so the checks
|
||||
# below cannot report success by replaying a cached pass. Do not add it to
|
||||
# .dockerignore.
|
||||
COPY . .
|
||||
|
||||
# Run formatting check and linter
|
||||
@@ -36,7 +40,8 @@ WORKDIR /build
|
||||
COPY go.mod go.sum ./
|
||||
RUN go mod download
|
||||
|
||||
# Copy source code
|
||||
# Copy source code, including the .ci-fingerprint cache barrier described in
|
||||
# the lint stage above.
|
||||
COPY . .
|
||||
|
||||
# Run tests and build
|
||||
|
||||
Reference in New Issue
Block a user