GO := /usr/local/go/bin/go BINARY := clavitor VERSION := $(shell git describe --tags --always --dirty 2>/dev/null || echo dev) COMMIT := $(shell git rev-parse --short HEAD 2>/dev/null || echo unknown) DATE := $(shell date -u +%Y%m%d-%H%M) LDFLAGS := -s -w -X main.version=$(VERSION) -X main.commit=$(COMMIT) -X main.buildDate=$(DATE) # Download hosting SITE_HOST := root@clavitor.ai SITE_DIR := /opt/clavitor-web/downloads export GOFIPS140 := latest # Web files for syntax checking WEB_DIR := cmd/clavitor/web JS_FILES := $(wildcard $(WEB_DIR)/*.js) # --- Development workflow (stop → build → start) --- dev: stop check build start check: @echo "Checking JS syntax..." @for f in $(JS_FILES); do node --check $$f || exit 1; done @echo "JS syntax OK" stop: systemctl --user stop clavitor.service start: systemctl --user start clavitor.service restart: systemctl --user restart clavitor.service status: systemctl --user status clavitor.service logs: journalctl --user -u clavitor -f # --- Build targets --- .PHONY: dev stop start restart status logs build build-all linux-amd64 linux-arm64 test clean publish check build: linux-amd64 build-all: linux-amd64 linux-arm64 linux-amd64: CGO_ENABLED=1 GOOS=linux GOARCH=amd64 \ $(GO) build -ldflags "$(LDFLAGS)" -o $(BINARY)-linux-amd64 ./cmd/clavitor linux-arm64: CGO_ENABLED=1 GOOS=linux GOARCH=arm64 CC=aarch64-linux-gnu-gcc \ $(GO) build -ldflags "$(LDFLAGS)" -o $(BINARY)-linux-arm64 ./cmd/clavitor test: $(GO) test ./... clean: rm -f $(BINARY)-linux-amd64 $(BINARY)-linux-arm64 # --- Publish binaries to clavitor.ai/download --- publish: build-all ssh $(SITE_HOST) 'mkdir -p $(SITE_DIR)' scp $(BINARY)-linux-amd64 $(SITE_HOST):$(SITE_DIR)/ scp $(BINARY)-linux-arm64 $(SITE_HOST):$(SITE_DIR)/ @echo "Published $(VERSION) to clavitor.ai/download"