Compare commits
2
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
39d531c501 | ||
|
|
9b3d7326ce |
+12
-5
@@ -9,13 +9,20 @@ RUN make fmt-check
|
|||||||
# Called directly: make lint is itself a docker build of this stage.
|
# Called directly: make lint is itself a docker build of this stage.
|
||||||
RUN golangci-lint run --config .golangci.yml ./...
|
RUN golangci-lint run --config .golangci.yml ./...
|
||||||
|
|
||||||
# Test stage: run full test suite
|
# Test stage: run full test suite under the race detector
|
||||||
# golang 1.22.12 (2025-02-04)
|
# golang 1.22.12 (Debian-based; -race needs its C toolchain), 2025-02-04
|
||||||
FROM golang@sha256:1cf6c45ba39db9fd6db16922041d074a63c935556a05c5ccb62d181034df7f02 AS test
|
FROM golang@sha256:1cf6c45ba39db9fd6db16922041d074a63c935556a05c5ccb62d181034df7f02 AS test
|
||||||
# Depend on lint stage so both stages always run
|
|
||||||
COPY --from=lint /src/go.sum /dev/null
|
|
||||||
WORKDIR /src
|
WORKDIR /src
|
||||||
COPY go.mod go.sum ./
|
COPY go.mod go.sum ./
|
||||||
RUN go mod download
|
RUN go mod download
|
||||||
COPY . .
|
COPY . .
|
||||||
RUN make test
|
# Called directly: make test is itself a docker build of this stage.
|
||||||
|
RUN go test -timeout 90s -race -cover ./... || \
|
||||||
|
{ echo "--- Rerunning with -v for details ---"; \
|
||||||
|
go test -timeout 90s -race -v ./...; exit 1; }
|
||||||
|
|
||||||
|
# Final stage: the copies make a plain docker build run both stages above.
|
||||||
|
# golang 1.22.12 (2025-02-04)
|
||||||
|
FROM golang@sha256:1cf6c45ba39db9fd6db16922041d074a63c935556a05c5ccb62d181034df7f02
|
||||||
|
COPY --from=lint /src/go.sum /dev/null
|
||||||
|
COPY --from=test /src/go.sum /dev/null
|
||||||
|
|||||||
@@ -147,7 +147,9 @@ alpine. We provide:
|
|||||||
`script/bootstrap`, then `script/install-precommit`
|
`script/bootstrap`, then `script/install-precommit`
|
||||||
- `script/projectname` — output the project name (our own extension); used by
|
- `script/projectname` — output the project name (our own extension); used by
|
||||||
`script/docker` for the image tag
|
`script/docker` for the image tag
|
||||||
- `script/test` — run the test suite (`go test -v ./...`)
|
- `script/test` — run the test suite under the race detector in Docker by
|
||||||
|
building only the `test` stage of the `Dockerfile`, without the build cache,
|
||||||
|
so every run tests; the image is tagged `simplelog-test`
|
||||||
- `script/lint` — run golangci-lint in Docker by building only the `lint`
|
- `script/lint` — run golangci-lint in Docker by building only the `lint`
|
||||||
stage of the `Dockerfile` (which also runs the format check), without the
|
stage of the `Dockerfile` (which also runs the format check), without the
|
||||||
build cache, so every run lints; the image is tagged `simplelog-lint`
|
build cache, so every run lints; the image is tagged `simplelog-lint`
|
||||||
|
|||||||
@@ -27,6 +27,10 @@ files it depends on: .golangci.yml, REPO_POLICIES.md, .editorconfig,
|
|||||||
* 2026-10-06: a webhook request now times out after 5 seconds, so a
|
* 2026-10-06: a webhook request now times out after 5 seconds, so a
|
||||||
server that never answers no longer stops every log call; the webhook
|
server that never answers no longer stops every log call; the webhook
|
||||||
handler also reads each answer to the end so its connection is reused
|
handler also reads each answer to the end so its connection is reused
|
||||||
|
* 2026-10-06: the tests run under the race detector, in Docker:
|
||||||
|
`script/test` builds the `test` stage of the `Dockerfile`, which runs
|
||||||
|
`go test -race`, and a new final stage makes a plain `docker build`
|
||||||
|
run both the `lint` and `test` stages
|
||||||
* 2026-10-06: the linter runs only in Docker: `script/lint` builds the
|
* 2026-10-06: the linter runs only in Docker: `script/lint` builds the
|
||||||
`lint` stage of the `Dockerfile`, every `docker build` in `script/`
|
`lint` stage of the `Dockerfile`, every `docker build` in `script/`
|
||||||
runs without the build cache, and `script/bootstrap` no longer
|
runs without the build cache, and `script/bootstrap` no longer
|
||||||
|
|||||||
+10
-3
@@ -1,12 +1,19 @@
|
|||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
# script/test: run the test suite.
|
# script/test: run the test suite. Testing is a phase of the Dockerfile
|
||||||
|
# and this builds that phase alone, on the same terms as script/lint:
|
||||||
|
# --target because a phase that is not the last stage is built only when
|
||||||
|
# named, --no-cache because a cached test layer is a test that did not
|
||||||
|
# run, and a tag so each build replaces the previous image.
|
||||||
set -eu
|
set -eu
|
||||||
|
|
||||||
ROOT="$(cd "$(dirname "$0")/.." && pwd -P)"
|
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd -P)"
|
||||||
|
ROOT="$(cd "$SCRIPT_DIR/.." && pwd -P)"
|
||||||
|
|
||||||
main() {
|
main() {
|
||||||
cd "$ROOT"
|
cd "$ROOT"
|
||||||
go test -v ./...
|
docker build --no-cache \
|
||||||
|
--target test \
|
||||||
|
-t "$("$SCRIPT_DIR/projectname")-test" .
|
||||||
}
|
}
|
||||||
|
|
||||||
main "$@"
|
main "$@"
|
||||||
|
|||||||
+1
-1
@@ -121,7 +121,7 @@ func (w *WebhookHandler) Handle(ctx context.Context, record slog.Record) error {
|
|||||||
// fails here.
|
// fails here.
|
||||||
_, err = io.Copy(io.Discard, response.Body)
|
_, err = io.Copy(io.Discard, response.Body)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return fmt.Errorf("error reading webhook answer: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
if response.StatusCode < http.StatusOK ||
|
if response.StatusCode < http.StatusOK ||
|
||||||
|
|||||||
Reference in New Issue
Block a user