APP_NAME := scratchbox CMD_DIR := ./cmd/scratchbox BIN_DIR := ./bin BIN := $(BIN_DIR)/$(APP_NAME) CONFIG ?= config.yaml .PHONY: help run dev config build 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 config - Write default config to $(CONFIG) and generate sibling config.key if missing" @echo " make build - Build Svelte UI and binary to $(BIN)" @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) config: mkdir -p "$(dir $(CONFIG))" go run $(CMD_DIR) generate-config > "$(CONFIG)" @if [ ! -f "$(dir $(CONFIG))config.key" ]; then \ go run $(CMD_DIR) generate-key > "$(dir $(CONFIG))config.key"; \ fi build: clean npm --prefix ./web/ui run build mkdir -p $(BIN_DIR) go build -o $(BIN) $(CMD_DIR) test: go test -timeout 30s -shuffle=on ./... test-race: go test -race -timeout 30s -shuffle=on ./... fmt: go fmt ./... clean: rm -rf $(BIN_DIR)