Merge pull request #6806 from Ecordonnier/eco/signal-handler #696
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: Fuzzing | |
# spell-checker:ignore fuzzer | |
on: | |
pull_request: | |
push: | |
branches: | |
- main | |
permissions: | |
contents: read # to fetch code (actions/checkout) | |
# End the current execution if there is a new changeset in the PR. | |
concurrency: | |
group: ${{ github.workflow }}-${{ github.ref }} | |
cancel-in-progress: ${{ github.ref != 'refs/heads/main' }} | |
jobs: | |
fuzz-build: | |
name: Build the fuzzers | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
- uses: dtolnay/rust-toolchain@nightly | |
- name: Install `cargo-fuzz` | |
run: cargo install cargo-fuzz | |
- uses: Swatinem/rust-cache@v2 | |
with: | |
shared-key: "cargo-fuzz-cache-key" | |
cache-directories: "fuzz/target" | |
- name: Run `cargo-fuzz build` | |
run: cargo +nightly fuzz build | |
fuzz-run: | |
needs: fuzz-build | |
name: Run the fuzzers | |
runs-on: ubuntu-latest | |
timeout-minutes: 5 | |
env: | |
RUN_FOR: 60 | |
strategy: | |
matrix: | |
test-target: | |
- { name: fuzz_test, should_pass: true } | |
# https://github.com/uutils/coreutils/issues/5311 | |
- { name: fuzz_date, should_pass: false } | |
- { name: fuzz_expr, should_pass: true } | |
- { name: fuzz_printf, should_pass: false } | |
- { name: fuzz_echo, should_pass: true } | |
- { name: fuzz_seq, should_pass: false } | |
- { name: fuzz_sort, should_pass: false } | |
- { name: fuzz_wc, should_pass: false } | |
- { name: fuzz_cut, should_pass: false } | |
- { name: fuzz_split, should_pass: false } | |
- { name: fuzz_tr, should_pass: false } | |
- { name: fuzz_env, should_pass: false } | |
- { name: fuzz_parse_glob, should_pass: true } | |
- { name: fuzz_parse_size, should_pass: true } | |
- { name: fuzz_parse_time, should_pass: true } | |
- { name: fuzz_seq_parse_number, should_pass: true } | |
steps: | |
- uses: actions/checkout@v4 | |
- uses: dtolnay/rust-toolchain@nightly | |
- name: Install `cargo-fuzz` | |
run: cargo install cargo-fuzz | |
- uses: Swatinem/rust-cache@v2 | |
with: | |
shared-key: "cargo-fuzz-cache-key" | |
cache-directories: "fuzz/target" | |
- name: Restore Cached Corpus | |
uses: actions/cache/restore@v4 | |
with: | |
key: corpus-cache-${{ matrix.test-target.name }} | |
path: | | |
fuzz/corpus/${{ matrix.test-target.name }} | |
- name: Run ${{ matrix.test-target.name }} for XX seconds | |
shell: bash | |
continue-on-error: ${{ !matrix.test-target.name.should_pass }} | |
run: | | |
cargo +nightly fuzz run ${{ matrix.test-target.name }} -- -max_total_time=${{ env.RUN_FOR }} -detect_leaks=0 | |
- name: Save Corpus Cache | |
uses: actions/cache/save@v4 | |
with: | |
key: corpus-cache-${{ matrix.test-target.name }} | |
path: | | |
fuzz/corpus/${{ matrix.test-target.name }} |