# justfile for dagx crate # High-level development and CI workflows # ============================================================================= # Configuration # ============================================================================= # Treat all warnings as errors rustflags := "-D warnings" # Code coverage target percentage (fail if below this threshold) coverage_target := "80" # Timeout for coverage analysis in seconds coverage_timeout := "600" # Benchmark timeout in seconds bench_timeout := "300" # ============================================================================= # Default recipe - show available recipes default: @just --list # ============================================================================= # Primary Development Workflows # ============================================================================= # Quick development loop: format + lint + fast tests dev: #!/usr/bin/env bash set -e echo "🔄 Running development checks..." cargo fmt RUSTFLAGS="{{rustflags}}" cargo clippy --all-targets --all-features & RUSTFLAGS="{{rustflags}}" cargo nextest run --lib --all-features & wait echo "✅ Development checks passed" # Pre-commit checks: format-check + lint + typecheck check: @echo "Running format check..." cargo fmt -- --check @echo "" @echo "Running clippy..." RUSTFLAGS="{{rustflags}}" cargo clippy --all-targets --all-features RUSTFLAGS="{{rustflags}}" cargo clippy --all-targets --no-default-features @echo "" @echo "Verifying compilation..." RUSTFLAGS="{{rustflags}}" cargo test --lib --all-features --no-run RUSTFLAGS="{{rustflags}}" cargo test --lib --no-default-features --no-run @echo "" @echo "✅ All checks passed" # Run all tests test: @echo "Running all tests..." RUSTFLAGS="{{rustflags}}" cargo nextest run --lib --all-features @echo "✅ All tests passed" # Before pushing: check + test + coverage pre-push: check test coverage @echo "" @echo "✅ Pre-push checks passed - safe to push!" # Comprehensive pre-release validation pre-release: check test coverage audit examples bench-check #!/usr/bin/env bash set -e # Verify documentation version matches crate version echo "" echo "📋 Verifying documentation version..." VERSION=$(grep '^version = ' Cargo.toml | head -1 | sed 's/.*"\(.*\)".*/\1/') MAJOR_MINOR=$(echo $VERSION | cut -d. -f1-2) if ! grep -q "dagx = \"$MAJOR_MINOR\"" README.md; then echo "❌ ERROR: README.md should reference version $MAJOR_MINOR (crate is $VERSION)" echo " Update installation examples in README.md" exit 1 fi echo "✅ Documentation version correct: $MAJOR_MINOR" # Package verification echo "" echo "📦 Verifying package..." cargo publish --dry-run cargo package --list > /tmp/dagx-files.txt echo "✅ Package verified" echo "" echo "✅ All pre-release checks passed!" echo " - Code formatted and linted" echo " - All tests passing" echo " - Code coverage ≥ {{coverage_target}}%" echo " - No security vulnerabilities" echo " - Dependencies verified" echo " - All examples run successfully" echo " - All benchmarks compile" echo " - Documentation version verified" echo " - Package ready for publication" echo "" echo "📦 Ready to publish! Run: cargo publish" # ============================================================================= # Quality & Security # ============================================================================= # Run code coverage analysis coverage: @echo "Running code coverage analysis (target: {{coverage_target}}%)..." cargo llvm-cov nextest --lib --html --output-dir coverage --fail-under-lines {{coverage_target}} @echo "Coverage report: coverage/html/index.html" # Mutation testing with cargo-mutants mutants: @echo "Running mutation testing..." @echo "⚠️ This will use significant CPU and memory resources!" cargo mutants \ --no-shuffle \ --test-tool nextest \ --jobs 3 \ --all-features \ -vV # Security audit + dependency checks audit: @echo "🔒 Running security checks..." cargo audit @echo "✅ Security checks passed" # Run Miri for undefined behavior detection miri: @echo "Running Miri tests for UB detection..." cargo +nightly miri test --lib # ============================================================================= # Benchmarks # ============================================================================= # Verify benchmarks compile bench-check: @echo "Verifying benchmarks compile..." cargo bench --no-run @echo "✅ All benchmarks compile" # Run all benchmarks bench: cargo bench # Run benchmarks and save as baseline bench-baseline: cargo bench -- --save-baseline baseline # Compare benchmarks against baseline bench-compare: cargo bench -- --baseline baseline # Run specific benchmark suite bench-suite suite: cargo bench --bench {{suite}} # ============================================================================= # Documentation & Utilities # ============================================================================= # Build documentation and open in browser doc: cargo doc --no-deps --all-features --open # Format code fmt: cargo fmt # Show project information info: @echo "dagx crate - Type-safe DAG execution framework for async Rust" @echo "" @echo "Rust: $(rustc --version)" @echo "Cargo: $(cargo --version)" @echo "" @echo "Dependencies:" @cargo tree --depth 1 # Run all examples examples: @echo "Running all examples..." cargo run --example 01_basic cargo run --example 02_fan_out cargo run --example 03_fan_in cargo run --example 04_parallel_computation cargo run --example circuit_breaker cargo run --example complex_dag cargo run --example conditional_workflow cargo run --example custom_types cargo run --example data_pipeline cargo run --example debug_tracing cargo run --example error_handling cargo run --example large_dag cargo run --example parallelism_proof cargo run --example retry_strategies cargo run --example timeout cargo run --example tracing_example @echo "✅ All examples completed successfully" # Clean build artifacts clean: cargo clean rm -rf mutants.out/ mutants.out.old/ mutation_history.json rm -rf target/criterion rm -rf coverage/