zipatch-rs 1.6.0

Parser for FFXIV ZiPatch patch files
Documentation
name: Fuzz

# Fuzz scaffolding smoke runs. The fuzz harness lives in `fuzz/`, which is a
# standalone cargo workspace (excluded from the parent `Cargo.toml` via
# `exclude = ["fuzz/"]`) so the MSRV/Test/Clippy/Format/Audit/Coverage jobs in
# `ci.yml` never compile it. cargo-fuzz requires nightly Rust for sanitizer
# support and a libFuzzer-capable target — currently linux-x86_64 only here.
#
# Per-target time budget tuning: the smoke runs below use a 60-second budget
# per target. Bump `-max_total_time` once the targets carry real bodies and
# we have a sense of how long a meaningful smoke iteration actually takes.
# For long-form fuzzing, drive this workflow via `workflow_dispatch` with a
# manual budget or split into a separate scheduled workflow.

on:
  workflow_dispatch:
  schedule:
    # Weekly Monday 06:00 UTC — keeps the targets compilable against API
    # drift on `main` without burning CI minutes on every push.
    - cron: "0 6 * * 1"

permissions:
  contents: read

env:
  CARGO_TERM_COLOR: always

jobs:
  smoke:
    name: Smoke (${{ matrix.target }})
    runs-on: ubuntu-latest
    strategy:
      fail-fast: false
      matrix:
        target:
          - parser_reader
          - parser_chunks
          - parser_sqpk
          - parser_compressed_block
          - apply_chunk
          - apply_plan
          - apply_plan_verify
          - apply_plan_execute
    steps:
      - uses: actions/checkout@v6.0.2

      - uses: dtolnay/rust-toolchain@nightly

      # Cache the fuzz subcrate's `target/` separately from the main crate.
      - uses: Swatinem/rust-cache@v2.9.1
        with:
          workspaces: fuzz

      - name: Install cargo-fuzz
        uses: taiki-e/install-action@v2
        with:
          tool: cargo-fuzz

      - name: Build fuzz target
        run: cargo fuzz build ${{ matrix.target }}

      - name: Smoke run (60s budget)
        run: cargo fuzz run ${{ matrix.target }} -- -max_total_time=60