name: Unittest

on:
  schedule:
    - cron: '0 4 * * *'  # runs at 4 AM UTC (13:00 JST)
  push:
    branches: [ "main", "dev" ]
  pull_request:
    branches: [ "main" ]

env:
  CARGO_TERM_COLOR: always

jobs:

  build_nightly:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v3
    - name: Install latest nightly
      # uses: actions-rs/toolchain@v1
      uses: dtolnay/rust-toolchain@v1
      with:
        toolchain: nightly
        components: rustfmt, clippy
    - name: Run tests
      uses: ClementTsang/cargo-action@v0.0.3
      with:
        command: test
        args: --verbose --features "experimental,par,simd-nightly,mimalloc"
    - name: Run tests (flacenc CLI)
      uses: ClementTsang/cargo-action@v0.0.3
      with:
        command: test
        args: --verbose --features "simd-nightly"
        directory: flacenc-bin
    - name: Check fuzz test buildable
      uses: ClementTsang/cargo-action@v0.0.3
      with:
        command: build
        args: --verbose
        directory: fuzz

  build_stable:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v3
    - name: Install latest stable
      uses: dtolnay/rust-toolchain@v1
      with:
        toolchain: stable
        components: rustfmt, clippy
    - name: Run tests
      uses: ClementTsang/cargo-action@v0.0.3
      with:
        command: test
        args: --verbose --features "experimental,par,mimalloc"
    - name: Run tests (CLI)
      uses: ClementTsang/cargo-action@v0.0.3
      with:
        command: test
        args: --verbose --features ""
        directory: flacenc-bin

  build_msrv:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v3
    - name: Install MSRV toolchain
      # uses: actions-rs/toolchain@v1
      uses: dtolnay/rust-toolchain@v1
      with:
        toolchain: 1.83
        components: rustfmt, clippy
    - name: Run build
      uses: ClementTsang/cargo-action@v0.0.3
      with:
        command: build
        args: --verbose --features "experimental,par,mimalloc"

  lints:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v3
    - name: Install latest nightly
      uses: dtolnay/rust-toolchain@v1
      with:
        toolchain: nightly
        components: rustfmt, clippy
    - name: Code format check
      uses: ClementTsang/cargo-action@v0.0.3
      with:
        command: fmt
        args: --check
    - name: Clippy
      uses: ClementTsang/cargo-action@v0.0.3
      with:
        command: clippy
        args: --tests -- -D warnings
    - name: Code format check (CLI tools)
      uses: ClementTsang/cargo-action@v0.0.3
      with:
        command: fmt
        args: --check
        directory: flacenc-bin
    - name: Clippy (flacenc CLI)
      uses: ClementTsang/cargo-action@v0.0.3
      with:
        command: clippy
        args: --tests -- -D warnings
        directory: flacenc-bin
