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

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

Issue 1241323004: Cross-repo recipe package system. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/tools/build
Patch Set: Created 5 years, 5 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
33 try:
34 api.step('goodbye', ['echo', 'goodbye'])
35 # Modifying step_result now would raise an AssertionError.
36 except api.step.StepFailure:
37 # Raising anything besides StepFailure causes the build to go purple.
38 raise ValueError('goodbye must exit 0!')
39
40 # Aggregate failures from tests!
41 try:
42 with recipe_api.defer_results():
43 api.step('testa', ['echo', 'testa'])
44 api.step('testb', ['echo', 'testb'])
45 except recipe_api.AggregatedStepFailure as f:
46 raise api.step.StepFailure("You can catch step failures.")
47
48 # Some steps are needed from an infrastructure point of view. If these
49 # steps fail, the build stops, but doesn't get turned red because it's
50 # not the developers' fault.
51 try:
52 api.step('cleanup', ['echo', 'cleaning', 'up', 'build'], infra_step=True)
53 except api.step.InfraFailure as f:
54 assert f.result.presentation.status == api.step.EXCEPTION
55
56 # Run a step through a made-up wrapper program.
57 api.step('application', ['echo', 'main', 'application'],
58 wrapper=['python', 'test-wrapper.py', '-v', '--'])
59
60 if api.properties.get('access_invalid_data'):
61 result = api.step('no-op', ['echo', 'I', 'do', 'nothing'])
62 # Trying to access non-existent attributes on the result should raise.
63 _ = result.json.output
64
65 # You can also raise a warning, which will act like a step failure, but
66 # will turn the build yellow, and stop the build.
67 raise api.step.StepWarning("Warning, robots approaching!")
68
69
70 def GenTests(api):
71 yield (
72 api.test('basic') +
73 api.step_data('anything is cool', retcode=3)
74 )
75
76 # If you don't have the expect_exception in this test, you will get something
77 # like this output.
78 # ======================================================================
79 # ERROR: step:example.exceptional (..../exceptional.json)
80 # ----------------------------------------------------------------------
81 # Traceback (most recent call last):
82 # <full stack trace ommitted>
83 # File "annotated_run.py", line 537, in run
84 # retcode = steps_function(api)
85 # File "recipe_modules/step/example.py", line 39, in RunSteps
86 # raise ValueError('goodbye must exit 0!')
87 # ValueError: goodbye must exit 0!
88
89 yield (
90 api.test('exceptional') +
91 api.step_data('goodbye (2)', retcode=1) +
92 api.expect_exception('ValueError')
93 )
94
95 yield (
96 api.test('defer_results') +
97 api.step_data('testa', retcode=1)
98 )
99
100 yield (
101 api.test('invalid_access') +
102 api.properties(access_invalid_data=True) +
103 api.expect_exception('StepDataAttributeError')
104 )
105
106 yield (
107 api.test('infra_failure') +
108 api.properties(raise_infra_failure=True) +
109 api.step_data('cleanup', retcode=1)
110 )
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698