name: rust-next

permissions:
  contents: read

on:
  schedule:
  - cron: '8 8 8 * *'

env:
  CARGO_TERM_COLOR: always
  CLICOLOR: 1

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

jobs:
  test:
    name: Test
    strategy:
      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@v4
    - name: Install Rust
      uses: dtolnay/rust-toolchain@stable
      with:
        toolchain: ${{ matrix.rust }}
    - uses: Swatinem/rust-cache@v2
    - uses: taiki-e/install-action@cargo-hack
    - name: Build
      run: cargo test --workspace --no-run
    - name: Test
      run: cargo hack test --feature-powerset --exclude-features nightly --workspace
  latest:
    name: "Check latest dependencies"
    runs-on: ubuntu-latest
    steps:
    - name: Checkout repository
      uses: actions/checkout@v4
    - name: Install Rust
      uses: dtolnay/rust-toolchain@stable
      with:
        toolchain: stable
    - uses: Swatinem/rust-cache@v2
    - uses: taiki-e/install-action@cargo-hack
    - name: Update dependencies
      run: cargo update
    - name: Build
      run: cargo test --workspace --no-run
    - name: Test
      run: cargo hack test --feature-powerset --exclude-features nightly --workspace
