diff --git a/src/clusterfuzz/_internal/cron/project_setup.py b/src/clusterfuzz/_internal/cron/project_setup.py index f60e9e47c9..97633293d2 100644 --- a/src/clusterfuzz/_internal/cron/project_setup.py +++ b/src/clusterfuzz/_internal/cron/project_setup.py @@ -35,6 +35,7 @@ from clusterfuzz._internal.google_cloud_utils import pubsub from clusterfuzz._internal.google_cloud_utils import storage from clusterfuzz._internal.metrics import logs +from clusterfuzz._internal.system import environment from . import service_accounts @@ -654,7 +655,9 @@ def __init__(self, fuzzer_entities=None, add_info_labels=False, add_revision_mappings=False, - additional_vars=None): + additional_vars=None, + base_os_version=None, + is_oss_fuzz=False): self._build_type = build_type self._config_suffix = config_suffix self._external_config = external_config @@ -667,6 +670,8 @@ def __init__(self, self._add_info_labels = add_info_labels self._add_revision_mappings = add_revision_mappings self._additional_vars = additional_vars + self._base_os_version = base_os_version + self._is_oss_fuzz = is_oss_fuzz def _get_build_bucket(self, engine, architecture): """Return the bucket for the given |engine| and |architecture|.""" @@ -945,6 +950,11 @@ def _sync_job(self, project, info, corpus_bucket_name, quarantine_bucket_name, create_pubsub_topics_for_queue_id(job.platform) + if not self._is_oss_fuzz: + base_os_version = info.get('base_os_version') or self._base_os_version + if base_os_version and 'LINUX' in job.platform.upper(): + job.base_os_version = base_os_version + if self._additional_vars: additional_vars = {} additional_vars.update(self._additional_vars.get('all', {})) @@ -1108,6 +1118,7 @@ def main(): if not bucket_config: raise ProjectSetupError('Project setup buckets not specified.') + projects_source = setup_config.get('source') config = ProjectSetup( BUILD_BUCKET_PATH_TEMPLATE, REVISION_URL, @@ -1129,9 +1140,11 @@ def main(): fuzzer_entities=fuzzer_entities, add_info_labels=setup_config.get('add_info_labels', False), add_revision_mappings=setup_config.get('add_revision_mappings', False), - additional_vars=setup_config.get('additional_vars')) + additional_vars=setup_config.get('additional_vars'), + base_os_version=(setup_config.get('base_os_version') or + environment.get_value('DEFAULT_BASE_OS_VERSION')), + is_oss_fuzz=projects_source == 'oss-fuzz') - projects_source = setup_config.get('source') if projects_source == 'oss-fuzz': projects = get_oss_fuzz_projects() elif projects_source.startswith(storage.GS_PREFIX): diff --git a/src/clusterfuzz/_internal/tests/appengine/handlers/cron/project_setup_test.py b/src/clusterfuzz/_internal/tests/appengine/handlers/cron/project_setup_test.py index c6bfd348fd..9814af753f 100644 --- a/src/clusterfuzz/_internal/tests/appengine/handlers/cron/project_setup_test.py +++ b/src/clusterfuzz/_internal/tests/appengine/handlers/cron/project_setup_test.py @@ -1914,6 +1914,7 @@ def setUp(self): 'project_setup': [ { 'source': 'gs://bucket/projects.json', + 'base_os_version': 'ubuntu-24-04', 'build_type': 'FUZZ_TARGET_BUILD_BUCKET_PATH', 'experimental_sanitizers': ['memory'], 'build_buckets': { @@ -1977,6 +1978,7 @@ def setUp(self): }, { 'source': 'gs://bucket-android/projects.json', + 'base_os_version': 'ubuntu-24-04', 'build_type': 'FUZZ_TARGET_BUILD_BUCKET_PATH', 'build_buckets': { 'afl': 'clusterfuzz-builds-afl-android', @@ -2066,6 +2068,7 @@ def test_execute(self): self.assertEqual(None, job.external_reproduction_topic) self.assertEqual(None, job.external_updates_subscription) self.assertFalse(job.is_external()) + self.assertEqual('ubuntu-24-04', job.base_os_version) job = data_types.Job.query( data_types.Job.name == 'libfuzzer_msan_a-b').get() @@ -2284,6 +2287,11 @@ def test_execute(self): self.assertEqual(None, job.external_updates_subscription) self.assertFalse(job.is_external()) self.assertEqual("ANDROID_MTE:PIXEL8", job.platform) + self.assertIsNone(job.base_os_version) + + job_dbg = data_types.Job.query( + data_types.Job.name == 'libfuzzer_asan_a-b_dbg').get() + self.assertIsNone(job_dbg.base_os_version) expected_topics = [ 'projects/clusterfuzz-external/topics/jobs-linux',