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

Side by Side Diff: recipe_modules/generator_script/api.py

Issue 2245113002: Track step nesting in StreamEngine. (Closed) Base URL: https://github.com/luci/recipes-py@emit-initial-properties
Patch Set: Created 4 years, 4 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
OLDNEW
1 # Copyright 2013 The LUCI Authors. All rights reserved. 1 # Copyright 2013 The LUCI Authors. All rights reserved.
2 # Use of this source code is governed under the Apache License, Version 2.0 2 # Use of this source code is governed under the Apache License, Version 2.0
3 # that can be found in the LICENSE file. 3 # that can be found in the LICENSE file.
4 4
5 from recipe_engine import recipe_api 5 from recipe_engine import recipe_api
6 6
7 class GeneratorScriptApi(recipe_api.RecipeApi): 7 class GeneratorScriptApi(recipe_api.RecipeApi):
8 def __call__(self, path_to_script, *args, **kwargs): 8 def __call__(self, path_to_script, *args, **kwargs):
9 """Run a script and generate the steps emitted by that script. 9 """Run a script and generate the steps emitted by that script.
10 10
(...skipping 12 matching lines...) Expand all
23 env: a {key:value} dictionary of the environment variables to override. 23 env: a {key:value} dictionary of the environment variables to override.
24 every value is formatted with the current environment with the python 24 every value is formatted with the current environment with the python
25 % operator, so a value of "%(PATH)s:/some/other/path" would resolve to 25 % operator, so a value of "%(PATH)s:/some/other/path" would resolve to
26 the current PATH value, concatenated with ":/some/other/path" 26 the current PATH value, concatenated with ":/some/other/path"
27 27
28 ok_ret: a list of non-error return codes. This defaults to [0] 28 ok_ret: a list of non-error return codes. This defaults to [0]
29 29
30 infra_step: a bool which indicates that failures in this step are 'infra' 30 infra_step: a bool which indicates that failures in this step are 'infra'
31 failures and should abort with a purple coloration instead red. 31 failures and should abort with a purple coloration instead red.
32 32
33 step_nest_level: an integer which indicates that this step should appear 33 nested: true if this step is nested.
34 on the build status page with this indentation level.
35 34
36 always_run: a bool which indicates that this step should run, even if 35 always_run: a bool which indicates that this step should run, even if
37 some previous step failed. 36 some previous step failed.
38 37
39 outputs_presentation_json: a bool which indicates that this step will emit 38 outputs_presentation_json: a bool which indicates that this step will emit
40 a presentation json file. If this is True, the cmd will be extended with 39 a presentation json file. If this is True, the cmd will be extended with
41 a `--presentation-json /path/to/file.json`. This file will be used to 40 a `--presentation-json /path/to/file.json`. This file will be used to
42 update the step's presentation on the build status page. The file will 41 update the step's presentation on the build status page. The file will
43 be expected to contain a single json object, with any of the following 42 be expected to contain a single json object, with any of the following
44 keys: 43 keys:
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
83 step['env'] = new_env 82 step['env'] = new_env
84 outputs_json = step.pop('outputs_presentation_json', False) 83 outputs_json = step.pop('outputs_presentation_json', False)
85 if outputs_json: 84 if outputs_json:
86 # This step has requested a JSON file which the binary that 85 # This step has requested a JSON file which the binary that
87 # it invokes can write to, so provide it with one. 86 # it invokes can write to, so provide it with one.
88 step['cmd'].extend(['--presentation-json', self.m.json.output(False)]) 87 step['cmd'].extend(['--presentation-json', self.m.json.output(False)])
89 88
90 #TODO(martiniss) change this to use a regular step call 89 #TODO(martiniss) change this to use a regular step call
91 step['ok_ret'] = set(step.pop('ok_ret', {0})) 90 step['ok_ret'] = set(step.pop('ok_ret', {0}))
92 step['infra_step'] = bool(step.pop('infra_step', False)) 91 step['infra_step'] = bool(step.pop('infra_step', False))
93 step['step_nest_level'] = int(step.pop('step_nest_level', 0))
dnj 2016/08/15 17:33:53 (This will be re-added in next PS, was oversight).
94 92
95 if step.pop('always_run', False) or not failed_steps: 93 if step.pop('always_run', False) or not failed_steps:
96 try: 94 try:
97 self.m.step.run_from_dict(step) 95 self.m.step.run_from_dict(step)
98 except self.m.step.StepFailure: 96 except self.m.step.StepFailure:
99 failed_steps.append(step['name']) 97 failed_steps.append(step['name'])
100 finally: 98 finally:
101 step_result = self.m.step.active_result 99 step_result = self.m.step.active_result
102 if outputs_json: 100 if outputs_json:
103 p = step_result.presentation 101 p = step_result.presentation
104 j = step_result.json.output 102 j = step_result.json.output
105 103
106 if j: 104 if j:
107 p.logs.update(j.get('logs', {})) 105 p.logs.update(j.get('logs', {}))
108 p.links.update(j.get('links', {})) 106 p.links.update(j.get('links', {}))
109 p.step_summary_text = j.get('step_summary_text', '') 107 p.step_summary_text = j.get('step_summary_text', '')
110 p.step_text = j.get('step_text', '') 108 p.step_text = j.get('step_text', '')
111 p.properties.update(j.get('properties', {})) 109 p.properties.update(j.get('properties', {}))
112 110
113 if failed_steps: 111 if failed_steps:
114 raise self.m.step.StepFailure( 112 raise self.m.step.StepFailure(
115 "the following steps in %s failed: %s" % 113 "the following steps in %s failed: %s" %
116 (step_name, failed_steps)) 114 (step_name, failed_steps))
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698