name: lint

env:
  # It's really `--all-features`, but not adding the mutually exclusive features from rkyv
  ALL_NON_EXCLUSIVE_FEATURES: --features "default unstable-locales rkyv-64 rkyv-validation serde arbitrary"

on:
  push:
    branches: [main, 0.4.x]
  pull_request:

jobs:
  lint:
    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@v4
      - uses: dtolnay/rust-toolchain@stable
        with:
          targets: x86_64-unknown-linux-gnu, x86_64-pc-windows-msvc
      - uses: Swatinem/rust-cache@v2
      - run: cargo fmt --check -- --color=always
      - run: cargo fmt --check --manifest-path fuzz/Cargo.toml
      - run: cargo fmt --check --manifest-path bench/Cargo.toml
      - run: |
          cargo clippy ${{ env.ALL_NON_EXCLUSIVE_FEATURES }} --all-targets --color=always \
            -- -D warnings
      - run: |
          cargo clippy --manifest-path fuzz/Cargo.toml --color=always \
            -- -D warnings
      - run: |
          cargo clippy --manifest-path bench/Cargo.toml --color=always \
            -- -D warnings
        env:
          RUSTFLAGS: "-Dwarnings"

  toml:
    runs-on: ubuntu-latest
    container:
      image: tamasfe/taplo:0.8.0
    steps:
      - uses: actions/checkout@v4
      - run: taplo lint
      - run: taplo fmt --check --diff

  cargo-deny:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: EmbarkStudios/cargo-deny-action@v1

  check-doc:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: dtolnay/rust-toolchain@stable
      - run: cargo install cargo-deadlinks
      - run: cargo deadlinks -- ${{ env.ALL_NON_EXCLUSIVE_FEATURES }}
      - run: cargo doc ${{ env.ALL_NON_EXCLUSIVE_FEATURES }} --no-deps
        env:
          RUSTDOCFLAGS: -Dwarnings

  cffconvert:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
        with:
          persist-credentials: false
      - uses: citation-file-format/cffconvert-github-action@2.0.0
        with:
          args: --validate