Index: scripts/slave/recipes/chromium_trybot.py |
diff --git a/scripts/slave/recipes/chromium_trybot.py b/scripts/slave/recipes/chromium_trybot.py |
index 092b8b964e983a7bf00543d352b6fb34b234bb91..b33661d000040d7d51e79310fe1e3b520058fde6 100644 |
--- a/scripts/slave/recipes/chromium_trybot.py |
+++ b/scripts/slave/recipes/chromium_trybot.py |
@@ -490,6 +490,19 @@ def get_analyze_config(api, file_name): |
return step_result.json.output |
+def append_test_if_in_compile_targets(test, tests, compile_targets): |
+ """Adds |test| to |tests| if at least one of the test's compile target is in |
+ |compile_targets|.""" |
+ # The target all builds everything. |
+ if 'all' in compile_targets: |
+ tests.append(test) |
+ return |
iannucci
2014/08/20 17:54:40
I would generally recommend returning something (p
sky
2014/08/20 20:26:33
Done.
|
+ for target in test.compile_targets(None): |
+ if target in compile_targets: |
+ tests.append(test) |
+ return |
+ |
+ |
add_swarming_builder('linux_chromium_rel', 'linux_chromium_rel_swarming', |
'tryserver.chromium.linux') |
add_swarming_builder('linux_chromium_chromeos_rel', |
@@ -656,6 +669,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'): |
iannucci
2014/08/20 17:54:40
TODO: the bot_config stuff has gotten excessively
sky
2014/08/20 20:26:33
No argument there.
|
+ compile_targets = ['all'] + compile_targets |
runhooks_env = bot_config.get('runhooks_env', {}) |
@@ -669,14 +687,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: |
iannucci
2014/08/20 17:54:40
TBH, I would rather 'magic' compile targets like '
sky
2014/08/20 20:26:33
The specialness is handled by the build system. Ar
|
+ 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. |
@@ -706,12 +731,16 @@ def GenSteps(api): |
if (bot_config['chromium_config'] not in ['chromium_chromeos', |
'chromium_chromeos_clang'] |
iannucci
2014/08/20 17:54:40
this should be
if bot_config.get('do_telemetry_te
sky
2014/08/20 20:26:33
Agreed. I didn't add these. I'm happy to change in
|
and not buildername.startswith('win8')): |
iannucci
2014/08/20 17:54:40
This is exactly the sort of logic that configs sho
|
- tests.append(api.chromium.steps.TelemetryUnitTests()) |
- tests.append(api.chromium.steps.TelemetryPerfUnitTests()) |
+ append_test_if_in_compile_targets(api.chromium.steps.TelemetryUnitTests(), |
+ tests, compile_targets) |
+ append_test_if_in_compile_targets( |
+ api.chromium.steps.TelemetryPerfUnitTests(), tests, compile_targets) |
tests.extend(gtest_tests) |
tests.extend(swarming_tests) |
- tests.append(api.chromium.steps.NaclIntegrationTest()) |
+ append_test_if_in_compile_targets(api.chromium.steps.NaclIntegrationTest(), |
+ tests, compile_targets) |
+ # 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 |
@@ -719,13 +748,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 |
@@ -769,6 +793,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)') |
@@ -1118,7 +1144,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 |
@@ -1146,7 +1173,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 |
@@ -1174,5 +1202,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_browser_asan') + |
+ 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_browser_asan', |
+ }) |
+ ) + |
+ api.override_step_data( |
+ 'analyze', |
+ api.json.output({'status': 'Found dependency', |
+ 'targets': ['browser_tests', 'base_unittests'], |
+ 'build_targets': ['base_unittests']})) |
+ ) |
+ |