diff options
author | 2021-08-19 19:52:44 -0400 | |
---|---|---|
committer | 2021-08-20 09:52:44 +1000 | |
commit | 30d927e324f3909ce7a9a9823219fcd8cb185150 (patch) | |
tree | 32245764b8291cd20bf37e8f218be494692296dc /infra/helper.py | |
parent | 7d950a1008fa0f3829d3730482e561eb1345d477 (diff) |
New base builder without lang specific installation + swift base (#5986)
Removes unnecessary stuff in base-builder image to create a base-builder-new, and then adds a base-builder-swift on top of this that swift projects can use (without JVM/Go/etc fuzzing).
Diffstat (limited to 'infra/helper.py')
-rwxr-xr-x | infra/helper.py | 30 |
1 files changed, 28 insertions, 2 deletions
diff --git a/infra/helper.py b/infra/helper.py index 5d49765a..fca68018 100755 --- a/infra/helper.py +++ b/infra/helper.py @@ -39,6 +39,8 @@ BASE_IMAGES = [ 'gcr.io/oss-fuzz-base/base-image', 'gcr.io/oss-fuzz-base/base-clang', 'gcr.io/oss-fuzz-base/base-builder', + 'gcr.io/oss-fuzz-base/base-builder-new', + 'gcr.io/oss-fuzz-base/base-builder-swift', 'gcr.io/oss-fuzz-base/base-runner', 'gcr.io/oss-fuzz-base/base-runner-debug', 'gcr.io/oss-fuzz-base/base-sanitizer-libs-builder', @@ -55,6 +57,7 @@ CORPUS_BACKUP_URL_FORMAT = ( 'gs://{project_name}-backup.clusterfuzz-external.appspot.com/corpus/' 'libFuzzer/{fuzz_target}/') +LANGUAGE_REGEX = re.compile(r'[^\s]+') PROJECT_LANGUAGE_REGEX = re.compile(r'\s*language\s*:\s*([^\s]+)') WORKDIR_REGEX = re.compile(r'\s*WORKDIR\s*([^\s]+)') @@ -212,6 +215,11 @@ def get_parser(): # pylint: disable=too-many-statements generate_parser = subparsers.add_parser( 'generate', help='Generate files for new project.') generate_parser.add_argument('project') + generate_parser.add_argument( + '--language', + default=constants.DEFAULT_LANGUAGE, + choices=['c', 'c++', 'rust', 'go', 'jvm', 'swift', 'python'], + help='Project language.') _add_external_project_args(generate_parser) build_image_parser = subparsers.add_parser('build_image', @@ -1011,6 +1019,14 @@ def _validate_project_name(project_name): return True +def _validate_language(language): + if not LANGUAGE_REGEX.match(language): + logging.error('Invalid project language %s.', language) + return False + + return True + + def _create_build_integration_directory(directory): """Returns True on successful creation of a build integration directory. Suitable for OSS-Fuzz and external projects.""" @@ -1038,7 +1054,7 @@ def _template_project_file(filename, template, template_args, directory): def generate(args): """Generates empty project files.""" - return _generate_impl(args.project) + return _generate_impl(args.project, args.language) def _get_current_datetime(): @@ -1046,7 +1062,12 @@ def _get_current_datetime(): return datetime.datetime.now() -def _generate_impl(project): +def _base_builder_from_language(language): + """Returns the base builder for the specified language.""" + return 'base-builder' if language != 'swift' else 'base-builder-swift' + + +def _generate_impl(project, language): """Implementation of generate(). Useful for testing.""" if project.is_external: # External project. @@ -1057,6 +1078,9 @@ def _generate_impl(project): return False project_templates = templates.TEMPLATES + if not _validate_language(language): + return False + directory = project.build_integration_path if not _create_build_integration_directory(directory): return False @@ -1065,6 +1089,8 @@ def _generate_impl(project): template_args = { 'project_name': project.name, + 'base_builder': _base_builder_from_language(language), + 'language': language, 'year': _get_current_datetime().year } for filename, template in project_templates.items(): |