name: CI
on: [push, pull_request]

jobs:
  test:
    name: Test
    runs-on: ${{ matrix.os }}
    strategy:
      matrix:
        # I don't really understand the build matrix here...
        build: [stable, beta, nightly, macos, windows, mingw]
        include:
          - build: stable
            os: ubuntu-latest
            rust: stable
          - build: beta
            os: ubuntu-latest
            rust: beta
          - build: nightly
            os: ubuntu-latest
            rust: nightly
          - build: macos
            os: macos-latest
            rust: stable
          - build: windows
            os: windows-2022
            rust: stable
          - build: mingw
            os: windows-2022
            rust: stable-x86_64-gnu
    steps:
    - uses: actions/checkout@v3
    - name: Install Rust (rustup)
      run: rustup update ${{ matrix.rust }} --no-self-update && rustup default ${{ matrix.rust }}
      shell: bash
    - run: cargo build
    - run: rustdoc --test README.md -L target/debug/deps --extern flate2=target/debug/libflate2.rlib --edition=2018
    - run: cargo test
    - run: cargo test --features zlib
    - run: cargo test --features zlib --no-default-features
    - run: cargo test --features zlib-default --no-default-features
    - run: cargo test --features zlib-ng-compat --no-default-features
      if: matrix.build != 'mingw'
    - run: cargo test --features zlib-ng --no-default-features
      if: matrix.build != 'mingw'
    - run: cargo test --features cloudflare_zlib --no-default-features
      if: matrix.build != 'mingw'
    - run: |
        if ! cargo check --no-default-features 2>&1 | grep "You need to choose"; then 
          echo "expected message stating a zlib backend must be chosen"
          exit 1
        fi
      if: matrix.build == 'stable' 

  rustfmt:
    name: Rustfmt
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v3
    - name: Install Rust
      run: rustup update stable && rustup default stable && rustup component add rustfmt
    - run: cargo fmt -- --check

  wasm:
    name: WebAssembly
    runs-on: ubuntu-latest
    strategy:
      matrix:
        target: [wasm32-unknown-unknown, wasm32-wasi]
    steps:
    - uses: actions/checkout@v3
    - name: Install Rust
      run: rustup update stable && rustup default stable && rustup target add ${{ matrix.target }}
    - run: cargo build --target ${{ matrix.target }}
