.PHONY: help build test test-unit test-integration test-all check clean
.PHONY: coverage coverage-html
.PHONY: fmt fmt-check lint clippy doc doc-open doc-check
.PHONY: proto
.PHONY: setup ci
.DEFAULT_GOAL := help
BLUE := \033[34m
GREEN := \033[32m
YELLOW := \033[33m
RESET := \033[0m
help:
@echo "$(BLUE)InferaDB Rust SDK$(RESET)"
@echo ""
@echo "$(GREEN)Usage:$(RESET) make [target]"
@echo ""
@echo "$(GREEN)Build & Test:$(RESET)"
@grep -E '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | grep -E '^(build|test|clean)' | awk 'BEGIN {FS = ":.*?## "}; {printf " $(YELLOW)%-20s$(RESET) %s\n", $$1, $$2}'
@echo ""
@echo "$(GREEN)Code Coverage:$(RESET)"
@grep -E '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | grep -E '^coverage' | awk 'BEGIN {FS = ":.*?## "}; {printf " $(YELLOW)%-20s$(RESET) %s\n", $$1, $$2}'
@echo ""
@echo "$(GREEN)Code Quality:$(RESET)"
@grep -E '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | grep -E '^(fmt|lint|clippy|check)' | awk 'BEGIN {FS = ":.*?## "}; {printf " $(YELLOW)%-20s$(RESET) %s\n", $$1, $$2}'
@echo ""
@echo "$(GREEN)Documentation:$(RESET)"
@grep -E '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | grep -E '^doc' | awk 'BEGIN {FS = ":.*?## "}; {printf " $(YELLOW)%-20s$(RESET) %s\n", $$1, $$2}'
@echo ""
@echo "$(GREEN)Code Generation:$(RESET)"
@grep -E '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | grep -E '^proto' | awk 'BEGIN {FS = ":.*?## "}; {printf " $(YELLOW)%-20s$(RESET) %s\n", $$1, $$2}'
@echo ""
@echo "$(GREEN)Other:$(RESET)"
@grep -E '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | grep -E '^(setup|ci)' | awk 'BEGIN {FS = ":.*?## "}; {printf " $(YELLOW)%-20s$(RESET) %s\n", $$1, $$2}'
build:
cargo build --workspace --all-features
test: test-unit
test-unit:
cargo test --lib
test-integration:
cargo test --test integration
test-all:
cargo test --lib --test integration
clean:
cargo clean
rm -rf target/doc target/llvm-cov
coverage:
cargo llvm-cov --lib --ignore-filename-regex 'proto|inferadb\.v1'
coverage-html:
cargo llvm-cov --lib --ignore-filename-regex 'proto|inferadb\.v1' --html
@echo "$(GREEN)Report: target/llvm-cov/html/index.html$(RESET)"
fmt:
cargo +nightly fmt --all
fmt-check:
cargo +nightly fmt --all -- --check
clippy:
cargo clippy --workspace --all-targets -- -D warnings
lint: clippy
check: fmt-check clippy
@echo "$(GREEN)All checks passed!$(RESET)"
doc:
cargo doc --workspace --no-deps
doc-open:
cargo doc --workspace --no-deps --open
doc-check:
RUSTDOCFLAGS="-D warnings" cargo doc --workspace --no-deps
@echo "$(GREEN)Documentation check passed!$(RESET)"
proto:
@echo "$(BLUE)Regenerating protobuf code...$(RESET)"
@touch proto/inferadb.proto
cargo build --features grpc
$(MAKE) fmt
@echo "$(GREEN)Protobuf code regenerated and formatted!$(RESET)"
setup:
mise trust
mise install
rustup component add rustfmt clippy
rustup toolchain install nightly --component rustfmt
@echo "$(GREEN)Setup complete!$(RESET)"
ci: fmt-check clippy test doc-check
@echo "$(GREEN)CI checks passed!$(RESET)"