name: Unit tests

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

env:
  CARGO_TERM_COLOR: always

# Ensures that we cancel running jobs for the same PR / same workflow.
concurrency:
  group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
  cancel-in-progress: true

jobs:
  check:

    runs-on: ubuntu-latest

    steps:
    - uses: actions/checkout@v4

    - name: Install nightly
      uses: actions-rs/toolchain@v1
      with:
            toolchain: nightly
            profile: minimal
            components: rustfmt
    - name: Install stable
      uses: actions-rs/toolchain@v1
      with:
            toolchain: stable
            profile: minimal
            components: clippy

    - uses: Swatinem/rust-cache@v2

    - name: Check Formatting
      run: cargo +nightly fmt --all -- --check
    
    - name: Check Stable Compilation
      run: cargo build --all-features

    
    - name: Check Bench Compilation
      run: cargo +nightly bench --no-run --profile=dev --all-features

    - uses: actions-rs/clippy-check@v1
      with:
        toolchain: stable
        token: ${{ secrets.GITHUB_TOKEN }}
        args: --tests

  test:

    runs-on: ubuntu-latest

    strategy:
      matrix:
        features: [
            { label: "all", flags: "mmap,stopwords,lz4-compression,zstd-compression,failpoints" },
            { label: "quickwit", flags: "mmap,quickwit,failpoints" }
        ]

    name: test-${{ matrix.features.label}}

    steps:
    - uses: actions/checkout@v4

    - name: Install stable
      uses: actions-rs/toolchain@v1
      with:
            toolchain: stable
            profile: minimal
            override: true

    - uses: taiki-e/install-action@nextest
    - uses: Swatinem/rust-cache@v2

    - name: Run tests
      run: cargo +stable nextest run --features ${{ matrix.features.flags }} --verbose --workspace

    - name: Run doctests
      run: cargo +stable test --doc --features ${{ matrix.features.flags }} --verbose --workspace
