# justfile for announcement 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)
# Note: Target is 98% (actual: 98.52%) due to:
# - 3 extremely narrow TOCTOU race windows that are challenging to hit reliably in testing
coverage_target := "98"
# Timeout for coverage analysis in seconds
coverage_timeout := "600"
# Mutation testing timeout in seconds (default: none, runs until complete)
# Uncomment to limit mutation testing duration
# mutation_timeout := "600"
# Fuzz testing duration per target in seconds
fuzz_time := "900"
# =============================================================================
# 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 --all-features &
wait
echo "✅ Development checks passed"
# Pre-commit checks: format-check + lint + typecheck across all feature combinations
check:
@echo "Running format check..."
cargo fmt -- --check
@echo ""
@echo "Running clippy on all feature combinations..."
RUSTFLAGS="{{rustflags}}" cargo clippy --all-targets --all-features
RUSTFLAGS="{{rustflags}}" cargo clippy --all-targets --no-default-features
RUSTFLAGS="{{rustflags}}" cargo clippy --all-targets --no-default-features --features std
RUSTFLAGS="{{rustflags}}" cargo clippy --all-targets --features std,tracing
@echo ""
@echo "Verifying compilation on all feature combinations..."
RUSTFLAGS="{{rustflags}}" cargo test --all-features --no-run
RUSTFLAGS="{{rustflags}}" cargo test --no-default-features --no-run
RUSTFLAGS="{{rustflags}}" cargo test --no-default-features --features std --no-run
RUSTFLAGS="{{rustflags}}" cargo test --features std,tracing --no-run
@echo ""
@echo "✅ All checks passed"
# Run all tests with comprehensive feature coverage
test:
@echo "Running tests with all feature combinations..."
RUSTFLAGS="{{rustflags}}" cargo nextest run --all-features
RUSTFLAGS="{{rustflags}}" cargo nextest run --no-default-features
RUSTFLAGS="{{rustflags}}" cargo nextest run --no-default-features --features std
RUSTFLAGS="{{rustflags}}" cargo nextest run --features std,tracing
@echo "✅ All feature combinations tested"
# 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 mutants 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 "announcement = \"$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/announcement-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 " - Mutation testing complete"
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 --html --output-dir coverage --fail-under-lines {{coverage_target}}
@echo "Coverage report: coverage/html/index.html"
# Mutation testing (NUCLEAR) - maximum aggression with parallelism
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
cargo deny check
@echo "✅ Security checks passed"
# Run Miri for undefined behavior detection (using default std feature)
miri:
@echo "Running Miri tests for UB detection..."
cargo +nightly miri test
# Run comprehensive fuzz tests
fuzz:
@echo "Running comprehensive fuzz tests ({{fuzz_time}}s per target..."
cargo +nightly fuzz build
cargo +nightly fuzz run fuzz_announce -- -max_total_time={{fuzz_time}}
cargo +nightly fuzz run fuzz_close -- -max_total_time={{fuzz_time}}
cargo +nightly fuzz run fuzz_listen -- -max_total_time={{fuzz_time}}
cargo +nightly fuzz run fuzz_concurrent -- -max_total_time={{fuzz_time}}
# =============================================================================
# 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
# =============================================================================
# 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 "announcement crate - Runtime-agnostic oneshot broadcast channel"
@echo ""
@echo "Rust: $(rustc --version)"
@echo "Cargo: $(cargo --version)"
@echo ""
@echo "Dependencies:"
@cargo tree --depth 1
# Run all examples (user guide verification)
examples:
@echo "Running all examples..."
cargo run --example 01_basic_usage
cargo run --example 02_async_listening
cargo run --example 03_multiple_listeners
cargo run --example 04_efficient_broadcasting
cargo run --example 05_blocking_operations
cargo run --example shutdown
cargo run --example config_broadcast
cargo run --example lazy_init
@echo "✅ All examples completed successfully"
# Clean build artifacts
clean:
cargo clean
rm -rf mutants.out/ mutants.out.old/ mutation_history.json
rm -f bench-output.txt