name: rust-next

permissions:
  contents: read

on:
  schedule:
  - cron: '3 3 3 * *'

env:
  RUST_BACKTRACE: 1
  CARGO_TERM_COLOR: always
  CLICOLOR: 1
  COLUMNS: 130

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 }}
        components: rustfmt
    - 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 --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
        components: rustfmt
    - 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 --workspace