oxiri 0.2.11

Simple and fast implementation of IRI validation and relative IRI resolution
Documentation
name: build

on:
  pull_request:
    branches:
      - main
  push:
    branches:
      - main
  schedule:
    - cron: "12 3 * * *"

jobs:
  fmt:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - run: rustup component add rustfmt
      - run: cargo fmt -- --check

  clippy:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - run: rustup component add clippy
      - uses: Swatinem/rust-cache@v2
      - run: cargo clippy --all-targets -- -D warnings -D clippy::all
      - run: cargo clippy --all-targets --all-features -- -D warnings -D clippy::all

  test:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: Swatinem/rust-cache@v2
      - run: cargo build --all-features
      - run: cargo test --verbose
      - run: cargo test --verbose --all-features

  test_msv:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - run: rustup override set 1.70.0 && rustup toolchain install nightly
      - uses: Swatinem/rust-cache@v2
      - run: cargo +nightly update -Z direct-minimal-versions
      - run: cargo test
      - run: cargo test --all-features

  rustdoc:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: Swatinem/rust-cache@v2
      - run: cargo doc --all-features --no-deps
        env:
          RUSTDOCFLAGS: -D warnings

  deny:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: taiki-e/install-action@v2
        with: { tool: cargo-deny }
      - run: cargo deny check

  semver_checks:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: Swatinem/rust-cache@v2
      - uses: taiki-e/install-action@v2
        with: { tool: cargo-semver-checks }
      - run: cargo semver-checks check-release

  typos:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: taiki-e/install-action@v2
        with: { tool: typos-cli }
      - run: typos

  codspeed:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: Swatinem/rust-cache@v2
      - uses: taiki-e/install-action@v2
        with: { tool: cargo-codspeed }
      - run: cargo codspeed build
      - uses: CodSpeedHQ/action@v3
        with:
          run: cargo codspeed run
          token: ${{ secrets.CODSPEED_TOKEN }}

  fuzz:
    strategy:
      matrix:
        target: [ "parse", "resolve", "relativize" ]
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: actions/cache@v4
        id: cache-corpus
        with:
          path: fuzz/corpus/${{ matrix.target }}
          key: fuzz-${{ matrix.target }}-${{ github.run_id }}
          restore-keys: |
            fuzz-${{ matrix.target }}
      - uses: Swatinem/rust-cache@v2
      - run: cargo install cargo-fuzz || true
      - run: python3 build_corpus.py
        working-directory: ./fuzz
        if: steps.cache-corpus.outputs.cache-hit != 'true'
      - run: cargo fuzz run ${{ matrix.target }} --sanitizer none -- -max_total_time=200 -max_len=64
      - run: cargo fuzz cmin ${{ matrix.target }} --sanitizer none
      - uses: actions/upload-artifact@v4
        if: failure()
        with:
          name: fuzz-artifacts-${{ matrix.target }}
          path: fuzz/artifacts/${{ matrix.target }}

  codecov:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: Swatinem/rust-cache@v2
      - uses: taiki-e/install-action@v2
        with: { tool: cargo-llvm-cov }
      - run: cargo llvm-cov --codecov --output-path codecov.json
      - uses: codecov/codecov-action@v5
        with:
          files: codecov.json
          flags: rust
          fail_ci_if_error: true
          token: ${{ secrets.CODECOV_TOKEN }}