tui-checkbox 0.4.6

A customizable checkbox widget for Ratatui TUI applications
Documentation
#!/usr/bin/env nu
# ──────────────────────────────────────────────────────────────────────────────
# tui-checkbox — Pre-publish checks
# ──────────────────────────────────────────────────────────────────────────────
# Runs formatting, clippy, tests, documentation, and dry-run publish checks
# before an actual `cargo publish`.
#
# Usage:
#   nu scripts/check_publish.nu
# ──────────────────────────────────────────────────────────────────────────────

def main [] {
    print "══════════════════════════════════════════════════════════"
    print "  tui-checkbox — Pre-publish checks"
    print "══════════════════════════════════════════════════════════"
    print ""

    mut errors = 0

    # ── 1. Formatting ─────────────────────────────────────────────────────
    print "── Step 1: Checking code formatting ──"
    let fmt_result = (do { cargo fmt -- --check } | complete)
    if $fmt_result.exit_code != 0 {
        print "  ❌ Code formatting check failed"
        print $fmt_result.stderr
        $errors = $errors + 1
    } else {
        print "  ✅ Code formatting OK"
    }
    print ""

    # ── 2. Clippy ─────────────────────────────────────────────────────────
    print "── Step 2: Running clippy ──"
    let clippy_result = (do { cargo clippy --lib -- -D warnings } | complete)
    if $clippy_result.exit_code != 0 {
        print "  ❌ Clippy found issues"
        print $clippy_result.stderr
        $errors = $errors + 1
    } else {
        print "  ✅ Clippy passed"
    }
    print ""

    # ── 3. Tests ──────────────────────────────────────────────────────────
    print "── Step 3: Running tests ──"
    let test_result = (do { cargo test --all-features } | complete)
    if $test_result.exit_code != 0 {
        print "  ❌ Tests failed"
        print $test_result.stderr
        $errors = $errors + 1
    } else {
        print "  ✅ All tests passed"
    }
    print ""

    # ── 4. Documentation ─────────────────────────────────────────────────
    print "── Step 4: Building documentation ──"
    let doc_result = (do { cargo doc --no-deps } | complete)
    if $doc_result.exit_code != 0 {
        print "  ❌ Documentation build failed"
        print $doc_result.stderr
        $errors = $errors + 1
    } else {
        print "  ✅ Documentation builds OK"
    }
    print ""

    # ── 5. Build examples ────────────────────────────────────────────────
    print "── Step 5: Building examples ──"
    let examples_result = (do { cargo build --examples } | complete)
    if $examples_result.exit_code != 0 {
        print "  ❌ Examples build failed"
        print $examples_result.stderr
        $errors = $errors + 1
    } else {
        print "  ✅ Examples build OK"
    }
    print ""

    # ── 6. Required files ────────────────────────────────────────────────
    print "── Step 6: Checking required files ──"
    let required_files = ["README.md" "LICENSE" "Cargo.toml" "CHANGELOG.md"]
    mut missing = 0
    for file in $required_files {
        if not ($file | path exists) {
            print $"  ❌ Missing: ($file)"
            $missing = $missing + 1
        }
    }
    if $missing > 0 {
        $errors = $errors + 1
    } else {
        print "  ✅ All required files present"
    }
    print ""

    # ── 7. Dry-run publish ───────────────────────────────────────────────
    print "── Step 7: Dry-run publish ──"
    let publish_result = (do { cargo publish --dry-run } | complete)
    if $publish_result.exit_code != 0 {
        print "  ❌ Publish dry-run failed"
        print $publish_result.stderr
        $errors = $errors + 1
    } else {
        print "  ✅ Publish dry-run OK"
    }
    print ""

    # ── Summary ───────────────────────────────────────────────────────────
    print "══════════════════════════════════════════════════════════"
    if $errors == 0 {
        print "  ✅ All pre-publish checks passed!"
        print ""
        print "  Next step:"
        print "    cargo publish"
    } else {
        print $"  ❌ ($errors) check\(s\) failed. Please fix before publishing."
        exit 1
    }
    print "══════════════════════════════════════════════════════════"
}