def do_build(build_type, fuzzer, always_build): """Build fuzzer,benchmark pairs for CI.""" if build_type == 'oss-fuzz': benchmarks = OSS_FUZZ_BENCHMARKS elif build_type == 'standard': benchmarks = STANDARD_BENCHMARKS else: raise Exception('Invalid build_type: %s' % build_type) if always_build: # Always do a build if always_build is True. return make_builds(benchmarks, fuzzer) changed_files = diff_utils.get_changed_files() changed_fuzzers = change_utils.get_changed_fuzzers(changed_files) if fuzzer in changed_fuzzers: # Otherwise if fuzzer is in changed_fuzzers then build it with all # benchmarks, the change could have affected any benchmark. return make_builds(benchmarks, fuzzer) # Otherwise, only build benchmarks that have changed. changed_benchmarks = set( change_utils.get_changed_benchmarks(changed_files)) benchmarks = benchmarks.intersection(changed_benchmarks) return make_builds(benchmarks, fuzzer)
def test_changed_integrations(paths: List[Path]): """Runs tests that build changed fuzzers with all benchmarks and changed benchmarks with measurer and all fuzzers. Not enabled by default since it requires GCB.""" benchmarks = change_utils.get_changed_benchmarks( [str(path) for path in paths]) fuzzers = change_utils.get_changed_fuzzers([str(path) for path in paths]) if not benchmarks and not fuzzers: return True pytest_command = BASE_PYTEST_COMMAND + [ '-k', 'TestBuildChangedBenchmarksOrFuzzers' ] env = os.environ.copy() if benchmarks: env = os.environ.copy() env['TEST_BUILD_CHANGED_BENCHMARKS'] = ' '.join(benchmarks) if fuzzers: env['TEST_BUILD_CHANGED_FUZZERS'] = ' '.join(fuzzers) retcode = subprocess.run(pytest_command, check=False, env=env).returncode return retcode == 0