# restic-manager — common dev targets SHELL := /bin/bash BIN_DIR := bin SERVER_BIN := $(BIN_DIR)/restic-manager-server AGENT_BIN := $(BIN_DIR)/restic-manager-agent VERSION ?= $(shell git describe --tags --always --dirty 2>/dev/null || echo dev) LDFLAGS := -s -w -X main.version=$(VERSION) GOFLAGS := -trimpath DOCKER_IMAGE ?= ghcr.io/dcglab/restic-manager DOCKER_TAG ?= dev .PHONY: help build server agent test test-race lint fmt tidy clean run-server run-agent docker release help: @grep -E '^[a-zA-Z_-]+:.*?## ' $(MAKEFILE_LIST) | awk 'BEGIN{FS=":.*?## "};{printf " \033[36m%-14s\033[0m %s\n",$$1,$$2}' build: server agent ## Build server + agent into ./bin server: ## Build the server binary @mkdir -p $(BIN_DIR) CGO_ENABLED=0 go build $(GOFLAGS) -ldflags "$(LDFLAGS)" -o $(SERVER_BIN) ./cmd/server agent: ## Build the agent binary @mkdir -p $(BIN_DIR) CGO_ENABLED=0 go build $(GOFLAGS) -ldflags "$(LDFLAGS)" -o $(AGENT_BIN) ./cmd/agent test: ## Run tests go test ./... test-race: ## Run tests with the race detector go test -race -coverprofile=coverage.out ./... lint: ## Run golangci-lint golangci-lint run ./... fmt: ## Format with gofumpt + goimports gofumpt -w . goimports -local gitea.dcglab.co.uk/steve/restic-manager -w . tidy: ## go mod tidy go mod tidy clean: ## Remove build artifacts rm -rf $(BIN_DIR) coverage.out coverage.html run-server: server ## Build and run the server $(SERVER_BIN) run-agent: agent ## Build and run the agent $(AGENT_BIN) docker: ## Build the server Docker image docker build -f deploy/Dockerfile.server --build-arg VERSION=$(VERSION) -t $(DOCKER_IMAGE):$(DOCKER_TAG) . release: ## Cross-compile for all supported platforms @mkdir -p $(BIN_DIR) @for target in linux/amd64 linux/arm64 windows/amd64; do \ goos=$${target%/*}; goarch=$${target#*/}; \ ext=""; if [ "$$goos" = "windows" ]; then ext=".exe"; fi; \ echo "==> $$goos/$$goarch"; \ GOOS=$$goos GOARCH=$$goarch CGO_ENABLED=0 \ go build $(GOFLAGS) -ldflags "$(LDFLAGS)" \ -o $(BIN_DIR)/restic-manager-server-$$goos-$$goarch$$ext ./cmd/server; \ GOOS=$$goos GOARCH=$$goarch CGO_ENABLED=0 \ go build $(GOFLAGS) -ldflags "$(LDFLAGS)" \ -o $(BIN_DIR)/restic-manager-agent-$$goos-$$goarch$$ext ./cmd/agent; \ done