.PHONY: help setup build client server test lint ci ci-client ci-server clean # 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" # --- Setup --- setup: setup-rust setup-godot setup-tooling @echo "Dev environment ready." setup-rust: @echo "Checking Rust toolchain..." @command -v cargo >/dev/null 2>&1 || { echo "Install Rust: https://rustup.rs"; exit 1; } @rustup component add clippy rustfmt setup-godot: @echo "Checking Godot..." @command -v godot4 >/dev/null 2>&1 || command -v godot >/dev/null 2>&1 || { echo "Install Godot 4: https://godotengine.org"; exit 1; } setup-tooling: @echo "Checking tooling dependencies..." @command -v python3 >/dev/null 2>&1 || { echo "Install Python 3"; exit 1; } # --- Build --- build: build-server build-client build-server: cd server && cargo build build-client: @echo "Client build: Godot exports are configured via the editor." @echo "Use 'make client' to run the client directly." # --- Run --- server: cd server && cargo run client: @if command -v godot4 >/dev/null 2>&1; then \ godot4 --path client; \ elif command -v godot >/dev/null 2>&1; then \ godot --path client; \ else \ echo "Godot not found. Run 'make setup' first."; exit 1; \ fi # --- Test --- test: test-server test-client test-server: cd server && cargo test test-client: @echo "Client tests run via gdUnit4 inside Godot." @echo "TODO: headless test runner integration" # --- Lint --- lint: lint-server lint-client lint-server: cd server && cargo clippy -- -D warnings cd server && cargo fmt --check lint-client: @echo "Client lint: TODO — gdlint / gdformat integration" # --- CI (run locally) --- ci: ci-server ci-client ci-server: lint-server build-server test-server ci-client: lint-client build-client test-client # --- Clean --- clean: cd server && cargo clean || true rm -rf .cache/* @echo "Clean complete."