.PHONY: generate generate-go verify-generate test test-short test-integration lint build # renovate: datasource=docker depName=sqlc/sqlc SQLC_VERSION := 1.31.1 # Local codegen. Containerised so a dev needs no sqlc install. generate: docker run --rm -v "$(CURDIR):/src" -w /src sqlc/sqlc:$(SQLC_VERSION) generate # Same codegen, run as a Go tool instead of a container. This is the CI path: # the ci-go image already has Go, so it avoids docker-in-docker. Pinned to the # SAME version as `generate` above so both routes emit identical output. generate-go: go run github.com/sqlc-dev/sqlc/cmd/sqlc@v$(SQLC_VERSION) generate # Fail if the committed generated code no longer matches the .sql sources. # # Nothing verified this before, so internal/db/dbq could silently drift from # internal/db/queries — a hand-edit, a half-applied regen, or a schema change # without a regen would all pass CI while the typed layer lied about the SQL. # # The diff is printed BEFORE the exit-code check on purpose: when this fails, # the log then contains sqlc's exact expected output, which is what you commit. verify-generate: generate-go git --no-pager diff -- internal/db/dbq git diff --quiet -- internal/db/dbq test: go test -race ./... test-short: go test -short -race ./... # Full suite incl. integration tests, against the dedicated minstrel_test # DB so a run never truncates the dev `minstrel` DB (Fable #339). Ensures # the test DB exists (idempotent — createdb errors if present, ignored). test-integration: docker compose up -d postgres -docker compose exec -T postgres createdb -U minstrel minstrel_test # -p 1: integration packages share one test DB and each TRUNCATEs it; # concurrent package binaries deadlock on TRUNCATE. Serialize packages. MINSTREL_TEST_DATABASE_URL=postgres://minstrel:minstrel@localhost:5432/minstrel_test?sslmode=disable go test -p 1 -race ./... lint: golangci-lint run ./... build: go build -o bin/minstrel ./cmd/minstrel