Build-time converter reads content YAML and emits RON format. Lives in tooling/content-converter/ as standalone Rust crate. Runs via make content-ron. Supports --dry-run, --verbose, --content-type filtering. Not on critical path — engine consumes YAML in v0.1, RON is future- proofing for runtime performance. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
148 lines
4.6 KiB
Makefile
148 lines
4.6 KiB
Makefile
GODOT := $(shell command -v godot4 2>/dev/null || command -v godot 2>/dev/null)
|
|
|
|
.PHONY: help setup build client server test lint ci ci-client ci-server clean \
|
|
decisions-sync decisions-coverage decisions-active decisions-orphan \
|
|
db-backup db-install validate-content content-ron
|
|
|
|
# --- Configuration ---
|
|
|
|
GODOT_VERSION ?= 4.6
|
|
|
|
# Default
|
|
help:
|
|
@echo "The Settled Reach — Development Commands"
|
|
@echo ""
|
|
@echo " make setup Install dev dependencies (Rust, Godot, tooling)"
|
|
@echo " make build Build client and server"
|
|
@echo " make client Run the Godot client"
|
|
@echo " make server Run the Rust simulation server"
|
|
@echo " make test Run all tests"
|
|
@echo " make lint Run all linters"
|
|
@echo " make ci Run full CI pipeline locally"
|
|
@echo " make ci-client Run client CI checks"
|
|
@echo " make ci-server Run server CI checks"
|
|
@echo " make clean Remove build artifacts and caches"
|
|
@echo ""
|
|
@echo " make db-backup Backup shared database to git (main only)"
|
|
@echo " make db-install Restore shared database from backup"
|
|
@echo ""
|
|
@echo " make decisions-sync Sync decisions/*.md into SQLite"
|
|
@echo " make decisions-coverage Decision-to-ticket coverage by domain"
|
|
@echo " make decisions-active List active decisions"
|
|
@echo " make decisions-orphan Decisions without implementing tickets"
|
|
@echo " make validate-content Validate content YAML against schemas"
|
|
@echo " make content-ron Convert content YAML to RON (build-time)"
|
|
@echo ""
|
|
@echo " GODOT_VERSION=4.6 make setup Override Godot version"
|
|
|
|
# --- Setup ---
|
|
|
|
setup: setup-rust setup-godot setup-tooling decisions-sync
|
|
@echo "Dev environment ready."
|
|
|
|
setup-rust:
|
|
@tooling/install-rust
|
|
|
|
setup-godot:
|
|
@GODOT_VERSION=$(GODOT_VERSION) tooling/install-godot
|
|
|
|
setup-tooling:
|
|
@echo "Checking tooling dependencies..."
|
|
@command -v python3 >/dev/null 2>&1 || { echo "Install Python 3"; exit 1; }
|
|
@command -v curl >/dev/null 2>&1 || { echo "Install curl (required for Godot download)"; exit 1; }
|
|
@command -v unzip >/dev/null 2>&1 || { echo "Install unzip (required for Godot download)"; exit 1; }
|
|
|
|
# --- Build ---
|
|
|
|
build: build-server build-client
|
|
|
|
build-server:
|
|
cd server && cargo build
|
|
|
|
build-client:
|
|
@test -n "$(GODOT)" || { echo "Godot not found. Run 'make setup' first."; exit 1; }
|
|
$(GODOT) --headless --path client --quit
|
|
|
|
# --- Run ---
|
|
|
|
server:
|
|
cd server && cargo run
|
|
|
|
client:
|
|
@test -n "$(GODOT)" || { echo "Godot not found. Run 'make setup' first."; exit 1; }
|
|
$(GODOT) --path client
|
|
|
|
# --- Test ---
|
|
|
|
test: test-server test-client
|
|
|
|
test-server:
|
|
cd server && cargo nextest run
|
|
|
|
fixtures:
|
|
cd server && cargo test --test gen_fixtures -- --ignored
|
|
|
|
test-client:
|
|
@test -n "$(GODOT)" || { echo "Godot not found. Run 'make setup' first."; exit 1; }
|
|
$(GODOT) --headless --path client -s res://addons/gdUnit4/bin/GdUnitCmdTool.gd --ignoreHeadlessMode -a res://tests/
|
|
|
|
# --- Lint ---
|
|
|
|
lint: lint-server lint-client
|
|
|
|
lint-server:
|
|
cd server && cargo clippy -- -D warnings
|
|
cd server && cargo fmt --check
|
|
|
|
lint-client:
|
|
@test -n "$(GODOT)" || { echo "Godot not found. Run 'make setup' first."; exit 1; }
|
|
@echo "Checking GDScript for errors..."
|
|
@$(GODOT) --headless --path client --quit 2>&1 | grep -i "SCRIPT ERROR" && { echo "GDScript errors found"; exit 1; } || echo "No script errors found"
|
|
|
|
# --- CI (run locally) ---
|
|
|
|
ci: ci-server ci-client
|
|
|
|
ci-server: lint-server build-server test-server
|
|
|
|
ci-client: lint-client build-client test-client
|
|
|
|
# --- Database ---
|
|
|
|
db-backup:
|
|
@tooling/db-backup
|
|
|
|
db-install:
|
|
@tooling/db-install
|
|
|
|
# --- Decisions ---
|
|
|
|
decisions-sync:
|
|
@db/connectors/decisions-sync
|
|
|
|
decisions-coverage:
|
|
@db/connectors/sqlite-query "SELECT d.domain, COUNT(DISTINCT d.id) as decisions, COUNT(DISTINCT t.decision_ref) as with_tickets FROM decisions d LEFT JOIN tickets t ON d.id = t.decision_ref WHERE d.status='active' AND d.type='confirmed' GROUP BY d.domain"
|
|
|
|
decisions-active:
|
|
@db/connectors/sqlite-query "SELECT id, domain, title FROM decisions WHERE status='active' AND type='confirmed' ORDER BY domain, id"
|
|
|
|
decisions-orphan:
|
|
@db/connectors/sqlite-query "SELECT id, title FROM decisions WHERE type='confirmed' AND status='active' AND id NOT IN (SELECT DISTINCT decision_ref FROM tickets WHERE decision_ref IS NOT NULL)"
|
|
|
|
# --- Content Validation ---
|
|
|
|
validate-content:
|
|
@tooling/validate-content
|
|
|
|
content-ron:
|
|
cd tooling/content-converter && cargo build --release
|
|
tooling/content-converter/target/release/content-converter --input content --output content-ron --verbose
|
|
|
|
# --- Clean ---
|
|
|
|
clean:
|
|
cd server && cargo clean || true
|
|
rm -rf .cache/*
|
|
rm -rf client/.godot client/reports
|
|
@echo "Clean complete."
|