BIN_DIR := bin GO_CACHE_DIR := $(CURDIR)/.cache/go-build SERVER_BIN := $(BIN_DIR)/amcs-server CMD_SERVER := ./cmd/amcs-server BUILDINFO_PKG := git.warky.dev/wdevs/amcs/internal/buildinfo UI_DIR := $(CURDIR)/ui UI_DIST_DIR := $(CURDIR)/internal/app/ui/dist PATCH_INCREMENT ?= 1 VERSION_TAG ?= $(shell git describe --tags --exact-match 2>/dev/null || echo dev) COMMIT_SHA ?= $(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 $(BUILDINFO_PKG).Version=$(VERSION_TAG) \ -X $(BUILDINFO_PKG).TagName=$(VERSION_TAG) \ -X $(BUILDINFO_PKG).Commit=$(COMMIT_SHA) \ -X $(BUILDINFO_PKG).BuildDate=$(BUILD_DATE) .PHONY: all build clean migrate release-version test ui-install ui-build ui-dev ui-check all: build build: ui-build @mkdir -p $(BIN_DIR) go build -ldflags "$(LDFLAGS)" -o $(SERVER_BIN) $(CMD_SERVER) ui-install: npm --prefix $(UI_DIR) ci ui-build: ui-install npm --prefix $(UI_DIR) run build ui-dev: ui-install npm --prefix $(UI_DIR) run dev ui-check: ui-install npm --prefix $(UI_DIR) run check test: ui-check @mkdir -p $(GO_CACHE_DIR) GOCACHE=$(GO_CACHE_DIR) go test ./... release-version: @case "$(PATCH_INCREMENT)" in \ ''|*[!0-9]*|0) echo "PATCH_INCREMENT must be a positive integer" >&2; exit 1 ;; \ esac @latest=$$(git tag --list 'v[0-9]*.[0-9]*.[0-9]*' --sort=-v:refname | head -n 1); \ if [ -z "$$latest" ]; then latest="v0.0.0"; fi; \ version=$${latest#v}; \ major=$${version%%.*}; \ rest=$${version#*.}; \ minor=$${rest%%.*}; \ patch=$${rest##*.}; \ next_patch=$$((patch + $(PATCH_INCREMENT))); \ next_tag="v$$major.$$minor.$$next_patch"; \ if git rev-parse -q --verify "refs/tags/$$next_tag" >/dev/null; then \ echo "$$next_tag already exists" >&2; \ exit 1; \ fi; \ git tag -a "$$next_tag" -m "Release $$next_tag"; \ echo "$$next_tag" migrate: ./scripts/migrate.sh clean: rm -rf $(BIN_DIR)