Pulse/Makefile

122 lines
3.8 KiB
Makefile

# Pulse Makefile for development
.PHONY: build run dev dev-status dev-logs dev-stop dev-restart dev-backend-restart dev-verify dev-foreground frontend backend all clean distclean dev-hot lint lint-backend lint-frontend format format-backend format-frontend build-agents control-plane handoff
FRONTEND_DIR := frontend-modern
FRONTEND_DIST := $(FRONTEND_DIR)/dist
FRONTEND_EMBED_DIR := internal/api/frontend-modern
# Build everything (including all agent binaries)
all: frontend backend build-agents
# Build frontend only
frontend:
npm --prefix $(FRONTEND_DIR) run build
@echo "✓ Frontend build synced to $(FRONTEND_EMBED_DIR)"
# Build backend only (includes embedded frontend)
backend:
go build -o pulse ./cmd/pulse
# Build both and run
build: frontend backend
# Run the built binary
run: build
./pulse
# Development - managed local runtime
dev:
npm run dev
dev-status:
npm run dev:status
dev-logs:
npm run dev:logs
dev-stop:
npm run dev:stop
dev-restart:
npm run dev:restart
dev-backend-restart:
npm run dev:backend-restart
dev-verify:
npm run dev:verify
dev-foreground:
npm run dev:foreground
dev-hot:
npm run dev:foreground
# Clean build artifacts
clean:
rm -f pulse
rm -rf $(FRONTEND_DIST) $(FRONTEND_EMBED_DIR)
distclean: clean
./scripts/cleanup.sh
# Quick managed restart for development
restart: dev-restart
# Run linters for both backend and frontend
lint: lint-backend lint-frontend
lint-backend:
golangci-lint run ./...
lint-frontend:
npm --prefix $(FRONTEND_DIR) run lint
# Apply formatters
format: format-backend format-frontend
format-backend:
gofmt -w cmd internal pkg
format-frontend:
npm --prefix $(FRONTEND_DIR) run format
# Build control plane binary
control-plane:
@VERSION=$$(cat VERSION | tr -d '\n') && \
go build -ldflags="-s -w -X main.Version=v$$VERSION" -trimpath -o pulse-control-plane ./cmd/pulse-control-plane
test:
@./scripts/ensure_test_assets.sh
@echo "Running backend tests (excluding tmp tooling)..."
go test -race -timeout 10m $$(go list ./... | grep -v '/tmp$$')
# Run integration tests (requires Ollama at OLLAMA_URL or 127.0.0.1:11434)
test-integration:
@echo "Running AI integration tests against Ollama..."
@echo "Set OLLAMA_URL to override default (http://127.0.0.1:11434)"
go test -tags=integration -v ./internal/ai/providers/... -run "TestIntegration"
# Run both unit and integration tests
test-all: test test-integration
# Build all agent binaries for all platforms
build-agents:
@echo "Building agent binaries for all platforms..."
@mkdir -p bin
@VERSION=$$(cat VERSION | tr -d '\n') && \
echo "Building unified agent binaries..." && \
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -ldflags="-s -w -X main.Version=v$$VERSION" -trimpath -o bin/pulse-agent-linux-amd64 ./cmd/pulse-agent && \
CGO_ENABLED=0 GOOS=linux GOARCH=arm64 go build -ldflags="-s -w -X main.Version=v$$VERSION" -trimpath -o bin/pulse-agent-linux-arm64 ./cmd/pulse-agent && \
CGO_ENABLED=0 GOOS=darwin GOARCH=amd64 go build -ldflags="-s -w -X main.Version=v$$VERSION" -trimpath -o bin/pulse-agent-darwin-amd64 ./cmd/pulse-agent && \
CGO_ENABLED=0 GOOS=darwin GOARCH=arm64 go build -ldflags="-s -w -X main.Version=v$$VERSION" -trimpath -o bin/pulse-agent-darwin-arm64 ./cmd/pulse-agent && \
CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build -ldflags="-s -w -X main.Version=v$$VERSION" -trimpath -o bin/pulse-agent-windows-amd64.exe ./cmd/pulse-agent
@echo "✓ All agent binaries built in bin/"
# Session handoff — merge a Claude session's handoff entry into MEMORY.md (flock-safe)
# Usage: make handoff SESSION_ID=<id>
# Expects handoff content at /tmp/handoff-$(SESSION_ID).md
handoff:
@if [ -z "$(SESSION_ID)" ]; then echo "Error: SESSION_ID required (make handoff SESSION_ID=xxx)" >&2; exit 1; fi
@./scripts/session-handoff.sh "$(SESSION_ID)" "/tmp/handoff-$(SESSION_ID).md"