name: Fuzz
on:
schedule:
- cron: '0 3 * * *'
pull_request:
branches: [main]
paths:
- 'src/**'
- 'fuzz/**'
workflow_dispatch:
env:
CARGO_TERM_COLOR: always
jobs:
fuzz:
name: Fuzz (${{ matrix.target }})
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
target: [fuzz_unwrap, fuzz_hook_input, fuzz_check_command]
steps:
- uses: actions/checkout@v4
- uses: actions-rust-lang/setup-rust-toolchain@v1
with:
toolchain: nightly
- name: Install cargo-fuzz
run: cargo install cargo-fuzz
- name: Run fuzz target (${{ matrix.target }})
run: |
cd fuzz
# PR: 30 seconds per target. Nightly: 5 minutes.
if [ "${{ github.event_name }}" = "schedule" ]; then
DURATION=300
else
DURATION=30
fi
cargo +nightly fuzz run ${{ matrix.target }} -- -max_total_time=$DURATION
- name: Upload crash artifacts
if: failure()
uses: actions/upload-artifact@v4
with:
name: fuzz-crash-${{ matrix.target }}
path: fuzz/artifacts/${{ matrix.target }}/