---
name: Fuzzing

on: [push, pull_request]

jobs:
  test:
    name: Fuzz
    runs-on: ubuntu-latest
    # We want to run on external PRs, but not on our own internal PRs as they'll be run
    # by the push to the branch.
    if: github.event_name == 'push' || github.event.pull_request.head.repo.full_name != github.repository

    env:
      GOFLAGS: -trimpath

    steps:
    - uses: actions/checkout@v2

    - name: Setup Go
      uses: actions/setup-go@v2
      with:
        go-version: 1.17.x

    - name: Get Go environment
      id: go-env
      run: |
        echo "::set-output name=cache::$(go env GOCACHE)"
        echo "::set-output name=modcache::$(go env GOMODCACHE)"

    - name: Set up cache
      uses: actions/cache@v2
      with:
        path: |
          ${{ steps.go-env.outputs.cache }}
          ${{ steps.go-env.outputs.modcache }}
        key: fuzz-go-${{ hashFiles('**/go.sum') }}
        restore-keys: |
          fuzz-go-

    - name: Build Go tip
      run: go install golang.org/dl/gotip@latest && gotip download

    - name: Run any fuzzing tests
      run: gotip test -v -run=^Fuzz -test.fuzztime=5m ./...
