cargo-bom 0.7.0

Bill of Materials for Rust Crates
on:
  push:
    branches: [ main ]
  pull_request:
    branches: [ main ]

jobs:
  cargo-deny:
    runs-on: ubuntu-latest
    strategy:
      matrix:
        checks:
          - advisories
          - bans licenses sources

    # Prevent sudden announcement of a new advisory from failing ci:
    continue-on-error: ${{ matrix.checks == 'advisories' }}

    steps:
      - uses: actions/checkout@v4
      - uses: EmbarkStudios/cargo-deny-action@v1
        with:
          command: check ${{ matrix.checks }}

  lints:
    runs-on: ubuntu-latest
    steps:
      - name: Install Rust
        run: rustup toolchain install stable --profile minimal --component rustfmt

      - uses: actions/checkout@v4
      - uses: Swatinem/rust-cache@v2

      - run: cargo check
      - run: cargo fmt --check --all
      - run: cargo clippy

  test:
    runs-on: ${{ matrix.os }}
    strategy:
      matrix:
        os: [ ubuntu-20.04, ubuntu-22.04, macos-13, macos-14 ]
        toolchain:
          - stable
          - beta
          - nightly

    steps:
      - name: Install Rust ${{ matrix.toolchain }}
        run: |
          rustup toolchain install ${{ matrix.toolchain }} --profile minimal
          rustup override set ${{ matrix.toolchain }}

      - uses: actions/checkout@v4
      - uses: Swatinem/rust-cache@v2

      - run: cargo test -v
      - run: cargo test -v --all-features --all-targets
      - run: cargo run -- bom