name: CI

on:
  pull_request:
    branches: [main]
  push:
    branches: [main]

jobs:
  check-fuzz:
    name: Check fuzz targets
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@master
    - uses: actions-rs/toolchain@v1
      with:
        profile: minimal
        toolchain: nightly
        override: true
    - name: Check fuzz targets
      run: |
        cargo check --manifest-path fuzz/Cargo.toml

  build:
    runs-on: ubuntu-latest
    strategy:
      matrix:
        target:
          - x86_64-unknown-linux-gnu
          - thumbv7em-none-eabi

    steps:
      - name: Checkout repository
        uses: actions/checkout@v2

      - name: Install Rust toolchain
        run: |
          rustup show
          rustup target add ${{ matrix.target }}

      - name: Install build dependencies
        run: >
          sudo apt-get update -y -qq &&
          sudo apt-get install -y -qq llvm libc6-dev-i386 libclang-dev

      - uses: fiam/arm-none-eabi-gcc@v1
        with:
          release: "9-2020-q2"

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

      - name: Check all targets without default features
        run: cargo check --all-targets --no-default-features
        if: matrix.target == 'x86_64-unknown-linux-gnu'

      - name: Check all targets with default features
        run: cargo check --all-targets
        if: matrix.target == 'x86_64-unknown-linux-gnu'

      - name: Check all features and targets
        run: cargo check --all-features --all-targets
        if: matrix.target == 'x86_64-unknown-linux-gnu'

      - name: Run tests
        run: cargo test --verbose --features dispatch
        if: matrix.target == 'x86_64-unknown-linux-gnu'

      - name: Check formatting
        run: cargo fmt -- --check
        if: matrix.target == 'x86_64-unknown-linux-gnu'

      - name: Check clippy lints
        run: cargo clippy --all-features --all-targets -- --deny warnings
        if: matrix.target == 'x86_64-unknown-linux-gnu'

      - name: Check documentation
        run: RUSTDOCFLAGS="-D warnings" cargo doc --no-deps
        if: matrix.target == 'x86_64-unknown-linux-gnu'
