APP_NAME := scratchbox CMD_DIR := ./cmd/scratchbox BIN_DIR := ./bin BIN := $(BIN_DIR)/$(APP_NAME) CONFIG ?= config.yaml DOCKER_IMAGE ?= scratchbox:dev .PHONY: help run dev build docker test test-race fmt clean help: @echo "Targets:" @echo " make run - Alias for make dev" @echo " make dev - Build and run server (CONFIG=$(CONFIG))" @echo " make build - Build Svelte UI and binary to $(BIN)" @echo " make docker - Build Docker image (DOCKER_IMAGE=$(DOCKER_IMAGE))" @echo " make test - Run all Go tests with timeout and shuffle" @echo " make test-race - Run all Go tests with race detector and timeout" @echo " make fmt - Format Go code" @echo " make clean - Remove built artifacts" run: dev dev: build $(BIN) server --config $(CONFIG) build: clean npm --prefix ./web/ui run build mkdir -p $(BIN_DIR) CGO_ENABLED=0 go build -o $(BIN) $(CMD_DIR) docker: docker build -t $(DOCKER_IMAGE) . test: go test -timeout 30s -shuffle=on ./... test-race: go test -race -timeout 30s -shuffle=on ./... fmt: go fmt ./... clean: rm -rf web/static rm -rf $(BIN_DIR)