| # Copyright 2014 The Chromium Authors. All rights reserved. |
| # Use of this source code is governed by a BSD-style license that can be |
| # found in the LICENSE file. |
| |
| """Buildbot recipe definition for the various Syzygy continuous builders. |
| |
| To be tested using a command-line like: |
| |
| /build/scripts/slave/recipes.py run syzygy/continuous |
| revision=0e9f25b1098271be2b096fd1c095d6d907cf86f7 |
| mastername=master.client.syzygy |
| "buildername=Syzygy Debug" |
| bot_id=fake_slave |
| buildnumber=1 |
| |
| Places resulting output in build/slave/fake_slave. |
| """ |
| |
| from recipe_engine.types import freeze |
| |
| # Recipe module dependencies. |
| DEPS = [ |
| 'chromium', |
| 'depot_tools/gclient', |
| 'recipe_engine/platform', |
| 'recipe_engine/properties', |
| 'syzygy', |
| 'trigger', |
| ] |
| |
| |
| # Valid continuous builders and the Syzygy configurations they load. |
| BUILDERS = freeze({ |
| 'Syzygy Debug': ('syzygy', {'BUILD_CONFIG': 'Debug'}), |
| 'Syzygy Debug x64': ('syzygy_x64', {'BUILD_CONFIG': 'Debug'}), |
| 'Syzygy Release': ('syzygy', {'BUILD_CONFIG': 'Release'}), |
| 'Syzygy Release x64': ('syzygy_x64', {'BUILD_CONFIG': 'Release'}), |
| 'Syzygy Official': ('syzygy_official', {}), |
| |
| # Trybots. |
| 'win_dbg_try': ('syzygy', {'BUILD_CONFIG': 'Debug'}), |
| 'win_rel_try': ('syzygy', {'BUILD_CONFIG': 'Release'}), |
| 'win_official_try': ('syzygy_official', {}), |
| 'win_x64_dbg_try': ('syzygy_x64', {'BUILD_CONFIG': 'Debug'}), |
| 'win_x64_rel_try': ('syzygy_x64', {'BUILD_CONFIG': 'Release'}), |
| 'win8_rel_try': ('syzygy', {'BUILD_CONFIG': 'Release'}), |
| }) |
| |
| |
| from recipe_engine.recipe_api import Property |
| |
| PROPERTIES = { |
| 'buildername': Property(), |
| 'blamelist': Property(), |
| 'revision': Property(), |
| } |
| |
| |
| def RunSteps(api, buildername, blamelist, revision): |
| """Generates the sequence of steps that will be run by the slave.""" |
| assert buildername in BUILDERS |
| |
| # Configure the build environment. |
| s = api.syzygy |
| config, kwargs = BUILDERS[buildername] |
| s.set_config(config, **kwargs) |
| api.chromium.set_config(config, **kwargs) |
| api.gclient.set_config(config, **kwargs) |
| is_x64_build = 'x64' in buildername |
| |
| # Clean up any running processes on the slave. |
| s.taskkill() |
| |
| # Checkout and compile the project. |
| s.checkout() |
| s.runhooks() |
| s.compile() |
| |
| # Load and run the unittests. |
| s.clobber_metrics() |
| if is_x64_build: |
| unittests = ['syzyasan_rtl_unittests'] |
| else: |
| unittests = s.read_unittests_gypi() |
| |
| s.run_unittests(unittests) |
| s.archive_metrics() |
| |
| build_config = api.chromium.c.BUILD_CONFIG |
| if (build_config == 'Release' and not buildername.endswith('_try') |
| and not is_x64_build): |
| s.randomly_reorder_chrome() |
| s.benchmark_chrome() |
| |
| if s.c.official_build and not buildername.endswith('_try'): |
| assert build_config == 'Release' |
| s.archive_binaries() |
| s.upload_symbols() |
| |
| # Sometimes these come as a tuple, sometimes as a list, which messes up the |
| # simulation unittests. |
| blamelist = list(blamelist) if isinstance(blamelist, tuple) else blamelist |
| |
| # Trigger a smoke test build for the same revision. |
| props = {'blamelist': blamelist, |
| 'buildername': 'Syzygy Smoke Test', |
| 'revision': revision} |
| api.trigger(props) |
| |
| |
| def GenTests(api): |
| """Generates an end-to-end successful test for each builder.""" |
| for buildername in BUILDERS.iterkeys(): |
| yield api.syzygy.generate_test(api, buildername) |