.PHONY: all build lint fmt fmt-check test check clean docker hooks

BINARY := upaasd
VERSION := $(shell git describe --tags --always --dirty 2>/dev/null || echo "dev")
BUILDARCH := $(shell go env GOARCH)
LDFLAGS := -X main.Version=$(VERSION) -X main.Buildarch=$(BUILDARCH)

all: check build

build:
	go build -ldflags "$(LDFLAGS)" -o bin/$(BINARY) ./cmd/upaasd

lint:
	golangci-lint run --config .golangci.yml ./...

fmt:
	gofmt -s -w .
	goimports -w .
	npx prettier --write --tab-width 4 static/js/*.js

fmt-check:
	@test -z "$$(gofmt -l .)" || (echo "Files not formatted:" && gofmt -l . && exit 1)

test:
	go test -v -race -cover -timeout 30s ./...

# Check runs all validation without making changes
# Used by CI and Docker build - fails if anything is wrong
check: fmt-check lint test
	@echo "==> All checks passed!"

docker:
	docker build .

hooks:
	@echo "Installing pre-commit hook..."
	@mkdir -p .git/hooks
	@printf '#!/bin/sh\nmake check\n' > .git/hooks/pre-commit
	@chmod +x .git/hooks/pre-commit
	@echo "Pre-commit hook installed."

clean:
	rm -rf bin/
