cargo-setupx 0.1.0

Rust-based CLI and library that automates the initial setup of new Rust projects with modular configuration packs
Documentation
//! Pre-push git hook template

/// Pre-push git hook template
pub const PRE_PUSH_HOOK: &str = r#"#!/bin/sh
# Git pre-push hook
# Runs code quality checks before allowing push

# Initialize status tracking
OVERALL_STATUS=0
FORMAT_STATUS="⏳"
LINT_STATUS="⏳"
SPELL_STATUS="⏳"
TYPE_STATUS="⏳"
TEST_STATUS="⏳"

echo "🔍 Running pre-push checks..."
echo ""

# 1. Format check
echo "📝 Checking code formatting..."
FORMAT_OUTPUT=$(mktemp)
cargo fmt --check > "$FORMAT_OUTPUT" 2>&1
FMT_EXIT=$?
taplo format --check >> "$FORMAT_OUTPUT" 2>&1
TAPLO_EXIT=$?
if [ $FMT_EXIT -eq 0 ] && [ $TAPLO_EXIT -eq 0 ]; then
    FORMAT_STATUS="✅ PASS"
    echo "✅ Formatting check passed"
else
    FORMAT_STATUS="❌ FAIL"
    echo "❌ Code formatting failed. Run 'make fmt' to fix."
    OVERALL_STATUS=1
fi
rm -f "$FORMAT_OUTPUT"
echo ""

# 2. Linting
echo "🔎 Running linter..."
CLIPPY_OUTPUT=$(mktemp)
cargo clippy --all-targets --all-features -- -D warnings > "$CLIPPY_OUTPUT" 2>&1
CLIPPY_EXIT=$?
if [ $CLIPPY_EXIT -eq 0 ]; then
    LINT_STATUS="✅ PASS"
    echo "✅ Linting passed"
else
    LINT_STATUS="❌ FAIL"
    echo "❌ Clippy found issues. Fix them before pushing."
    OVERALL_STATUS=1
fi
rm -f "$CLIPPY_OUTPUT"
echo ""

# 3. Spell check
echo "📖 Checking spelling..."
TYPOS_OUTPUT=$(mktemp)
typos > "$TYPOS_OUTPUT" 2>&1
TYPOS_EXIT=$?
if [ $TYPOS_EXIT -eq 0 ]; then
    SPELL_STATUS="✅ PASS"
    echo "✅ Spell check passed"
else
    SPELL_STATUS="❌ FAIL"
    echo "❌ Typos found. Run 'make spell-fix' to fix."
    OVERALL_STATUS=1
fi
rm -f "$TYPOS_OUTPUT"
echo ""

# 4. Type check
echo "🔧 Type checking..."
CHECK_OUTPUT=$(mktemp)
cargo check --all-targets > "$CHECK_OUTPUT" 2>&1
CHECK_EXIT=$?
if [ $CHECK_EXIT -eq 0 ]; then
    TYPE_STATUS="✅ PASS"
    echo "✅ Type check passed"
else
    TYPE_STATUS="❌ FAIL"
    echo "❌ Type check failed. Fix errors before pushing."
    OVERALL_STATUS=1
fi
rm -f "$CHECK_OUTPUT"
echo ""

# 5. Tests
echo "🧪 Running tests..."
TEST_OUTPUT=$(mktemp)
cargo test --all-targets > "$TEST_OUTPUT" 2>&1
TEST_EXIT=$?
if [ $TEST_EXIT -eq 0 ]; then
    TEST_STATUS="✅ PASS"
    echo "✅ Tests passed"
else
    TEST_STATUS="❌ FAIL"
    echo "❌ Tests failed. Fix failing tests before pushing."
    OVERALL_STATUS=1
fi
rm -f "$TEST_OUTPUT"
echo ""

# Display summary
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo "📊 PRE-PUSH CHECKS SUMMARY"
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
printf "%-25s %s\n" "Code Formatting (fmt)" "$FORMAT_STATUS"
printf "%-25s %s\n" "Linting (clippy)" "$LINT_STATUS"
printf "%-25s %s\n" "Spell Check (typos)" "$SPELL_STATUS"
printf "%-25s %s\n" "Type Check (cargo check)" "$TYPE_STATUS"
printf "%-25s %s\n" "Tests (cargo test)" "$TEST_STATUS"
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"

if [ $OVERALL_STATUS -eq 0 ]; then
    echo "🎉 All checks passed! Proceeding with push..."
    exit 0
else
    echo "❌ Some checks failed. Please fix the issues before pushing."
    exit 1
fi
"#;