CARGO ?= cargo
RUST_MIN_VERSION := 1.70.0
.PHONY: setup check-rust check-components install-hooks \
build release test fmt clippy lint clean help \
functional-build functional-start functional-test functional-stop \
functional-test-bz52 functional-test-bz53 functional-test-all functional-stop-all
setup: check-rust check-components install-hooks build
@echo
@echo "Setup complete. You're ready to develop bzr."
check-rust:
@printf "Checking for Rust toolchain... "
@command -v rustc >/dev/null 2>&1 || { echo "MISSING"; echo " Install Rust: https://rustup.rs"; exit 1; }
@command -v cargo >/dev/null 2>&1 || { echo "MISSING"; echo " Install Rust: https://rustup.rs"; exit 1; }
@RUST_VER=$$(rustc --version | sed 's/rustc \([^ ]*\).*/\1/'); \
printf "%s " "$$RUST_VER"; \
LOWEST=$$(printf '%s\n%s\n' "$(RUST_MIN_VERSION)" "$$RUST_VER" | sort -V | head -n1); \
if [ "$$LOWEST" != "$(RUST_MIN_VERSION)" ]; then \
echo "(need >= $(RUST_MIN_VERSION))"; exit 1; \
fi
@echo "ok"
check-components:
@printf "Checking for rustfmt... "
@rustup component list --installed 2>/dev/null | grep -q rustfmt || { echo "MISSING"; echo " Run: rustup component add rustfmt"; exit 1; }
@echo "ok"
@printf "Checking for clippy... "
@rustup component list --installed 2>/dev/null | grep -q clippy || { echo "MISSING"; echo " Run: rustup component add clippy"; exit 1; }
@echo "ok"
install-hooks:
@echo "Installing git hooks..."
@HOOKS_DIR=$$(git rev-parse --git-path hooks) && \
mkdir -p "$$HOOKS_DIR" && \
printf '#!/bin/sh\nset -eu\ncargo fmt -- --check || { echo "Run cargo fmt before committing."; exit 1; }\ncargo clippy -- -D warnings\n' > "$$HOOKS_DIR/pre-commit" && \
chmod +x "$$HOOKS_DIR/pre-commit" && \
printf '#!/bin/sh\nset -eu\ncargo test\n' > "$$HOOKS_DIR/pre-push" && \
chmod +x "$$HOOKS_DIR/pre-push" && \
echo "Installed pre-commit (fmt + clippy) and pre-push (test) hooks."
build:
$(CARGO) build
release:
$(CARGO) build --release
test:
$(CARGO) test
fmt:
$(CARGO) fmt
clippy:
$(CARGO) clippy -- -D warnings
lint: fmt clippy
clean:
$(CARGO) clean
functional-build:
tests/functional/setup-bugzilla.sh build
functional-start:
tests/functional/setup-bugzilla.sh start
functional-test: functional-start
tests/functional/run-tests.sh
functional-stop:
tests/functional/setup-bugzilla.sh stop
functional-test-bz52:
BZR_BZ_VERSION=bz52 tests/functional/setup-bugzilla.sh start
BZR_BZ_VERSION=bz52 tests/functional/run-tests.sh
functional-test-bz53:
BZR_BZ_VERSION=bz53 tests/functional/setup-bugzilla.sh start
BZR_BZ_VERSION=bz53 tests/functional/run-tests.sh
functional-test-all:
tests/functional/run-all-versions.sh
functional-stop-all:
BZR_BZ_VERSION=bz50 tests/functional/setup-bugzilla.sh stop
BZR_BZ_VERSION=bz52 tests/functional/setup-bugzilla.sh stop
BZR_BZ_VERSION=bz53 tests/functional/setup-bugzilla.sh stop
help:
@grep -E '^[a-zA-Z_-]+:.*##' $(MAKEFILE_LIST) | sort | awk 'BEGIN {FS = ":.*## "}; {printf " \033[36m%-15s\033[0m %s\n", $$1, $$2}'