cor 2026.3.1

Colorize JSON-structured log lines from stdin
Documentation
# cor — JSON log colorizer
# https://github.com/alexsavio/cor-cli

# Build the project
build:
    cargo build

# Build for release
build-release:
    cargo build --release

# Install cor locally
install:
    cargo install --path .

# Run all tests
test:
    cargo test

# Run tests with output
test-verbose:
    cargo test -- --nocapture

# Run specific test
test-one TEST:
    cargo test {{TEST}} -- --nocapture

# Run benchmarks
bench:
    cargo bench

# Run clippy linter
lint:
    cargo clippy --all-targets --all-features -- -D warnings

# Auto-fix linting issues where possible
lint-fix:
    cargo clippy --all-targets --all-features --fix

# Format code
format:
    cargo fmt
    rumdl fmt *.md

# Check formatting without modifying files
format-check:
    cargo fmt -- --check
    rumdl check *.md

# Run all quality checks
check: format-check lint test

# Generate documentation
doc:
    cargo doc --no-deps --open

# Clean build artifacts
clean:
    cargo clean

# Full clean and rebuild
rebuild: clean build

# Run the demo (colorized)
demo:
    #!/usr/bin/env bash
    set -euo pipefail
    BIN="cargo run -q --"

    echo "━━━ Default colorized output ━━━"
    echo "$ cat assets/demo.jsonl | cor"
    echo ""
    cat assets/demo.jsonl | $BIN --color=always
    echo ""

    echo "━━━ Filter: warn and above ━━━"
    echo "$ cat assets/demo.jsonl | cor --level warn"
    echo ""
    cat assets/demo.jsonl | $BIN --color=always --level warn
    echo ""

    echo "━━━ Include only specific fields ━━━"
    echo "$ cat assets/demo.jsonl | cor -i method,path,status"
    echo ""
    cat assets/demo.jsonl | $BIN --color=always -i method,path,status
    echo ""

    echo "━━━ Exclude fields ━━━"
    echo "$ cat assets/demo.jsonl | cor -e func,query"
    echo ""
    cat assets/demo.jsonl | $BIN --color=always -e func,query
    echo ""

    echo "━━━ JSON output (filtered) ━━━"
    echo "$ cat assets/demo.jsonl | cor --json --level error"
    echo ""
    cat assets/demo.jsonl | $BIN --json --level error
    echo ""

    echo "━━━ Truncate long field values ━━━"
    echo "$ cat assets/demo.jsonl | cor --max-field-length 20"
    echo ""
    cat assets/demo.jsonl | $BIN --color=always --max-field-length 20

# Generate demo screenshots (requires termshot)
screenshots:
    scripts/demo-screenshots.sh

# Generate coverage report
coverage:
    cargo tarpaulin --out Html --output-dir coverage

# Security audit
audit:
    cargo audit

# Install development tools
dev-tools:
    cargo install cargo-watch
    cargo install cargo-tarpaulin
    cargo install cargo-audit
    cargo install git-cliff
    cargo install rumdl

# Publish to crates.io (dry-run first)
publish-dry:
    cargo publish --dry-run

# Publish to crates.io
publish: check
    cargo publish

# =============================================================================
# Release Management
# =============================================================================

# Show current version
version:
    @sed -n '/^\[package\]/,/^\[/{s/^version = "\(.*\)"/\1/p;}' Cargo.toml

# Generate/update CHANGELOG.md
changelog:
    git-cliff -o CHANGELOG.md

# Preview changelog for next release (unreleased changes)
changelog-preview:
    git-cliff --unreleased --strip header

# Compute next CalVer version (YYYY.MM.MICRO)
_next-version:
    #!/usr/bin/env bash
    set -euo pipefail
    YEAR=$(date +%Y)
    MONTH=$(date +%-m)
    PREFIX="${YEAR}.${MONTH}"
    CURRENT=$(sed -n '/^\[package\]/,/^\[/{s/^version = "\(.*\)"/\1/p;}' Cargo.toml)
    if [[ "$CURRENT" == ${PREFIX}.* ]]; then
        MICRO=${CURRENT##*.}
        echo "${PREFIX}.$((MICRO + 1))"
    else
        echo "${PREFIX}.0"
    fi

# Create a new release with explicit version
# Usage: just release 2026.2.1
release VERSION:
    #!/usr/bin/env bash
    set -euo pipefail

    echo "📦 Releasing v{{VERSION}} (CalVer)"

    # Update Cargo.toml version (only in [package] section)
    sed -i '' '/^\[package\]/,/^\[/{s/^version = ".*"/version = "{{VERSION}}"/;}' Cargo.toml

    # Ensure it compiles and passes checks
    just check

    # Update CHANGELOG.md
    git-cliff --tag "v{{VERSION}}" -o CHANGELOG.md
    rumdl fmt CHANGELOG.md

    # Update Cargo.lock
    cargo check

    # Commit, tag, and push
    git add Cargo.toml Cargo.lock CHANGELOG.md
    git commit -m "chore: release v{{VERSION}}"
    git tag "v{{VERSION}}"
    git push
    git push origin "v{{VERSION}}"

    echo "✅ Released v{{VERSION}}"
    echo "   Run 'just publish' to push to crates.io"

# Create a new release with auto-computed CalVer version
release-next:
    #!/usr/bin/env bash
    set -euo pipefail
    VERSION=$(just _next-version)
    just release "$VERSION"

# =============================================================================
# Help
# =============================================================================

# Show help
help:
    @just --list