basinski 0.1.0

Rescues media files from their own disintegration. Named for William Basinski's Disintegration Loops.
name: CI

on:
  pull_request:
  push:
    branches: [main]

permissions:
  contents: read

concurrency:
  group: ci-${{ github.ref }}
  cancel-in-progress: true

jobs:
  lint:
    name: lint
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v5
      - uses: dtolnay/rust-toolchain@stable
        with:
          components: rustfmt, clippy
      - uses: Swatinem/rust-cache@v2
      - name: rustfmt
        run: cargo fmt --all --check
      - name: clippy
        run: cargo clippy --all-targets -- -D warnings

  test:
    name: test
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v5
      - uses: dtolnay/rust-toolchain@stable
      - uses: Swatinem/rust-cache@v2
      # Unit tests are hermetic (no ffmpeg subprocess) — see CLAUDE.md.
      - name: test
        run: cargo test --all

  e2e:
    name: e2e
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v5
      - uses: dtolnay/rust-toolchain@stable
      - uses: Swatinem/rust-cache@v2
      - name: install ffmpeg (with libx264)
        run: sudo apt-get update && sudo apt-get install -y ffmpeg
      - name: build release binary
        run: cargo build --release
      - name: end-to-end rescue round-trip
        run: bash tests/e2e.sh