# Derived from: https://google.github.io/clusterfuzzlite/running-clusterfuzzlite/github-actions/

name: ClusterFuzzLite batch fuzzing

on:
  schedule:
    - cron: '0 6,8 * * *'  # Run twice a day at low activity times
  workflow_dispatch:       # Manual trigger for testing
    inputs:
      fuzz-seconds:
        description: 'Number of seconds to fuzz (total, not per test)'
        required: false
        type: number
        default: 3600

permissions: read-all

jobs:
  BatchFuzzing:
    runs-on: ubuntu-latest
    strategy:
      fail-fast: false
      matrix:
        sanitizer:
        - address
        - undefined
        - memory
    steps:
    - name: Build Fuzzers (${{ matrix.sanitizer }})
      id: build
      uses: google/clusterfuzzlite/actions/build_fuzzers@v1
      with:
        sanitizer: ${{ matrix.sanitizer }}
    - name: Run Fuzzers (${{ matrix.sanitizer }})
      id: run
      uses: google/clusterfuzzlite/actions/run_fuzzers@v1
      with:
        github-token: ${{ secrets.GITHUB_TOKEN }}
        # 1 hour on schedule, configurable on manual trigger.
        fuzz-seconds: ${{ github.event.inputs.fuzz-seconds || 3600 }}
        mode: 'batch'
        sanitizer: ${{ matrix.sanitizer }}
        # Optional but recommended: For storing certain artifacts from fuzzing.
        # See later section on "Git repo for storage".
        storage-repo: https://${{ secrets.PERSONAL_ACCESS_TOKEN }}@github.com/TokTok/toktok-fuzzer.git
        storage-repo-branch: master   # Optional. Defaults to "main"
        storage-repo-branch-coverage: gh-pages  # Optional. Defaults to "gh-pages".
