49 lines
2.0 KiB
Bash
Executable File
49 lines
2.0 KiB
Bash
Executable File
#!/bin/bash -eu
|
|
#
|
|
# IMPORTANT: Fuzz* test cases should be in a dedicated file, conventionally
|
|
# called `fuzz_test.go`, but that's not a requirement. Otherwise once the file
|
|
# name is changed to have the _test_fuzz.go termination instead of _test.go as
|
|
# required by oss-fuzz, the code won't compile as other Test* test cases might
|
|
# not find some requirements given that they are not in a _test.go file.
|
|
#
|
|
# DO NOT DELETE: this script is used from oss-fuzz. You can find more details
|
|
# in the official documentation:
|
|
# https://google.github.io/oss-fuzz/getting-started/new-project-guide/go-lang/
|
|
#
|
|
# To run this locally you can go through the following steps: - $ git clone
|
|
# https://github.com/google/oss-fuzz --depth=1 - $ cd
|
|
# oss-fuzz/projects/crossplane
|
|
# - modify Dockerfile to point to your branch with all the fuzzers being merged.
|
|
# - modify build.sh to call the build script in Crossplanes repository
|
|
# - $ python3 ../../infra/helper.py build_image crossplane
|
|
# - $ python3 ../../infra/helper.py build_fuzzers crossplane
|
|
|
|
set -o nounset
|
|
set -o pipefail
|
|
set -o errexit
|
|
set -x
|
|
|
|
printf "package main\nimport ( \n _ \"github.com/AdamKorcz/go-118-fuzz-build/testing\"\n )\n" > register.go
|
|
|
|
# Moving all the fuzz_test.go to fuzz_test_fuzz.go, as oss-fuzz uses go build to build fuzzers
|
|
# shellcheck disable=SC2016
|
|
grep --line-buffered --include '*_test.go' -Pr 'func Fuzz.*\(.* \*testing\.F' | cut -d: -f1 | sort -u | xargs -I{} sh -c '
|
|
file="{}"
|
|
file_no_ext="$(basename "$file" | cut -d"." -f1)"
|
|
folder="$(dirname $file)"
|
|
mv "$file" "$folder/${file_no_ext}_fuzz.go"
|
|
'
|
|
|
|
# Now we can tidy and download all our dependencies
|
|
go mod tidy
|
|
go mod vendor
|
|
|
|
# Find all native fuzzers and compile them
|
|
# shellcheck disable=SC2016
|
|
grep --line-buffered --include '*_test_fuzz.go' -Pr 'func Fuzz.*\(.* \*testing\.F' | sed -E 's/(func Fuzz(.*)\(.*)/\2/' | xargs -I{} sh -c '
|
|
file="$(echo "{}" | cut -d: -f1)"
|
|
folder="$(dirname $file)"
|
|
func="Fuzz$(echo "{}" | cut -d: -f2)"
|
|
compile_native_go_fuzzer github.com/crossplane/crossplane-runtime/$folder $func $func
|
|
'
|