in scripts/gha/build_testapps.py [0:0]
def main(argv):
del argv # Unused.
root_dir = _fix_path(FLAGS.root_dir)
plugins_dir = _fix_path(FLAGS.plugin_dir)
root_output_dir = _fix_path(FLAGS.output_directory)
unity_folder_override = _fix_path(FLAGS.unity_folder_override)
use_local_packages = _fix_path(FLAGS.use_local_packages)
# The config object contains all the configuration from the json file.
config = config_reader.read_config(_fix_path(FLAGS.config_path))
# Dict of unity version -> full path to Unity binary.
version_path_map = get_version_path_map(
FLAGS.unity_versions, unity_folder_override)
unity_versions = update_unity_versions(version_path_map)
timestamp = get_timestamp() if FLAGS.timestamp else ""
testapps = validate_testapps(FLAGS.testapps, config.apis)
platforms = validate_platforms(FLAGS.platforms)
output_root = os.path.join(root_output_dir, "testapps")
failures = []
for version in unity_versions:
runtime = get_runtime(version, FLAGS.force_latest_runtime)
output_dir = get_output_dir(output_root, str(version), runtime, timestamp)
logging.info("Output directory: %s", output_dir)
for testapp in testapps:
api_config = config.get_api(testapp)
setup_options = _SetupOptions(
switch_to_latest=FLAGS.force_latest_runtime,
testapp_file_filters=config.skipped_testapp_files,
enable_firebase=FLAGS.enable_firebase,
enable_edm4u=FLAGS.enable_edm4u)
dir_helper = _DirectoryHelper.from_config(
root_dir=root_dir,
api_config=api_config,
unity_path=version_path_map[version],
output_dir=output_dir,
builder_dir=os.path.join(root_dir, config.builder_directory),
unity_plugins=_resolve_plugins(plugins_dir, api_config, runtime),
upm_packages=_resolve_upm_packages(use_local_packages, api_config),
xcode_name=get_xcode_name(version, FLAGS.force_xcode_project))
ios_config = _IosConfig(
bundle_id=api_config.bundle_id,
ios_sdk=FLAGS.ios_sdk,
configuration=FLAGS.xcode_configuration,
scheme="Unity-iPhone",
use_unity_symlinks=FLAGS.use_unity_ios_symlinks)
build_desc = "{0}, .NET{1}, Unity{2}".format(
testapp, runtime, str(version))
logging.info("BEGIN %s", build_desc)
if _ANDROID in platforms:
patch_android_env(version)
try:
setup_unity_project(dir_helper, setup_options)
except (subprocess.SubprocessError, RuntimeError) as e:
failures.append(Failure(testapp=testapp, description=build_desc, error_message=str(e)))
logging.info(str(e))
continue # If setup failed, don't try to build. Move to next testapp.
for p in platforms:
try:
if p == _DESKTOP: # e.g. 'Desktop' -> 'OSXUniversal'
p = get_desktop_platform()
if p == _PLAYMODE:
perform_in_editor_tests(dir_helper)
else:
build_testapp(
dir_helper=dir_helper,
api_config=api_config,
ios_config=ios_config,
target=_BUILD_TARGET[p])
except (subprocess.SubprocessError, RuntimeError) as e:
failures.append(
Failure(
testapp=testapp,
description=build_desc + " " + p,
error_message=str(e)))
logging.info(str(e))
# If there is an error, print out the log file.
log_file = dir_helper.make_log_path("build_" + _BUILD_TARGET[p])
logging.info(log_file)
with open(log_file, 'r') as f:
logging.info(f.read())
# Free up space by removing unneeded Unity directory.
if FLAGS.ci:
shutil.rmtree(dir_helper.unity_project_dir)
else:
shutil.rmtree(os.path.join(dir_helper.unity_project_dir, "Library"))
logging.info("END %s", build_desc)
_collect_integration_tests(config, testapps, root_output_dir, output_dir, FLAGS.artifact_name)
return _summarize_results(
testapps=testapps,
platforms=platforms,
versions=unity_versions,
failures=failures,
output_dir=root_output_dir,
artifact_name=FLAGS.artifact_name)