Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(342)

Unified Diff: scripts/slave/recipes/chromium_trybot.py

Issue 485873004: Adds ability for builders to only compile targets affected by change (Closed) Base URL: https://chromium.googlesource.com/chromium/tools/build.git@master
Patch Set: merge 2 trunk Created 6 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: scripts/slave/recipes/chromium_trybot.py
diff --git a/scripts/slave/recipes/chromium_trybot.py b/scripts/slave/recipes/chromium_trybot.py
index 8fa2271fc4e234bff23e24bbf9f255e3ac73cda3..da7b0d3f8acdc29229f1a61e8b675ab806fa7dd4 100644
--- a/scripts/slave/recipes/chromium_trybot.py
+++ b/scripts/slave/recipes/chromium_trybot.py
@@ -518,6 +518,16 @@ def get_analyze_config(api, file_name):
return step_result.json.output
+def tests_in_compile_targets(compile_targets, *tests):
+ """Returns the tests in |tests| that have at least one of their compile
+ targets in |compile_targets|."""
+ # The target all builds everything.
+ if 'all' in compile_targets:
+ return tests
+ return [test for test in tests if set(compile_targets) &
+ set(test.compile_targets(None))]
+
+
add_swarming_builder('linux_chromium_rel', 'linux_chromium_rel_swarming',
'tryserver.chromium.linux')
add_swarming_builder('linux_chromium_chromeos_rel',
@@ -684,6 +694,11 @@ def GenSteps(api):
test_spec,
bot_config.get('enable_swarming'),
should_use_test)
+ compile_targets.extend(bot_config.get('compile_targets', []))
+ # TODO(phajdan.jr): Also compile 'all' on win, http://crbug.com/368831 .
+ # Disabled for now because it takes too long and/or fails on Windows.
+ if not api.platform.is_win and not bot_config.get('exclude_compile_all'):
+ compile_targets = ['all'] + compile_targets
runhooks_env = bot_config.get('runhooks_env', {})
@@ -697,14 +712,21 @@ def GenSteps(api):
api.filter.does_patch_require_compile(
exclusions=analyze_config.get('exclusions', []),
exes=get_test_names(gtest_tests, swarming_tests),
+ compile_targets=compile_targets,
env=runhooks_env)
if not api.filter.result:
return [], swarming_tests, bot_update_step
- # Patch needs compile. Filter the list of test targets.
+ # Patch needs compile. Filter the list of test and compile targets.
if should_filter_tests(buildername,
test_spec.get('non_filter_tests_builders', [])):
gtest_tests = filter_tests(gtest_tests, api.filter.matching_exes)
swarming_tests = filter_tests(swarming_tests, api.filter.matching_exes)
+ if buildername in test_spec.get('filter_compile_builders', []):
+ if 'all' in compile_targets:
+ compile_targets = api.filter.compile_targets
+ else:
+ compile_targets = list(set(compile_targets) &
+ set(api.filter.compile_targets))
# Swarming uses Isolate to transfer files to swarming bots.
# set_isolate_environment modifies GYP_DEFINES to enable test isolation.
@@ -735,12 +757,16 @@ def GenSteps(api):
'chromium_asan',
'chromium_chromeos_clang']
and not buildername.startswith('win8')):
- tests.append(api.chromium.steps.TelemetryUnitTests())
- tests.append(api.chromium.steps.TelemetryPerfUnitTests())
+ tests.extend(tests_in_compile_targets(
+ compile_targets,
+ api.chromium.steps.TelemetryUnitTests(),
+ api.chromium.steps.TelemetryPerfUnitTests()))
tests.extend(gtest_tests)
tests.extend(swarming_tests)
- tests.append(api.chromium.steps.NaclIntegrationTest())
+ tests.extend(tests_in_compile_targets(compile_targets,
+ api.chromium.steps.NaclIntegrationTest()))
+ # MojoPythonTests don't require anything to be compiled.
tests.append(api.chromium.steps.MojoPythonTests())
# test_installer only works on 32-bit builds; http://crbug.com/399643
@@ -748,13 +774,8 @@ def GenSteps(api):
#if api.platform.is_win and api.chromium.c.TARGET_BITS == 32:
# tests.append(api.chromium.steps.MiniInstallerTest())
- compile_targets.extend(bot_config.get('compile_targets', []))
compile_targets.extend(api.itertools.chain(
*[t.compile_targets(api) for t in tests]))
- # TODO(phajdan.jr): Also compile 'all' on win, http://crbug.com/368831 .
- # Disabled for now because it takes too long and/or fails on Windows.
- if not api.platform.is_win and not bot_config.get('exclude_compile_all'):
- compile_targets = ['all'] + compile_targets
api.chromium.compile(compile_targets, name='compile (with patch)')
# Collect *.isolated hashes for all isolated targets, used when triggering
@@ -801,6 +822,8 @@ def GenSteps(api):
compile_targets = list(api.itertools.chain(
*[t.compile_targets(api) for t in failing_tests]))
if compile_targets:
+ # Remove duplicate targets.
+ compile_targets = list(set(compile_targets))
try:
api.chromium.compile(
compile_targets, name='compile (without patch)')
@@ -1151,7 +1174,8 @@ def GenTests(api):
) +
api.override_step_data(
'analyze',
- api.json.output({'status': 'Found dependency', 'targets': []}))
+ api.json.output({'status': 'Found dependency', 'targets': [],
+ 'build_targets': []}))
)
# Tests analyze module by way of specifying non_filter_builders and
@@ -1179,7 +1203,8 @@ def GenTests(api):
api.override_step_data(
'analyze',
api.json.output({'status': 'Found dependency',
- 'targets': ['browser_tests', 'base_unittests']}))
+ 'targets': ['browser_tests', 'base_unittests'],
+ 'build_targets': ['browser_tests', 'base_unittests']}))
)
# Tests analyze module by way of not specifying non_filter_builders and
@@ -1207,5 +1232,64 @@ def GenTests(api):
api.override_step_data(
'analyze',
api.json.output({'status': 'Found dependency',
- 'targets': ['browser_tests', 'base_unittests']}))
+ 'targets': ['browser_tests', 'base_unittests'],
+ 'build_targets': ['browser_tests', 'base_unittests']}))
)
+
+ # Tests compile_target portion of analyze module.
+ yield (
+ api.test('compile_because_of_analyze_with_filtered_compile_targets') +
+ props(buildername='linux_chromium_rel') +
+ api.platform.name('linux') +
+ api.override_step_data('read test spec', api.json.output({
+ 'filter_compile_builders': 'linux_chromium_rel',
+ 'gtest_tests': [
+ {
+ 'test': 'base_unittests',
+ 'swarming': {'can_use_on_swarming_builders': True},
+ },
+ {
+ 'test': 'browser_tests',
+ },
+ {
+ 'test': 'unittests',
+ },
+ ],
+ })
+ ) +
+ api.override_step_data(
+ 'analyze',
+ api.json.output({'status': 'Found dependency',
+ 'targets': ['browser_tests', 'base_unittests'],
+ 'build_targets': ['chrome', 'browser_tests',
+ 'base_unittests']}))
+ )
+
+ # Tests compile_targets portion of analyze with a bot that doesn't include the
+ # 'all' target.
+ yield (
+ api.test(
+ 'compile_because_of_analyze_with_filtered_compile_targets_exclude_all') +
+ props(buildername='linux_chromium_browser_asan_rel') +
+ api.platform.name('linux') +
+ api.override_step_data('read test spec', api.json.output({
+ 'compile_targets': ['base_unittests'],
+ 'gtest_tests': [
+ {
+ 'test': 'browser_tests',
+ 'args': '--gtest-filter: *NaCl*',
+ }, {
+ 'test': 'base_tests',
+ 'args': ['--gtest-filter: *NaCl*'],
+ },
+ ],
+ 'filter_compile_builders': 'linux_chromium_browser_asan_rel',
+ })
+ ) +
+ api.override_step_data(
+ 'analyze',
+ api.json.output({'status': 'Found dependency',
+ 'targets': ['browser_tests', 'base_unittests'],
+ 'build_targets': ['base_unittests']}))
+ )
+

Powered by Google App Engine
This is Rietveld 408576698