name: rust-next
on:
  schedule:
  - cron: '12 12 12 * *'
jobs:
  test:
    name: Test
    strategy:
      fail-fast: false
      matrix:
        os: ["ubuntu-latest", "windows-latest", "macos-latest"]
        rust: ["stable", "beta"]
        include:
        - os: ubuntu-latest
          rust: "nightly"
    continue-on-error: ${{ matrix.rust != 'stable' }}
    runs-on: ${{ matrix.os }}
    steps:
    - name: Checkout repository
      uses: actions/checkout@v2
    - name: Install Rust
      uses: actions-rs/toolchain@v1
      with:
        toolchain: ${{ matrix.rust }}
        profile: minimal
        override: true
    - uses: Swatinem/rust-cache@v1
    - name: Default features
      run: cargo test --workspace
    - name: All features
      run: cargo test --workspace --all-features
    - name: No-default features
      run: cargo test --workspace --no-default-features
  rustfmt:
    name: rustfmt
    strategy:
      matrix:
        rust:
        - stable
        - beta
    continue-on-error: ${{ matrix.rust != 'stable' }}
    runs-on: ubuntu-latest
    steps:
    - name: Checkout repository
      uses: actions/checkout@v2
    - name: Install Rust
      uses: actions-rs/toolchain@v1
      with:
        toolchain: ${{ matrix.rust }}
        profile: minimal
        override: true
        components: rustfmt
    - uses: Swatinem/rust-cache@v1
    - name: Check formatting
      run: cargo fmt --all -- --check
  clippy:
    name: clippy
    strategy:
      matrix:
        rust:
        - 1.59.0  # MSRV
        - stable
    continue-on-error: ${{ matrix.rust != '1.59.0' }}  # MSRV
    runs-on: ubuntu-latest
    steps:
    - name: Checkout repository
      uses: actions/checkout@v2
    - name: Install Rust
      uses: actions-rs/toolchain@v1
      with:
        toolchain: ${{ matrix.rust }}
        profile: minimal
        override: true
        components: clippy
    - uses: Swatinem/rust-cache@v1
    - uses: actions-rs/clippy-check@v1
      with:
        token: ${{ secrets.GITHUB_TOKEN }}
        args: --workspace --all-features --all-targets -- -D warnings
