rust_scraper 1.0.0

Production-ready web scraper with Clean Architecture, TUI selector, and sitemap support
Documentation
name: CI

on:
  push:
    branches: [main]
  pull_request:
    branches: [main]

env:
  CARGO_TERM_COLOR: always

jobs:
  # Build
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4

      - name: Install Rust
        uses: dtolnay/rust-toolchain@stable

      - name: Cache Cargo
        uses: Swatinem/rust-cache@v2

      - name: Build
        run: cargo build --verbose

      - name: Build Release
        run: cargo build --release --verbose

      - name: Export Failure Context
        if: failure()
        run: |
          mkdir -p .github/outputs
          echo "### ❌ Fallo en Job: Build" >> .github/outputs/error_log.md
          echo '```' >> .github/outputs/error_log.md
          cargo build --verbose 2>&1 | tail -n 50 >> .github/outputs/error_log.md || true
          echo '```' >> .github/outputs/error_log.md

      - name: Upload Error Logs
        if: failure()
        uses: actions/upload-artifact@v4
        with:
          name: build-error-log
          path: .github/outputs/error_log.md

  # Test
  test:
    runs-on: ubuntu-latest
    needs: build
    steps:
      - uses: actions/checkout@v4

      - name: Install Rust
        uses: dtolnay/rust-toolchain@stable

      - name: Cache Cargo
        uses: Swatinem/rust-cache@v2

      - name: Run Tests
        run: cargo test --verbose

      - name: Run Tests (Release)
        run: cargo test --release --verbose

      - name: Export Failure Context
        if: failure()
        run: |
          mkdir -p .github/outputs
          echo "### ❌ Fallo en Job: Test" >> .github/outputs/error_log.md
          echo '```' >> .github/outputs/error_log.md
          cargo test --verbose 2>&1 | tail -n 50 >> .github/outputs/error_log.md || true
          echo '```' >> .github/outputs/error_log.md

      - name: Upload Error Logs
        if: failure()
        uses: actions/upload-artifact@v4
        with:
          name: test-error-log
          path: .github/outputs/error_log.md

  # Clippy - Deny correctness, warn on style/perf
  clippy:
    runs-on: ubuntu-latest
    needs: build
    steps:
      - uses: actions/checkout@v4

      - name: Install Rust
        uses: dtolnay/rust-toolchain@stable
        with:
          components: clippy

      - name: Cache Cargo
        uses: Swatinem/rust-cache@v2

      - name: Run Clippy (deny correctness, suspicious, unused)
        run: cargo clippy -- -D clippy::correctness -D clippy::suspicious -D clippy::unused -W clippy::perf -W clippy::style

      - name: Export Failure Context
        if: failure()
        run: |
          mkdir -p .github/outputs
          echo "### ❌ Fallo en Job: Clippy" >> .github/outputs/error_log.md
          echo '```' >> .github/outputs/error_log.md
          cargo clippy 2>&1 | tail -n 50 >> .github/outputs/error_log.md || true
          echo '```' >> .github/outputs/error_log.md

      - name: Upload Error Logs
        if: failure()
        uses: actions/upload-artifact@v4
        with:
          name: clippy-error-log
          path: .github/outputs/error_log.md

  # Format
  fmt:
    runs-on: ubuntu-latest
    needs: build
    steps:
      - uses: actions/checkout@v4

      - name: Install Rust
        uses: dtolnay/rust-toolchain@stable
        with:
          components: rustfmt

      - name: Check Format
        run: cargo fmt --all -- --check

  # All checks pass
  checks:
    runs-on: ubuntu-latest
    needs: [build, test, clippy, fmt]
    steps:
      - name: All checks passed
        run: echo "✅ All CI checks passed"