build: unify the gate so root make check covers the backend (closes #16)
check / check (push) Successful in 11s
check / check (push) Successful in 11s
Root make check, and with it the pre-commit hook, now gates the Go backend too. The backend's Makefile targets are shims over backend/script/*; script/cibuild builds both images and is the workflow's only build step. Root make test runs both halves within one 30-second timeout. Root make lint runs golangci-lint only in Docker, by building the lint stage of Dockerfile.backend without the cache; the .golangci.yml drift check moved into backend/script/lint. script/bootstrap installs no linter: it reuses a Go at least as new as backend/go.mod asks for, otherwise installs the pinned, hash-verified release, linked into ~/.local/bin without replacing anything it did not create. With VERSION unset or empty, the backend version falls back to git describe inside a git checkout, then to dev. Model: opus-5-5
This commit was merged in pull request #38.
This commit is contained in:
+14
-53
@@ -1,69 +1,30 @@
|
||||
# VERSION is overridable (the Dockerfile passes its ARG VERSION in) and
|
||||
# degrades to "dev" when git is unavailable or there is no .git — the
|
||||
# build must not depend on the repository history being in the build
|
||||
# context.
|
||||
VERSION ?= $(shell { git describe --always --dirty; } 2>/dev/null || echo dev)
|
||||
BUILDARCH := $(shell uname -m)
|
||||
BINARY := netwatch-server
|
||||
# Thin shims; the implementations live in backend/script/ (see the
|
||||
# Entrypoints section of README.md). There is no check, hooks or docker
|
||||
# target here: the root Makefile's check covers this directory, its
|
||||
# hooks target installs the repo's only pre-commit hook, and its docker
|
||||
# target builds this image, whose build context is the repo root.
|
||||
|
||||
GOLDFLAGS += -s -w
|
||||
GOLDFLAGS += -X main.Version=$(VERSION)
|
||||
GOLDFLAGS += -X main.Buildarch=$(BUILDARCH)
|
||||
|
||||
# macOS ships shasum rather than sha256sum.
|
||||
SHA256SUM := $(shell command -v sha256sum >/dev/null 2>&1 && echo sha256sum || echo shasum -a 256)
|
||||
|
||||
# .golangci.yml is standardized org-wide and must never be edited here
|
||||
# (REPO_POLICIES.md). Its last silent drift replaced the v2 schema with
|
||||
# v1 keys, which left every threshold in the file inert while the build
|
||||
# stayed green. The lint target therefore asserts the file still matches
|
||||
# the canonical copy byte for byte. The check is a local hash comparison:
|
||||
# no network, no remote schema, nothing unpinned in the build path.
|
||||
GOLANGCI_CONFIG_SHA256 := 021cc83f4e6fc7c31b95b34b846723dfcf20b66b7baeea1dc40406e643346bcb
|
||||
|
||||
.PHONY: all build test lint fmt fmt-check check docker hooks run clean
|
||||
.PHONY: all build test lint fmt fmt-check run clean
|
||||
|
||||
all: build
|
||||
|
||||
build:
|
||||
CGO_ENABLED=0 go build -trimpath -ldflags "$(GOLDFLAGS)" \
|
||||
-o ./$(BINARY) ./cmd/netwatch-server/
|
||||
@script/build
|
||||
|
||||
test:
|
||||
timeout 30 go test ./...
|
||||
@script/test
|
||||
|
||||
lint:
|
||||
@actual=$$($(SHA256SUM) .golangci.yml | cut -d' ' -f1); \
|
||||
if [ "$$actual" != "$(GOLANGCI_CONFIG_SHA256)" ]; then \
|
||||
echo ".golangci.yml has drifted from the org standard."; \
|
||||
echo " expected $(GOLANGCI_CONFIG_SHA256)"; \
|
||||
echo " actual $$actual"; \
|
||||
echo "Restore it verbatim from sneak/prompts; do not edit it."; \
|
||||
exit 1; \
|
||||
fi
|
||||
golangci-lint run ./...
|
||||
@script/lint
|
||||
|
||||
fmt:
|
||||
go fmt ./...
|
||||
@script/fmt
|
||||
|
||||
fmt-check:
|
||||
@test -z "$$(gofmt -l .)" || \
|
||||
(echo "Files not formatted:"; gofmt -l .; exit 1)
|
||||
@script/fmt-check
|
||||
|
||||
check: test lint fmt-check
|
||||
|
||||
docker:
|
||||
timeout 300 docker build -t netwatch-server -f ../Dockerfile.backend ..
|
||||
|
||||
hooks:
|
||||
@printf '#!/bin/sh\ncd backend && make check\n' > \
|
||||
$$(git rev-parse --show-toplevel)/.git/hooks/pre-commit
|
||||
@chmod +x \
|
||||
$$(git rev-parse --show-toplevel)/.git/hooks/pre-commit
|
||||
@echo "Pre-commit hook installed"
|
||||
|
||||
run: build
|
||||
./$(BINARY)
|
||||
run:
|
||||
@script/run
|
||||
|
||||
clean:
|
||||
rm -f ./$(BINARY)
|
||||
@script/clean
|
||||
|
||||
Reference in New Issue
Block a user