name: Continuous Integration

on:
  pull_request:
    branches:
      - main
    paths:
      - "**"
      - "!/*.md"
      - "!/**.md"

concurrency:
    group: "${{ github.workflow }} @ ${{ github.event.pull_request.head.label || github.head_ref || github.ref }}"
    cancel-in-progress: true

jobs:
  integrity:
    name: Integrity Checks on Rust ${{ matrix.toolchain }}
    runs-on: ubuntu-latest
    timeout-minutes: 15
    strategy:
      matrix:
        toolchain:
          - stable
          - nightly

    steps:
      - name: Checkout
        uses: actions/checkout@v4

      - name: Setup Rust
        uses: dtolnay/rust-toolchain@master
        with:
          toolchain: ${{ matrix.toolchain }}
          targets: wasm32-unknown-unknown
          components: clippy, rustfmt

      - name: Setup Rust Cache
        uses: Swatinem/rust-cache@v2

      - name: Build
        run: cargo build

      - name: Format
        run: cargo fmt --check

      - name: Clippy
        run: cargo clippy -- -D warnings