mirror of
https://github.com/yhirose/cpp-httplib.git
synced 2026-08-12 05:11:24 +00:00
The fuzzers build httplib.h and the targets under test/fuzzing, so a pull request that touches neither has nothing for CIFuzz to exercise. Fuzzing is by far the longest job in CI: 600 seconds of fuzzing on top of building the OSS-Fuzz image, which came to 12m20s on a recent run while every other job finished within 5m7s. Filter the trigger by path rather than shortening fuzz-seconds. OSS-Fuzz recommends 600 seconds as a minimum, and the budget is divided among all of the project's fuzz targets, so with five targets a shorter run would leave each one well under two minutes. Skipping the job for documentation-only changes cuts the wait without giving up any fuzzing on the pull requests that do reach the parsers.
43 lines
1.3 KiB
YAML
43 lines
1.3 KiB
YAML
name: CIFuzz
|
|
|
|
# The fuzzers only build httplib.h and the targets under test/fuzzing, so a
|
|
# pull request that touches neither has nothing for CIFuzz to exercise. Fuzzing
|
|
# is by far the longest job in CI (10 minutes of fuzzing on top of building the
|
|
# OSS-Fuzz image), and skipping it for documentation-only changes keeps the
|
|
# full 600 seconds for the pull requests that do reach the parsers.
|
|
on:
|
|
pull_request:
|
|
paths:
|
|
- 'httplib.h'
|
|
- 'test/fuzzing/**'
|
|
- '.github/workflows/cifuzz.yaml'
|
|
|
|
concurrency:
|
|
group: ${{ github.workflow }}-${{ github.ref || github.run_id }}
|
|
cancel-in-progress: true
|
|
|
|
jobs:
|
|
Fuzzing:
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- name: Build Fuzzers
|
|
id: build
|
|
uses: google/oss-fuzz/infra/cifuzz/actions/build_fuzzers@master
|
|
with:
|
|
oss-fuzz-project-name: 'cpp-httplib'
|
|
dry-run: false
|
|
language: c++
|
|
- name: Run Fuzzers
|
|
uses: google/oss-fuzz/infra/cifuzz/actions/run_fuzzers@master
|
|
with:
|
|
oss-fuzz-project-name: 'cpp-httplib'
|
|
fuzz-seconds: 600
|
|
dry-run: false
|
|
language: c++
|
|
- name: Upload Crash
|
|
uses: actions/upload-artifact@v4
|
|
if: failure() && steps.build.outcome == 'success'
|
|
with:
|
|
name: artifacts
|
|
path: ./out/artifacts
|