queue-runtime 0.2.0

Multi-provider queue runtime for Queue-Keeper
Documentation
name: Rust CI

on:
  workflow_dispatch:
  push:
    branches:
      - "**"
  pull_request:
    branches:
      - master

jobs:
  test:
    name: unit-tests
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6

      - name: Install Rust
        run: rustup update stable

      - name: Cache Rust dependencies
        uses: Swatinem/rust-cache@e18b497796c12c097a38f9edb9d0641fb99eee32 # v2

      - name: Install cargo-llvm-cov
        uses: taiki-e/install-action@cf525cb33f51aca27cd6fa02034117ab963ff9f1 # v2
        with:
          tool: cargo-llvm-cov@0.6.23

      - name: Generate code coverage
        run: cargo llvm-cov --workspace --codecov --output-path codecov.json
        # Note: --all-features is intentionally omitted.  The only declared feature
        # is `integration-tests = []` which gates integration test binaries that
        # require Docker.  Enabling it here would cause the coverage job to spin up
        # NATS/RabbitMQ containers; those are run in the dedicated integration_tests job.
      - name: Upload coverage to Codecov
        uses: codecov/codecov-action@57e3a136b779b570ffcdbf80b3bdc90e7fab3de2 # v6
        with:
          token: ${{ secrets.CODECOV_TOKEN }} # not required for public repos
          files: codecov.json
          fail_ci_if_error: true

  doc_test:
    name: doc-tests
    runs-on: ubuntu-latest
    needs: test
    steps:
      - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6

      - name: Install Rust
        run: rustup update stable

      - name: Cache Rust dependencies
        uses: Swatinem/rust-cache@e18b497796c12c097a38f9edb9d0641fb99eee32 # v2

      - name: Run doc-tests
        run: cargo test --doc --all-features --workspace

  bench_test:
    name: bench-tests
    runs-on: ubuntu-latest
    needs: test
    steps:
      - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6

      - name: Install Rust
        run: rustup update stable

      - name: Cache Rust dependencies
        uses: Swatinem/rust-cache@e18b497796c12c097a38f9edb9d0641fb99eee32 # v2

      - name: Run bench-tests
        run: cargo test --benches

  contract_tests:
    name: contract-tests
    runs-on: ubuntu-latest
    needs: test
    steps:
      - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6

      - name: Install Rust
        run: rustup update stable

      - name: Cache Rust dependencies
        uses: Swatinem/rust-cache@e18b497796c12c097a38f9edb9d0641fb99eee32 # v2

      - name: Run contract tests (InMemoryProvider, no Docker)
        run: cargo test --test contract_tests

  integration_tests:
    name: integration-tests
    runs-on: ubuntu-latest
    needs: test
    strategy:
      fail-fast: false
      matrix:
        provider: [ nats, rabbitmq ]
    steps:
      - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6

      - name: Install Rust
        run: rustup update stable

      - name: Cache Rust dependencies
        uses: Swatinem/rust-cache@e18b497796c12c097a38f9edb9d0641fb99eee32 # v2

      - name: Run ${{ matrix.provider }} integration tests
        run: cargo test --test ${{ matrix.provider }}_integration --features
          integration-tests -- --test-threads=1
        env:
          # Testcontainers uses Docker daemon available on ubuntu-latest
          # --test-threads=1 serializes test execution to avoid NATS JetStream
          # WorkQueue consumer conflicts when concurrently creating consumers on
          # the same stream from multiple tokio::test instances.
          TESTCONTAINERS_RYUK_DISABLED: "true"

  fuzz_tests:
    name: fuzz-tests
    runs-on: ubuntu-latest
    needs: test
    steps:
      - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6

      - name: Install Rust (nightly required for cargo-fuzz)
        run: rustup toolchain install nightly

      - name: Cache Rust dependencies
        uses: Swatinem/rust-cache@e18b497796c12c097a38f9edb9d0641fb99eee32 # v2

      - name: Install cargo-fuzz
        run: cargo +nightly install cargo-fuzz

      - name: Fuzz queue_name_new (60s)
        run: cargo +nightly fuzz run queue_name_new -- -max_total_time=60

      - name: Fuzz session_id_new (60s)
        run: cargo +nightly fuzz run session_id_new -- -max_total_time=60