Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
19 changes: 16 additions & 3 deletions src/clusterfuzz/_internal/cron/project_setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand Down Expand Up @@ -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
Expand All @@ -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|."""
Expand Down Expand Up @@ -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', {}))
Expand Down Expand Up @@ -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,
Expand All @@ -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):
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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': {
Expand Down Expand Up @@ -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',
Expand Down Expand Up @@ -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()
Expand Down Expand Up @@ -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',
Expand Down
Loading