diff --git a/.github/workflows/cifuzz.yml b/.github/workflows/fuzz.yml similarity index 57% rename from .github/workflows/cifuzz.yml rename to .github/workflows/fuzz.yml index 38654955e..414377678 100644 --- a/.github/workflows/cifuzz.yml +++ b/.github/workflows/fuzz.yml @@ -1,7 +1,10 @@ -name: CI Fuzz +name: Fuzzing on: [pull_request] jobs: - Fuzzing: + # Run all fuzzing tests. Some of them use Go 1.18's testing.F. + # Others use https://github.com/AdaLogics/go-fuzz-headers. + ci_fuzz: + name: CI Fuzz runs-on: ubuntu-latest steps: - name: Build Fuzzers @@ -24,3 +27,15 @@ jobs: with: name: artifacts path: ./out/artifacts + + # Make sure all fuzzing tests which use Go 1.18's testing.F are + # runnable with go test -fuzz. + go_test_fuzz: + name : go test -fuzz + runs-on: ubuntu-latest + steps: + - uses: actions/setup-go@v2 + with: + go-version: 1.18 + - uses: actions/checkout@v2 + - run: script/go-test-fuzz.sh diff --git a/script/go-test-fuzz.sh b/script/go-test-fuzz.sh new file mode 100755 index 000000000..ceae5d75c --- /dev/null +++ b/script/go-test-fuzz.sh @@ -0,0 +1,29 @@ +#!/usr/bin/env bash + +# Copyright The containerd Authors. + +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at + +# http://www.apache.org/licenses/LICENSE-2.0 + +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Running Go 1.18's fuzzing for 30 seconds each. While this would be too +# short to acutally find issues, we want to make sure that these fuzzing +# tests are not fundamentally broken. + +set -euo pipefail + +fuzztime=30s +pkgs=$(git grep 'func Fuzz.*testing\.F' | grep -o '.*\/' | sort | uniq) + +for pkg in $pkgs +do + go test -fuzz=. ./$pkg -fuzztime=$fuzztime +done