name: CI

on:
  push:
    branches:
    - main

  pull_request:
    branches:
    - main

jobs:
  build:
    runs-on: ubuntu-latest
    strategy:
      fail-fast: false
      matrix:
        include:
          - label: Stable
            rust_version: stable
          - label: MSRV
            rust_version: 1.47.0
          - label: Stable (All Features)
            rust_version: stable
            flags: --all-features
          - label: Stable (no_std)
            rust_version: stable
            flags: --no-default-features

    name: ${{ matrix.label }}

    steps:
    - uses: actions/checkout@v3

    - name: Install Rust
      uses: actions-rs/toolchain@v1
      with:
        toolchain: ${{ matrix.rust_version }}
        override: true
        profile: minimal

    - name: Build
      run: cargo build --verbose ${{ matrix.flags }}

    - name: Run tests
      run: cargo test --verbose ${{ matrix.flags }}

  lint:
    name: Rustfmt and Clippy
    runs-on: ubuntu-latest

    steps:
    - uses: actions/checkout@v3

    - name: Install Rust
      uses: actions-rs/toolchain@v1
      with:
        toolchain: stable
        override: true
        components: rustfmt, clippy

    - name: Rustfmt
      run: cargo fmt -- --check

    - name: Clippy
      run: cargo clippy --all-features