.DEFAULT_GOAL := help UNAME_S := $(shell uname -s 2>/dev/null || echo Windows) GOOS_LINUX := GOOS=linux GOARCH=amd64 GIT_SHA := $(shell git rev-parse --short HEAD 2>/dev/null || echo dev) LDFLAGS := -s -w -X vetting/internal/version.GitSHA=$(GIT_SHA) .PHONY: help help: ## Show targets @awk 'BEGIN {FS = ":.*##"} /^[a-zA-Z_-]+:.*##/ {printf " %-20s %s\n", $$1, $$2}' $(MAKEFILE_LIST) .PHONY: templ templ: ## Generate templ .go files templ generate .PHONY: orchestrator orchestrator: templ ## Build orchestrator for host OS go build -ldflags="$(LDFLAGS)" -o bin/vetting$(if $(filter Windows%,$(UNAME_S)),.exe,) ./cmd/vetting .PHONY: orchestrator-linux orchestrator-linux: templ ## Cross-build orchestrator for linux-amd64 $(GOOS_LINUX) go build -ldflags="$(LDFLAGS)" -o bin/vetting-linux-amd64 ./cmd/vetting .PHONY: agent agent: ## Build agent for host OS (handy for unit testing only — real agent runs in the live image) go build -ldflags="$(LDFLAGS)" -o bin/vetting-agent$(if $(filter Windows%,$(UNAME_S)),.exe,) ./cmd/vetting-agent .PHONY: agent-linux agent-linux: ## Cross-build agent for linux-amd64 (consumed by live-image build) $(GOOS_LINUX) go build -ldflags="$(LDFLAGS)" -o bin/vetting-agent.linux-amd64 ./cmd/vetting-agent .PHONY: tidy tidy: ## go mod tidy go mod tidy .PHONY: fmt fmt: ## go fmt go fmt ./... .PHONY: vet vet: ## go vet go vet ./... .PHONY: test test: templ ## Run tests go test ./... .PHONY: test-race test-race: templ ## Run tests with the race detector go test -race -count=1 ./... .PHONY: e2e e2e: ## Run the QEMU PXE E2E test (Linux, root, live image required) sudo go test -tags=e2e -v ./test/e2e/... .PHONY: live-image live-image: agent-linux ## Build reproducible live image (requires Linux/WSL + mkosi) ifneq ($(findstring Windows,$(UNAME_S))$(findstring MINGW,$(UNAME_S))$(findstring MSYS,$(UNAME_S)),) @echo "ERROR: live-image must be built under Linux (use WSL: wsl make live-image)." && exit 1 endif $(MAKE) -C live-image all .PHONY: all all: orchestrator agent ## Build everything buildable on host OS .PHONY: run run: orchestrator ## Build and run orchestrator with example config ./bin/vetting$(if $(filter Windows%,$(UNAME_S)),.exe,) --config deploy/vetting.example.yaml .PHONY: install install: orchestrator-linux ## Run deploy/install.sh (must be run on the target LXC as root) sudo ./deploy/install.sh --binary ./bin/vetting-linux-amd64 .PHONY: clean clean: ## Remove build artifacts rm -rf bin out dist tmp