Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 #!/usr/bin/env python | 1 #!/usr/bin/env python |
| 2 # Copyright (c) 2013 The Chromium Authors. All rights reserved. | 2 # Copyright (c) 2013 The Chromium Authors. All rights reserved. |
| 3 # Use of this source code is governed by a BSD-style license that can be | 3 # Use of this source code is governed by a BSD-style license that can be |
| 4 # found in the LICENSE file. | 4 # found in the LICENSE file. |
| 5 | 5 |
| 6 """Entry point for fully-annotated builds. | 6 """Entry point for fully-annotated builds. |
| 7 | 7 |
| 8 This script is part of the effort to move all builds to annotator-based | 8 This script is part of the effort to move all builds to annotator-based |
| 9 systems. Any builder configured to use the AnnotatorFactory.BaseFactory() | 9 systems. Any builder configured to use the AnnotatorFactory.BaseFactory() |
| 10 found in scripts/master/factory/annotator_factory.py executes a single | 10 found in scripts/master/factory/annotator_factory.py executes a single |
| (...skipping 298 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 309 | 309 |
| 310 ret = run_steps(stream, opts.build_properties, opts.factory_properties) | 310 ret = run_steps(stream, opts.build_properties, opts.factory_properties) |
| 311 return ret.status_code | 311 return ret.status_code |
| 312 | 312 |
| 313 | 313 |
| 314 # Return value of run_steps and RecipeEngine.run. | 314 # Return value of run_steps and RecipeEngine.run. |
| 315 RecipeExecutionResult = collections.namedtuple( | 315 RecipeExecutionResult = collections.namedtuple( |
| 316 'RecipeExecutionResult', 'status_code steps_ran') | 316 'RecipeExecutionResult', 'status_code steps_ran') |
| 317 | 317 |
| 318 | 318 |
| 319 def find_recipe(build_properties): | |
|
iannucci
2015/02/03 22:29:23
trick:
def find_recipe(recipe=None, mastername=
| |
| 320 """Finds the recipe to run from build_properties. | |
| 321 | |
| 322 If it is not in build_properties, tries to find it in builders.pyl of the | |
| 323 master. Mutates build_properties to include it in this case. | |
| 324 """ | |
| 325 if 'recipe' in build_properties: | |
| 326 return build_properties['recipe'] | |
| 327 | |
| 328 master_path = chromium_utils.MasterPath(build_properties['mastername']) | |
| 329 builders_file = os.path.join(master_path, 'builders.pyl') | |
| 330 if os.path.isfile(builders_file): | |
| 331 builders = chromium_utils.ReadBuildersFile(builders_file) | |
| 332 builder = builders['builders'][build_properties['buildername']] | |
|
iannucci
2015/02/03 22:29:23
this could raise if ['builders'] doesn't have the
| |
| 333 recipe = builder['recipe'] | |
| 334 build_properties['recipe'] = recipe | |
|
iannucci
2015/02/03 22:29:23
/me flips out
nooooo!!!!! caller should modify bu
| |
| 335 return recipe | |
|
iannucci
2015/02/03 22:29:23
TODO: also return builders['builders'][buildername
| |
| 336 | |
| 337 raise LookupError('Cannot find recipe for %s on %s' % | |
| 338 (build_properties['buildername'], | |
| 339 build_properties['mastername'])) | |
| 340 | |
| 341 | |
| 319 def run_steps(stream, build_properties, factory_properties, | 342 def run_steps(stream, build_properties, factory_properties, |
| 320 test_data=recipe_test_api.DisabledTestData()): | 343 test_data=recipe_test_api.DisabledTestData()): |
| 321 """Returns a tuple of (status_code, steps_ran). | 344 """Returns a tuple of (status_code, steps_ran). |
| 322 | 345 |
| 323 Only one of these values will be set at a time. This is mainly to support the | 346 Only one of these values will be set at a time. This is mainly to support the |
| 324 testing interface used by unittests/recipes_test.py. | 347 testing interface used by unittests/recipes_test.py. |
| 325 """ | 348 """ |
| 326 stream.honor_zero_return_code() | 349 stream.honor_zero_return_code() |
| 327 | 350 |
| 328 # TODO(iannucci): Stop this when blamelist becomes sane data. | 351 # TODO(iannucci): Stop this when blamelist becomes sane data. |
| (...skipping 22 matching lines...) Expand all Loading... | |
| 351 # It's an integration point with a new recipe engine that can run steps | 374 # It's an integration point with a new recipe engine that can run steps |
| 352 # in parallel (that is not implemented yet). Use new engine only if explicitly | 375 # in parallel (that is not implemented yet). Use new engine only if explicitly |
| 353 # asked by setting 'engine' property to 'ParallelRecipeEngine'. | 376 # asked by setting 'engine' property to 'ParallelRecipeEngine'. |
| 354 engine = RecipeEngine.create(stream, properties, test_data) | 377 engine = RecipeEngine.create(stream, properties, test_data) |
| 355 | 378 |
| 356 # Create all API modules and an instance of top level GenSteps generator. | 379 # Create all API modules and an instance of top level GenSteps generator. |
| 357 # It doesn't launch any recipe code yet (generator needs to be iterated upon | 380 # It doesn't launch any recipe code yet (generator needs to be iterated upon |
| 358 # to start executing code). | 381 # to start executing code). |
| 359 api = None | 382 api = None |
| 360 with stream.step('setup_build') as s: | 383 with stream.step('setup_build') as s: |
| 361 assert 'recipe' in factory_properties | 384 recipe = find_recipe(build_properties) |
| 362 recipe = factory_properties['recipe'] | |
| 363 | 385 |
| 364 properties_to_print = properties.copy() | 386 properties_to_print = properties.copy() |
| 365 if 'use_mirror' in properties: | 387 if 'use_mirror' in properties: |
| 366 del properties_to_print['use_mirror'] | 388 del properties_to_print['use_mirror'] |
| 367 | 389 |
| 368 run_recipe_help_lines = [ | 390 run_recipe_help_lines = [ |
| 369 'To repro this locally, run the following line from a build checkout:', | 391 'To repro this locally, run the following line from a build checkout:', |
| 370 '', | 392 '', |
| 371 './scripts/tools/run_recipe.py %s --properties-file - <<EOF' % recipe, | 393 './scripts/tools/run_recipe.py %s --properties-file - <<EOF' % recipe, |
| 372 repr(properties_to_print), | 394 repr(properties_to_print), |
| (...skipping 290 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 663 | 685 |
| 664 def shell_main(argv): | 686 def shell_main(argv): |
| 665 if update_scripts(): | 687 if update_scripts(): |
| 666 return subprocess.call([sys.executable] + argv) | 688 return subprocess.call([sys.executable] + argv) |
| 667 else: | 689 else: |
| 668 return main(argv) | 690 return main(argv) |
| 669 | 691 |
| 670 | 692 |
| 671 if __name__ == '__main__': | 693 if __name__ == '__main__': |
| 672 sys.exit(shell_main(sys.argv)) | 694 sys.exit(shell_main(sys.argv)) |
| OLD | NEW |