.PHONY: build webhook test test-db lint generate generate-check dev migrate seed export clean tidy BINARY := bin/oikos GO ?= go build: mkdir -p bin $(GO) build -o $(BINARY) -tags timetzdata ./cmd/oikos webhook: $(GO) build -o webhook -tags timetzdata ./cmd/webhook test: $(GO) test -race -cover ./... # Integration tests against the compose Postgres (starts it if needed) test-db: docker compose up -d postgres @sleep 3 OIKOS_TEST_DATABASE_URL="postgres://oikos:$${OIKOS_DB_PASSWORD:-oikos_dev}@localhost:5432/oikos?sslmode=disable" \ $(GO) test -race -count=1 ./internal/db/ ./internal/httpapi/ ./internal/mcp/ lint: vet golangci govulncheck vet: $(GO) vet ./... golangci: @command -v golangci-lint >/dev/null 2>&1 && golangci-lint run --config .golangci.yml || echo "golangci-lint not installed — see https://golangci-lint.run/usage/install/" govulncheck: @command -v govulncheck >/dev/null 2>&1 && govulncheck ./... || echo "govulncheck not installed — run: go install golang.org/x/vuln/cmd/govulncheck@latest" .PHONY: lint vet golangci govulncheck generate: $(GO) run github.com/oapi-codegen/oapi-codegen/v2/cmd/oapi-codegen@v2.4.1 \ -config api/codegen.yaml api/openapi.yaml $(GO) run github.com/sqlc-dev/sqlc/cmd/sqlc@v1.29.0 generate # CI drift guard: regenerate and fail if the committed output changed. generate-check: generate @git diff --exit-code -- internal/httpapi/gen internal/db/sqlcgen \ || (echo "generated code is stale — run 'make generate' and commit" && exit 1) migrate: $(GO) run ./cmd/oikos migrate seed: $(GO) run ./cmd/oikos seed export: $(GO) run ./cmd/oikos export dev: docker compose --profile dev up -d clean: rm -f $(BINARY) rm -rf bin $(GO) clean -testcache tidy: $(GO) mod tidy