parse-net 0.7.0

Grammar for Internet message fields: RFC 9110 field syntax, media types, RFC 9651 Structured Fields, HTTP and RFC 5322 dates, negotiation, entity tags, ranges, Content-Disposition, Cache-Control, Forwarded, auth challenges, and the email lexical layer. no_std, no allocation, sans-IO, zero dependencies.
Documentation
name: Fuzz

# The differential targets compare parse-net with httpdate, mime, and sfv
# every week, so a change in either side's behaviour is seen (dev/PLAN.md
# section 11.5). The full 24-hour runs happen before releases, off CI.
on:
  schedule:
    - cron: "17 4 * * 1"
  workflow_dispatch:

env:
  CARGO_TERM_COLOR: always
  FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: "true"

jobs:
  differential:
    name: Differential (${{ matrix.target }})
    runs-on: ubuntu-latest
    timeout-minutes: 45
    strategy:
      fail-fast: false
      matrix:
        target: [diff_http_date, diff_media_type, diff_sfv]
    steps:
      - uses: actions/checkout@v5
      - uses: dtolnay/rust-toolchain@nightly
      - uses: Swatinem/rust-cache@v2
        with:
          workspaces: fuzz
      - name: Install cargo-fuzz
        uses: taiki-e/install-action@v2
        with:
          tool: cargo-fuzz
      - name: Fuzz for 30 minutes
        working-directory: fuzz
        run: |
          mkdir -p corpus/${{ matrix.target }}
          cargo fuzz run ${{ matrix.target }} corpus/${{ matrix.target }} seeds/${{ matrix.target }} -- \
            -max_total_time=1800 -max_len=4096
      - name: Keep the failing input
        if: failure()
        uses: actions/upload-artifact@v4
        with:
          name: artifacts-${{ matrix.target }}
          path: fuzz/artifacts/${{ matrix.target }}