From d3514b84e9065184c8a33a5754f8b905ce80aed9 Mon Sep 17 00:00:00 2001 From: Xevion Date: Mon, 29 Dec 2025 03:04:11 -0600 Subject: [PATCH] refactor(just): reorganize recipes with sections and add quality checks - Group recipes by purpose (Quality, Testing, Performance, Web, Server) - Add check/quick/ci recipes for standard workflows - Add format-check, audit, and smoke test utilities - Simplify docker commands and improve UX --- Justfile | 116 ++++++++++++++++++++++++++++++++++++++++--------------- 1 file changed, 84 insertions(+), 32 deletions(-) diff --git a/Justfile b/Justfile index e8bb450..f92a5ea 100644 --- a/Justfile +++ b/Justfile @@ -7,17 +7,63 @@ binary_extension := if os() == "windows" { ".exe" } else { "" } default: just --list -# Open HTML coverage report -html: coverage - cargo llvm-cov report \ - # prevents the absolute path from being used in the generated report - --remap-path-prefix \ - --html \ - --open +# === Quality & Validation === -# Display coverage report -report-coverage: coverage - cargo llvm-cov report --remap-path-prefix +# Run all checks (format, lint, test) +check: + @echo "Running all checks..." + @just format-check + @just lint + @just test + @echo "All checks passed!" + +# Quick format + lint for fast iteration +quick: + cargo fmt --all + @cargo clippy --all-targets --all-features --quiet -- -D warnings + +# Full CI pipeline +ci: format-check lint test coverage + @echo "CI pipeline complete!" + +# Auto-format code +format: + cargo fmt --all + +# Check formatting without modifying files +format-check: + cargo fmt --all -- --check + +# Run strict multi-platform lints (desktop + wasm) +lint: + @echo "Running clippy for desktop target..." + @cargo clippy --all-targets --all-features --quiet -- -D warnings + @echo "Running clippy for wasm target..." + @cargo clippy -p pacman --target wasm32-unknown-emscripten --all-targets --all-features --quiet -- -D warnings + @echo "All lints passed!" + +# Fix linting errors & formatting +fix: + cargo fix --workspace --lib --allow-dirty + cargo fmt --all + +# Security audit for vulnerabilities +audit: + cargo audit + +# Verify required tools are installed +smoke: + @command -v cargo >/dev/null || (echo "❌ cargo not found" && exit 1) + @command -v samply >/dev/null || (echo "❌ samply not found" && exit 1) + @command -v bun >/dev/null || (echo "❌ bun not found" && exit 1) + @command -v caddy >/dev/null || (echo "❌ caddy not found" && exit 1) + @echo "✓ All required tools present!" + +# === Testing & Coverage === + +# Run tests with nextest +test: + cargo nextest run --no-fail-fast # Generate baseline LCOV report coverage: @@ -29,34 +75,38 @@ coverage: --profile coverage \ --no-fail-fast nextest +# Display coverage report +report-coverage: coverage + cargo llvm-cov report --remap-path-prefix + +# Open HTML coverage report +html: coverage + cargo llvm-cov report \ + --remap-path-prefix \ + --html \ + --open + +# === Performance & Profiling === + # Profile the project using samply samply: cargo build --profile profile samply record ./target/profile/pacman{{ binary_extension }} -# Build the project for Emscripten +# === Web Build (Emscripten) === + +# Build and serve the web version web *args: bun run pacman/web.build.ts {{args}} bun run --cwd web build caddy file-server --root web/dist/client --listen :8547 -# Run strict multi-platform lints (desktop + wasm) -lint: - @echo "Running clippy for desktop target..." - @cargo clippy --all-targets --all-features --quiet -- -D warnings - @echo "Running clippy for wasm target..." - @cargo clippy -p pacman --target wasm32-unknown-emscripten --all-features --quiet -- -D warnings - @echo "All lints passed!" +# Build web version only (no server) +build-web *args: + bun run pacman/web.build.ts {{args}} + bun run --cwd web build -# Fix linting errors & formatting -fix: - cargo fix --workspace --lib --allow-dirty - cargo fmt --all - -# Push commits & tags -push: - git push origin --tags; - git push +# === Server (Docker) === # Create a postgres container for the server server-postgres: @@ -64,7 +114,6 @@ server-postgres: # Build the server image server-image: - # build the server image docker build \ --platform linux/amd64 \ --file ./pacman-server/Dockerfile \ @@ -73,10 +122,7 @@ server-image: # Build and run the server in a Docker container run-server: server-image - # remove the server container if it exists - docker rm --force --volumes pacman-server - - # run the server container + docker rm --force --volumes pacman-server 2>/dev/null || true docker run \ --rm \ --stop-timeout 2 \ @@ -85,3 +131,9 @@ run-server: server-image --env PORT=3000 \ --env-file pacman-server/.env \ pacman-server + +# === Utilities === + +# Clean build artifacts +clean: + cargo clean