name: cargo

on:
  push:
    branches: [master]
  pull_request:
    branches: [master]

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

env:
  CARGO_TERM_COLOR: always

jobs:
  test:
    name: Test
    strategy:
      matrix:
        os: ["ubuntu-latest", "macos-latest"]
        toolchain:
          - 1.65.0 # min supported version (https://github.com/webrtc-rs/webrtc/#toolchain)
          - stable
    runs-on: ${{ matrix.os }}
    steps:
      - uses: actions/checkout@v3
      - name: Install Rust ${{ matrix.toolchain }}
        uses: actions-rs/toolchain@v1
        with:
          toolchain: ${{ matrix.toolchain }}
          override: true
      - name: Install Rust
        run: rustup update stable
      - name: 📦 Cache cargo registry
        uses: actions/cache@v3
        with:
          path: ~/.cargo/registry
          key: ${{ runner.os }}-cargo-registry-${{ hashFiles('**/Cargo.lock') }}
          restore-keys: |
            ${{ runner.os }}-cargo-registry-
      - uses: actions-rs/toolchain@v1
        with:
          toolchain: ${{ matrix.toolchain }}
          profile: minimal
          override: true
      - name: 🏭 Cache dependencies
        uses: Swatinem/rust-cache@v2
      - name: Test
        run: cargo test --features metrics

  test_windows:
    name: Test (windows)
    strategy:
      matrix:
        toolchain:
          - 1.63.0 # min supported version (https://github.com/webrtc-rs/webrtc/#toolchain)
          - stable
    runs-on: windows-latest
    steps:
      - uses: actions/checkout@v3
      - name: Install Rust ${{ matrix.toolchain }}
        uses: actions-rs/toolchain@v1
        with:
          toolchain: ${{ matrix.toolchain }}
          override: true
      - name: Install Rust
        run: rustup update stable
      - name: 📦 Cache cargo registry
        uses: actions/cache@v3
        with:
          path: ~/.cargo/registry
          key: ${{ runner.os }}-cargo-registry-${{ hashFiles('**/Cargo.lock') }}
          restore-keys: |
            ${{ runner.os }}-cargo-registry-
      - uses: actions-rs/toolchain@v1
        with:
          toolchain: ${{ matrix.toolchain }}
          profile: minimal
          override: true
      - name: Copy to C drive
        run: cp D:\a C:\ -Recurse
      # - name: 🏭 Cache dependencies
      #   uses: Swatinem/rust-cache@v2
      - name: Test
        working-directory: "C:\\a\\webrtc\\webrtc"
        run: cargo test --features metrics

  rustfmt_and_clippy:
    name: Check formatting style and run clippy
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - uses: actions-rs/toolchain@v1
        with:
          toolchain: stable
          profile: minimal
          components: clippy, rustfmt
          override: true
      - name: 📦 Cache cargo registry
        uses: actions/cache@v3
        with:
          path: ~/.cargo/registry
          key: ${{ runner.os }}-cargo-registry-${{ hashFiles('**/Cargo.lock') }}
          restore-keys: |
            ${{ runner.os }}-cargo-registry-
      - name: 📎 Run clippy
        uses: actions-rs/cargo@v1
        with:
          command: clippy
          args: --workspace --all-targets --all-features --all -- -D warnings
      - name: 💬 Check formatting
        uses: actions-rs/cargo@v1
        with:
          command: fmt
          args: --all -- --check

  minimal_versions:
    name: Compile and test with minimal versions
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - name: 🌙 Install latest nightly
        uses: actions-rs/toolchain@v1
        with:
          toolchain: nightly
          override: true
      - uses: taiki-e/install-action@cargo-hack
      - uses: taiki-e/install-action@cargo-minimal-versions
      - run: cargo minimal-versions check --workspace --all-features --ignore-private -v
      - run: cargo minimal-versions build --workspace --all-features --ignore-private -v
      - run: cargo minimal-versions test --workspace --all-features -v
