build: unify the gate so root make check covers the backend (closes #16)
All checks were successful
check / check (push) Successful in 42s
All checks were successful
check / check (push) Successful in 42s
Root `make check` only ever ran the frontend, so the "main is always green" policy was satisfied vacuously: the Go backend could be entirely broken and the root gate stayed green. - The backend moves onto scripts-to-rule-them-all. Its test, lint, fmt, fmt-check, build, run and clean implementations now live in `backend/script/`, and `backend/Makefile` is thin shims. The backend is its own project (own module, README, LICENSE, linter config, Dockerfile stage), and `Dockerfile.backend` only copies `backend/` into its builder, so its scripts have to live under `backend/`. - The root `script/test`, `script/lint`, `script/fmt` and `script/fmt-check` now run the frontend step and then the matching `backend/script/*` step, so `script/check` — and therefore the pre-commit hook — gates both halves. The frontend-only steps moved into `script/frontend-*` so nothing is duplicated. - `script/frontend-check` is the frontend half of the gate, exposed as the `check-frontend` target, for the frontend Dockerfile: its build stage is a node image with no Go toolchain. The backend half is gated by `Dockerfile.backend`, and `script/cibuild` builds both images, so the two Dockerfiles together still gate the whole repo. The `check-backend` target is the mirror of it. - `script/cibuild` builds both images through one `build_image` helper, and the Gitea workflow's only build step is `script/cibuild`; the raw `docker build -f Dockerfile.backend .` is gone from the workflow. `script/docker` likewise builds and tags both images. - `backend/Makefile`'s `hooks` target is removed. It wrote the same `.git/hooks/pre-commit` as `script/install-precommit`, so the two clobbered each other and the developer silently ended up gating on only one half of the repo. `script/install-precommit` is now the only installer, and the hook it writes runs the repo-wide `script/check`. - `backend/Makefile`'s `docker` target is removed too: the backend image builds from the repo root with a root-level Dockerfile, so it belongs to the root `script/docker` and `script/cibuild` rather than to a backend script that would have to reach outside `backend/`. - `backend/script/lint` verifies that `.golangci.yml` still matches its pinned sha256 before running the linter. Offline hash comparison, no network. READMEs at the root and in `backend/` document every script, and `TODO.md` records the change.
This commit is contained in:
@@ -11,11 +11,38 @@ make run
|
||||
# Run tests, lint, and format check
|
||||
make check
|
||||
|
||||
# Docker
|
||||
docker build -t netwatch-server .
|
||||
# Docker (from the repo root; the image's build context is the repo root)
|
||||
make docker
|
||||
docker run -p 8080:8080 netwatch-server
|
||||
```
|
||||
|
||||
## Entrypoints
|
||||
|
||||
This project follows the same
|
||||
[Scripts to Rule Them All](https://github.com/github/scripts-to-rule-them-all)
|
||||
pattern as the repo root: the implementations live in `backend/script/` and the
|
||||
targets in `backend/Makefile` are thin shims that call them. The repo root's
|
||||
`script/test`, `script/lint`, `script/fmt` and `script/fmt-check` call these
|
||||
too, so the root `make check` covers the backend.
|
||||
|
||||
- `script/build` — compile `netwatch-server` with the version and architecture
|
||||
stamped in via ldflags (statically linked on Linux)
|
||||
- `script/test` — run the Go tests under a 30-second timeout
|
||||
- `script/lint` — assert `.golangci.yml` still matches its pinned sha256, then
|
||||
run golangci-lint
|
||||
- `script/fmt` — format the Go sources (writes)
|
||||
- `script/fmt-check` — check Go formatting (read-only)
|
||||
- `script/check` — run test, lint, and fmt-check
|
||||
- `script/run` — build and run the server locally
|
||||
- `script/clean` — remove build artifacts
|
||||
|
||||
There is deliberately no `hooks` target here: the repo has exactly one
|
||||
pre-commit hook installer, the root `script/install-precommit`, and the hook it
|
||||
installs runs the root `script/check`, which gates both halves of the repo.
|
||||
There is no `docker` target either: `Dockerfile.backend` lives at the repo root
|
||||
and builds with the repo root as its context, so the backend image is built by
|
||||
the root `make docker` and by `script/cibuild`.
|
||||
|
||||
## Rationale
|
||||
|
||||
The NetWatch frontend collects latency measurements from the browser but has no
|
||||
|
||||
Reference in New Issue
Block a user