torrust-tracker 3.0.0

A feature rich BitTorrent tracker.
Documentation
name: Testing

on:
  push:
  pull_request:

env:
  CARGO_TERM_COLOR: always

jobs:
  format:
    name: Formatting
    runs-on: ubuntu-latest

    steps:
      - id: checkout
        name: Checkout Repository
        uses: actions/checkout@v4

      - id: setup
        name: Setup Toolchain
        uses: dtolnay/rust-toolchain@stable
        with:
          toolchain: nightly
          components: rustfmt

      - id: cache
        name: Enable Workflow Cache
        uses: Swatinem/rust-cache@v2

      - id: format
        name: Run Formatting-Checks
        run: cargo fmt --check

  check:
    name: Static Analysis
    runs-on: ubuntu-latest
    needs: format

    strategy:
      matrix:
        toolchain: [nightly, stable]

    steps:
      - id: checkout
        name: Checkout Repository
        uses: actions/checkout@v4

      - id: setup
        name: Setup Toolchain
        uses: dtolnay/rust-toolchain@stable
        with:
          toolchain: ${{ matrix.toolchain }}
          components: clippy

      - id: cache
        name: Enable Workflow Cache
        uses: Swatinem/rust-cache@v2

      - id: tools
        name: Install Tools
        uses: taiki-e/install-action@v2
        with:
          tool: cargo-machete

      - id: check
        name: Run Build Checks
        run: cargo check --tests --benches --examples --workspace --all-targets --all-features

      - id: lint
        name: Run Lint Checks
        run: cargo clippy --tests --benches --examples --workspace --all-targets --all-features -- -D clippy::correctness -D clippy::suspicious -D clippy::complexity -D clippy::perf -D clippy::style -D clippy::pedantic

      - id: docs
        name: Lint Documentation
        env:
          RUSTDOCFLAGS: "-D warnings"
        run: cargo doc --no-deps --bins --examples --workspace --all-features

      - id: clean
        name: Clean Build Directory
        run: cargo clean

      - id: deps
        name: Check Unused Dependencies
        run: cargo machete


  unit:
    name: Units
    runs-on: ubuntu-latest
    needs: check

    strategy:
      matrix:
        toolchain: [nightly, stable]

    steps:
      - id: checkout
        name: Checkout Repository
        uses: actions/checkout@v4

      - id: setup
        name: Setup Toolchain
        uses: dtolnay/rust-toolchain@stable
        with:
          toolchain: ${{ matrix.toolchain }}
          components: llvm-tools-preview

      - id: cache
        name: Enable Job Cache
        uses: Swatinem/rust-cache@v2

      - id: tools
        name: Install Tools
        uses: taiki-e/install-action@v2
        with:
          tool: cargo-llvm-cov, cargo-nextest

      - id: test-docs
        name: Run Documentation Tests
        run: cargo test --doc

      - id: test
        name: Run Unit Tests
        run: cargo test --tests --benches --examples --workspace --all-targets --all-features

  e2e:
    name: E2E
    runs-on: ubuntu-latest
    needs: unit

    strategy:
      matrix:
        toolchain: [nightly, stable]

    steps:
      - id: setup
        name: Setup Toolchain
        uses: dtolnay/rust-toolchain@stable
        with:
          toolchain: ${{ matrix.toolchain }}
          components: llvm-tools-preview

      - id: cache
        name: Enable Job Cache
        uses: Swatinem/rust-cache@v2

      - id: checkout
        name: Checkout Repository
        uses: actions/checkout@v4

      - id: test
        name: Run E2E Tests
        run: cargo run --bin e2e_tests_runner -- --config-toml-path "./share/default/config/tracker.e2e.container.sqlite3.toml"