name: CI

on:
  push:
    branches:
    - master
  pull_request: {}

jobs:
  check:
    runs-on: ${{ matrix.os }}
    strategy:
      matrix:
        os: [ubuntu-latest, macOS-latest, windows-latest]
        rust: [stable]

    env:
      RUSTFLAGS: "-D warnings"

    steps:
    - uses: hecrj/setup-rust-action@master
      with:
        rust-version: ${{ matrix.rust }}
    - uses: actions/checkout@master
    - name: Install rustfmt
      run: rustup component add rustfmt
    - name: Install cargo-hack
      run: cargo install cargo-hack
    - name: Check fmt
      run: cargo fmt -- --check
    - name: Check features
      run: cargo hack check --all --ignore-private --each-feature --no-dev-deps
    - name: Check all targets
      run: cargo check --all --all-targets --all-features

  # deny-check:
  #   name: cargo-deny check
  #   runs-on: ubuntu-latest
  #   steps:
  #   - uses: actions/checkout@v1
  #   - uses: EmbarkStudios/cargo-deny-action@v1

  test:
    runs-on: ${{ matrix.os }}
    strategy:
      matrix:
        os: [ubuntu-latest, macOS-latest, windows-latest]
        rust: [stable]

    env:
      RUSTFLAGS: "-D warnings"
      # run a lot of quickcheck iterations
      QUICKCHECK_TESTS: 1000

    steps:
    - uses: hecrj/setup-rust-action@master
      with:
        rust-version: ${{ matrix.rust }}
    - name: Install rustfmt
      run: rustup component add rustfmt
    - uses: actions/checkout@master
    - name: Run tests
      run: cargo test --all --all-features

  interop:
    name: Interop Tests
    runs-on: ${{ matrix.os }}
    strategy:
      matrix:
        os: [ubuntu-latest, macOS-latest, windows-latest]
        rust: [stable]

    env:
      RUSTFLAGS: "-D warnings"

    steps:
    - uses: hecrj/setup-rust-action@master
      with:
        rust-version: ${{ matrix.rust }}
    - name: Install rustfmt
      run: rustup component add rustfmt
    - uses: actions/checkout@master
    - name: Run interop tests
      run: ./interop/test.sh
      shell: bash
    - name: Run interop tests with Rustls
      run: ./interop/test.sh --use_tls tls_rustls
      shell: bash
