You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
132 lines
4.6 KiB
132 lines
4.6 KiB
#!/usr/bin/env python
|
|
# Copyright 2021 The ANGLE Project Authors. All rights reserved.
|
|
# Use of this source code is governed by a BSD-style license that can be
|
|
# found in the LICENSE file.
|
|
"""Script to generate the test spec JSON files. Calls Chromium's generate_buildbot_json.
|
|
|
|
=== NOTE: DO NOT RUN THIS SCRIPT DIRECTLY. ===
|
|
Run scripts/run_code_generation.py instead to update necessary hashes.
|
|
|
|
"""
|
|
|
|
import os
|
|
import pprint
|
|
import sys
|
|
import subprocess
|
|
|
|
d = os.path.dirname
|
|
THIS_DIR = d(os.path.abspath(__file__))
|
|
TESTING_BBOT_DIR = os.path.join(d(d(THIS_DIR)), 'testing', 'buildbot')
|
|
sys.path.insert(0, TESTING_BBOT_DIR)
|
|
|
|
import generate_buildbot_json
|
|
|
|
# Add custom mixins here.
|
|
ADDITIONAL_MIXINS = {
|
|
'angle_skia_gold_test': {
|
|
'$mixin_append': {
|
|
'args': [
|
|
'--git-revision=${got_angle_revision}',
|
|
# BREAK GLASS IN CASE OF EMERGENCY
|
|
# Uncommenting this argument will bypass all interactions with Skia
|
|
# Gold in any tests that use it. This is meant as a temporary
|
|
# emergency stop in case of a Gold outage that's affecting the bots.
|
|
# '--bypass-skia-gold-functionality',
|
|
],
|
|
'precommit_args': [
|
|
'--gerrit-issue=${patch_issue}',
|
|
'--gerrit-patchset=${patch_set}',
|
|
'--buildbucket-id=${buildbucket_build_id}',
|
|
],
|
|
}
|
|
},
|
|
}
|
|
MIXIN_FILE_NAME = os.path.join(THIS_DIR, 'mixins.pyl')
|
|
MIXINS_PYL_TEMPLATE = """\
|
|
# GENERATED FILE - DO NOT EDIT.
|
|
# Generated by {script_name} using data from {data_source}
|
|
#
|
|
# Copyright 2021 The ANGLE Project Authors. All rights reserved.
|
|
# Use of this source code is governed by a BSD-style license that can be
|
|
# found in the LICENSE file.
|
|
#
|
|
# This is a .pyl, or "Python Literal", file. You can treat it just like a
|
|
# .json file, with the following exceptions:
|
|
# * all keys must be quoted (use single quotes, please);
|
|
# * comments are allowed, using '#' syntax; and
|
|
# * trailing commas are allowed.
|
|
#
|
|
# For more info see Chromium's mixins.pyl in testing/buildbot.
|
|
|
|
{mixin_data}
|
|
"""
|
|
|
|
|
|
def main():
|
|
if len(sys.argv) > 1:
|
|
gen_bb_json = os.path.join(TESTING_BBOT_DIR, 'generate_buildbot_json.py')
|
|
mixins_pyl = os.path.join(TESTING_BBOT_DIR, 'mixins.pyl')
|
|
inputs = [
|
|
'test_suite_exceptions.pyl', 'test_suites.pyl', 'variants.pyl', 'waterfalls.pyl',
|
|
gen_bb_json, mixins_pyl
|
|
]
|
|
outputs = ['angle.json', 'mixins.pyl']
|
|
if sys.argv[1] == 'inputs':
|
|
print(','.join(inputs))
|
|
elif sys.argv[1] == 'outputs':
|
|
print(','.join(outputs))
|
|
else:
|
|
print('Invalid script parameters')
|
|
return 1
|
|
return 0
|
|
|
|
chromium_args = generate_buildbot_json.BBJSONGenerator.parse_args(sys.argv[1:])
|
|
chromium_generator = generate_buildbot_json.BBJSONGenerator(chromium_args)
|
|
chromium_generator.load_configuration_files()
|
|
|
|
override_args = sys.argv[1:] + ['--pyl-files-dir', THIS_DIR]
|
|
angle_args = generate_buildbot_json.BBJSONGenerator.parse_args(override_args)
|
|
angle_generator = generate_buildbot_json.BBJSONGenerator(angle_args)
|
|
angle_generator.load_configuration_files()
|
|
angle_generator.resolve_configuration_files()
|
|
|
|
seen_mixins = set()
|
|
for waterfall in angle_generator.waterfalls:
|
|
seen_mixins = seen_mixins.union(waterfall.get('mixins', set()))
|
|
for bot_name, tester in waterfall['machines'].iteritems():
|
|
seen_mixins = seen_mixins.union(tester.get('mixins', set()))
|
|
for suite in angle_generator.test_suites.values():
|
|
if isinstance(suite, list):
|
|
# Don't care about this, it's a composition, which shouldn't include a
|
|
# swarming mixin.
|
|
continue
|
|
for test in suite.values():
|
|
assert isinstance(test, dict)
|
|
seen_mixins = seen_mixins.union(test.get('mixins', set()))
|
|
|
|
found_mixins = ADDITIONAL_MIXINS.copy()
|
|
for mixin in seen_mixins:
|
|
if mixin in found_mixins:
|
|
continue
|
|
assert (mixin in chromium_generator.mixins)
|
|
found_mixins[mixin] = chromium_generator.mixins[mixin]
|
|
|
|
pp = pprint.PrettyPrinter(indent=2)
|
|
|
|
format_data = {
|
|
'script_name': os.path.basename(__file__),
|
|
'data_source': 'waterfall.pyl and Chromium\'s mixins.pyl',
|
|
'mixin_data': pp.pformat(found_mixins),
|
|
}
|
|
generated_mixin_pyl = MIXINS_PYL_TEMPLATE.format(**format_data)
|
|
|
|
with open(MIXIN_FILE_NAME, 'w') as f:
|
|
f.write(generated_mixin_pyl)
|
|
f.close()
|
|
|
|
return angle_generator.main()
|
|
|
|
|
|
if __name__ == '__main__': # pragma: no cover
|
|
sys.exit(main())
|