# cmprss Development Commands # Run `just` to see available recipes alias b := build alias t := test [private] default: @just --list # ============================================================================= # Development Workflows # ============================================================================= # Quick development feedback (build + test + lint) dev: just build just test just lint clippy # Run automatic fixes (clippy fix + nix fixes + format) fix: cargo clippy --fix --allow-dirty --allow-staged --all-targets --all-features statix fix . deadnix --edit . just fmt # ============================================================================= # Building # ============================================================================= # Build the project (debug or release) build mode='debug': cargo build --all-targets --all-features {{ if mode == "release" { "--release" } else { "" } }} --quiet # ============================================================================= # Testing # ============================================================================= # Run tests test *args: #!/usr/bin/env bash set -e args="{{ args }}" if [ -z "$args" ]; then cargo nextest run --no-default-features exit 0 fi case "$args" in full) ./bin/test.sh ;; *) cargo nextest run --no-default-features "$args" ;; esac # ============================================================================= # Linting (Static Analysis) # ============================================================================= # Run linter(s): clippy, deny, typos, statix, deadnix, shellcheck, actionlint, all lint +tools='clippy deny typos statix deadnix shellcheck actionlint': #!/usr/bin/env bash set -e for tool in {{ tools }}; do case "$tool" in clippy) echo "=== Running clippy ===" cargo clippy --all-targets --all-features -- -D warnings ;; deny) echo "=== Running cargo-deny ===" cargo deny check ;; typos) echo "=== Running typos ===" typos --config .config/typos.toml ;; statix) echo "=== Running statix ===" statix check . ;; deadnix) echo "=== Running deadnix ===" deadnix --fail . ;; shellcheck) echo "=== Running shellcheck ===" find . -name "*.sh" -type f -exec shellcheck {} + ;; actionlint) echo "=== Running actionlint ===" find .github/workflows -name "*.yml" -exec actionlint {} + ;; all) just lint clippy deny typos statix deadnix shellcheck actionlint ;; *) echo "Unknown linter: $tool" echo "Options: clippy, deny, typos, statix, deadnix, shellcheck, actionlint, all" exit 1 ;; esac done # ============================================================================= # Formatting # ============================================================================= # Run formatters: (default), check fmt mode='': #!/usr/bin/env bash set -e case "{{ mode }}" in check) cargo fmt -- --check alejandra . --check --quiet prettier --check . --log-level warn typos --config .config/typos.toml ;; *) cargo fmt alejandra . --quiet prettier --write . --log-level warn typos --write-changes --config .config/typos.toml ;; esac # ============================================================================= # Coverage # ============================================================================= # Generate coverage report coverage: cargo tarpaulin --skip-clean --include-tests --output-dir coverage --out lcov --no-default-features # Generate coverage using nix nix-coverage: nix build .#coverage --out-link coverage # ============================================================================= # CI # ============================================================================= # Run CI locally: local (default), full (containers), nix ci mode='local': #!/usr/bin/env bash set -e case "{{ mode }}" in local) just fix just lint just build just test just build release ;; full) act ;; nix) just nix check ;; *) echo "Unknown mode: {{ mode }}" echo "Options: local, full, nix" exit 1 ;; esac # ============================================================================= # Nix # ============================================================================= # Nix commands: build, check, fmt nix action='check': #!/usr/bin/env bash set -e case "{{ action }}" in build) nix build ;; check) nix flake check ;; fmt) nix fmt ;; *) echo "Unknown action: {{ action }}" echo "Options: build, check, fmt" exit 1 ;; esac # ============================================================================= # Commit # ============================================================================= # Interactive conventional commit commit: ./bin/commit.sh