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

Side by Side Diff: scripts/slave/recipe_modules/step/example.py

Issue 1347263002: Revert of Cross-repo recipe package system. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/tools/build
Patch Set: Created 5 years, 3 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
(Empty)
1 # Copyright 2013 The Chromium Authors. All rights reserved.
2 # Use of this source code is governed by a BSD-style license that can be
3 # found in the LICENSE file.
4
5 DEPS = [
6 'properties',
7 'step',
8 ]
9
10 from recipe_engine import recipe_api
11
12 def RunSteps(api):
13 # TODO(martinis) change this
14 # The api.step object is directly callable.
15 api.step('hello', ['echo', 'Hello World'])
16 api.step('hello', ['echo', 'Why hello, there.'])
17
18 # You can also manipulate various aspects of the step, such as env.
19 # These are passed straight through to subprocess.Popen.
20 # Also, abusing bash -c in this way is a TERRIBLE IDEA DON'T DO IT.
21 api.step('goodbye', ['bash', '-c', 'echo Good bye, $friend.'],
22 env={'friend': 'Darth Vader'})
23
24 # Finally, you can make your step accept any return code
25 api.step('anything is cool', ['bash', '-c', 'exit 3'],
26 ok_ret='any')
27
28 # We can manipulate the step presentation arbitrarily until we run
29 # the next step.
30 step_result = api.step('hello', ['echo', 'hello'])
31 step_result.presentation.status = api.step.EXCEPTION
32 step_result.presentation.logs['the reason'] = ['The reason\nit failed']
33
34 # Without a command, a step can be used to present some data from the recipe.
35 step_result = api.step('Just print stuff', cmd=None)
36 step_result.presentation.logs['more'] = ['More stuff']
37
38 try:
39 api.step('goodbye', ['echo', 'goodbye'])
40 # Modifying step_result now would raise an AssertionError.
41 except api.step.StepFailure:
42 # Raising anything besides StepFailure causes the build to go purple.
43 raise ValueError('goodbye must exit 0!')
44
45 # Aggregate failures from tests!
46 try:
47 with recipe_api.defer_results():
48 api.step('testa', ['echo', 'testa'])
49 api.step('testb', ['echo', 'testb'])
50 except recipe_api.AggregatedStepFailure as f:
51 raise api.step.StepFailure("You can catch step failures.")
52
53 # Some steps are needed from an infrastructure point of view. If these
54 # steps fail, the build stops, but doesn't get turned red because it's
55 # not the developers' fault.
56 try:
57 api.step('cleanup', ['echo', 'cleaning', 'up', 'build'], infra_step=True)
58 except api.step.InfraFailure as f:
59 assert f.result.presentation.status == api.step.EXCEPTION
60
61 # Run a step through a made-up wrapper program.
62 api.step('application', ['echo', 'main', 'application'],
63 wrapper=['python', 'test-wrapper.py', '-v', '--'])
64
65 if api.properties.get('access_invalid_data'):
66 result = api.step('no-op', ['echo', 'I', 'do', 'nothing'])
67 # Trying to access non-existent attributes on the result should raise.
68 _ = result.json.output
69
70 # You can also raise a warning, which will act like a step failure, but
71 # will turn the build yellow, and stop the build.
72 raise api.step.StepWarning("Warning, robots approaching!")
73
74
75 def GenTests(api):
76 yield (
77 api.test('basic') +
78 api.step_data('anything is cool', retcode=3)
79 )
80
81 # If you don't have the expect_exception in this test, you will get something
82 # like this output.
83 # ======================================================================
84 # ERROR: step:example.exceptional (..../exceptional.json)
85 # ----------------------------------------------------------------------
86 # Traceback (most recent call last):
87 # <full stack trace ommitted>
88 # File "annotated_run.py", line 537, in run
89 # retcode = steps_function(api)
90 # File "recipe_modules/step/example.py", line 39, in RunSteps
91 # raise ValueError('goodbye must exit 0!')
92 # ValueError: goodbye must exit 0!
93
94 yield (
95 api.test('exceptional') +
96 api.step_data('goodbye (2)', retcode=1) +
97 api.expect_exception('ValueError')
98 )
99
100 yield (
101 api.test('defer_results') +
102 api.step_data('testa', retcode=1)
103 )
104
105 yield (
106 api.test('invalid_access') +
107 api.properties(access_invalid_data=True) +
108 api.expect_exception('StepDataAttributeError')
109 )
110
111 yield (
112 api.test('infra_failure') +
113 api.properties(raise_infra_failure=True) +
114 api.step_data('cleanup', retcode=1)
115 )
OLDNEW
« no previous file with comments | « scripts/slave/recipe_modules/step/config.py ('k') | scripts/slave/recipe_modules/step/example.expected/basic.json » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698