json-event-parser 0.2.3

A JSON event parser and serializer
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@v6
      - run: rustup component add rustfmt
      - run: cargo fmt -- --check

  clippy:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v6
      - 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 --features async-tokio -- -D warnings -D clippy::all

  test:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v6
        with:
          submodules: true
      - uses: Swatinem/rust-cache@v2
      - run: cargo test

  test_msv:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v6
        with:
          submodules: true
      - run: rustup override set 1.74.0 && rustup toolchain install nightly
      - uses: Swatinem/rust-cache@v2
      - run: cargo +nightly update -Z direct-minimal-versions
        env:
          CARGO_RESOLVER_INCOMPATIBLE_RUST_VERSIONS: fallback
      - run: cargo test

  rustdoc:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v6
      - 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@v6
      - uses: taiki-e/install-action@v2
        with: { tool: cargo-deny }
      - run: cargo deny check

  semver_checks:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v6
      - 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@v6
      - uses: taiki-e/install-action@v2
        with: { tool: typos-cli }
      - run: typos

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

  fuzz:
    strategy:
      matrix:
        target: [ "parse" ]
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v6
        with:
          submodules: true
      - uses: actions/cache@v5
        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
      - run: cargo fuzz cmin ${{ matrix.target }} --sanitizer none
      - uses: actions/upload-artifact@v6
        if: failure()
        with:
          name: fuzz-artifacts-${{ matrix.target }}
          path: fuzz/artifacts/${{ matrix.target }}

  codecov:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v6
        with:
          submodules: true
      - uses: Swatinem/rust-cache@v2
      - uses: taiki-e/install-action@v2
        with: { tool: cargo-llvm-cov }
      - run: cargo llvm-cov --features async-tokio --codecov --output-path codecov.json
      - uses: codecov/codecov-action@v5
        with:
          files: codecov.json
          flags: rust