name: Fuzz
on:
push:
branches: [main, develop]
pull_request:
env:
CARGO_TERM_COLOR: always
jobs:
fuzz:
name: fuzz ${{ matrix.target }}
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
target: [http_request, http_response, routing, json, url_parsing, headers, query_params, path_params]
steps:
- uses: actions/checkout@v5
- uses: dtolnay/rust-toolchain@nightly
with:
components: clippy
- uses: Swatinem/rust-cache@v2
with:
workspaces: fuzz
- run: cargo install cargo-fuzz --locked
- run: cargo clippy --manifest-path fuzz/Cargo.toml --all-targets -- -D warnings
- name: Fuzz ${{ matrix.target }} for 60s
run: cargo fuzz run ${{ matrix.target }} -- -max_total_time=60 -print_final_stats=1
- name: Upload crash artifacts
if: failure()
uses: actions/upload-artifact@v4
with:
name: fuzz-artifacts-${{ matrix.target }}
path: fuzz/artifacts/
if-no-files-found: ignore