# forgejo-mcp-broker Makefile

BINARY      := fjmcp-broker
CMD_PKG     := ./cmd/broker
MODULE      := kode.naiv.no/olemd/forgejo-mcp-broker
VERSION     := $(shell git describe --tags --always --dirty 2>/dev/null || echo dev)
GIT_REV     := $(shell git rev-parse --short HEAD 2>/dev/null || echo unknown)
BUILD_DATE  := $(shell date -u +%Y-%m-%dT%H:%M:%SZ)
LDFLAGS     := -s -w \
               -X $(MODULE)/internal/buildinfo.Version=$(VERSION) \
               -X $(MODULE)/internal/buildinfo.GitRevision=$(GIT_REV) \
               -X $(MODULE)/internal/buildinfo.BuildDate=$(BUILD_DATE)

.PHONY: all build test lint tidy clean help image image-run

IMAGE_NAME    ?= ghcr.io/olemd/fjmcp-broker
IMAGE_TAG     ?= latest
FORGEJO_MCP_VERSION ?= 2.18.0

all: build

build: ## Build the broker binary
	go build -trimpath -ldflags '$(LDFLAGS)' -o $(BINARY) $(CMD_PKG)

test: ## Run tests with the race detector
	go test -race ./...

lint: ## Static analysis (go vet; golangci-lint if installed)
	go vet ./...
	@if command -v golangci-lint >/dev/null 2>&1; then \
		golangci-lint run; \
	else \
		echo "golangci-lint not installed; skipping (go vet already ran)"; \
	fi

tidy: ## Tidy go.mod / go.sum
	go mod tidy

clean: ## Remove build artefacts
	rm -f $(BINARY)

image: ## Build the OCI image with rootless podman
	BUILDAH_FORMAT=docker podman build \
		--build-arg BUILD_DATE="$(BUILD_DATE)" \
		--build-arg GIT_REVISION="$(GIT_REV)" \
		--build-arg FORGEJO_MCP_VERSION="$(FORGEJO_MCP_VERSION)" \
		-t $(IMAGE_NAME):$(IMAGE_TAG) \
		.

image-run: image ## Build the image and run it locally with the example env
	@test -f $$HOME/.config/fjmcp-broker.env || { \
		echo "Create $$HOME/.config/fjmcp-broker.env first (see deploy/podman/fjmcp-broker.env.example)"; \
		exit 1; }
	podman run --rm -it \
		--env-file $$HOME/.config/fjmcp-broker.env \
		-e FJMCP_BROKER_LISTEN=:8080 \
		-e FJMCP_BROKER_STORE=/data/broker.db \
		-v fjmcp-state:/data:Z \
		-p 127.0.0.1:8080:8080 \
		$(IMAGE_NAME):$(IMAGE_TAG)

help: ## Show available targets
	@awk 'BEGIN {FS = ":.*##"; print "Targets:"} /^[a-zA-Z_-]+:.*?##/ { printf "  %-8s %s\n", $$1, $$2 }' $(MAKEFILE_LIST)
