name: Fuzz
on:
pull_request:
branches: [main]
schedule:
- cron: '0 4 * * 0'
permissions:
contents: read
env:
CARGO_TERM_COLOR: always
jobs:
fuzz:
name: Fuzz ${{ matrix.target }}
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
target:
- fuzz_xmlrpc_parse
- fuzz_url_parser
- fuzz_flag_parser
steps:
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd with:
persist-credentials: false
- uses: dtolnay/rust-toolchain@98e1b82157cd469e843cb7f524c1313b4ad9492c with:
toolchain: nightly-2026-05-02
- uses: Swatinem/rust-cache@c19371144df3bb44fab255c43d04cbc2ab54d1c4 with:
key: fuzz-${{ matrix.target }}
- name: Install cargo-fuzz
run: cargo install cargo-fuzz --locked
- name: Run fuzzer
run: |
if [ "${{ github.event_name }}" = "schedule" ]; then
MAX_TIME=300 # 5 minutes per target on schedule
else
MAX_TIME=30 # 30 seconds per target on PR
fi
cargo +nightly fuzz run ${{ matrix.target }} -- -max_total_time=$MAX_TIME