# Storage engine playground helpers. HAS_CARGO := $(wildcard Cargo.toml) # Workspace crates discovered under `crates/*/Cargo.toml`. The directory name is # assumed to match the package name (the convention documented in crates/README.md). CRATE_MANIFESTS := $(wildcard crates/*/Cargo.toml) CRATES := $(patsubst crates/%/Cargo.toml,%,$(CRATE_MANIFESTS)) CRATE_FLAGS := $(addprefix -p ,$(CRATES)) .DEFAULT_GOAL := help .PHONY: help help: ## Show help messages for all available targets @grep -E '^[a-zA-Z_-]+:.*## .*$$' Makefile | \ awk 'BEGIN {FS = ":.*## "}; {printf "\033[36m%-20s\033[0m %s\n", $$1, $$2}' .PHONY: format format: ## Apply code formatting @if [ -z "$(HAS_CARGO)" ]; then \ echo "No Cargo.toml found. Skipping Rust formatting."; \ else \ cargo fmt --all; \ fi .PHONY: format-check format-check: ## Check code formatting without applying changes @if [ -z "$(HAS_CARGO)" ]; then \ echo "No Cargo.toml found. Skipping Rust format check."; \ else \ cargo fmt --all --check; \ fi .PHONY: lint lint: ## Run linters across every crate under crates/ @if [ -z "$(HAS_CARGO)" ]; then \ echo "No Cargo.toml found. Skipping lint."; \ elif [ -z "$(CRATES)" ]; then \ echo "No crates/*/Cargo.toml found. Skipping lint."; \ else \ cargo clippy $(CRATE_FLAGS) --no-deps -- -D warnings -D clippy::unwrap_used -D clippy::expect_used; \ fi .PHONY: test test: ## Run tests across all targets and features @if [ -z "$(HAS_CARGO)" ]; then \ echo "No Cargo.toml found. Skipping tests."; \ else \ cargo test --all-targets --all-features; \ fi .PHONY: check check: format-check lint test ## Run all checks (format-check, lint, test) .PHONY: clean clean: ## Remove build output @if [ -z "$(HAS_CARGO)" ]; then \ echo "No Cargo.toml found. Nothing to clean."; \ else \ cargo clean; \ fi .PHONY: shell shell: ## Enter the Nix dev shell defined in flake.nix @nix develop .PHONY: setup-hooks setup-hooks: ## Install Git hooks with pre-commit @pre-commit install --hook-type pre-commit @pre-commit install --hook-type pre-push @pre-commit install-hooks .PHONY: test-hooks test-hooks: ## Run pre-commit hooks across all files @pre-commit run --all-files --show-diff-on-failure