README.recipes.md
1<!--- AUTOGENERATED BY `./recipes.py test train` -->
2# Repo documentation for [skia]()
3## Table of Contents
4
5**[Recipe Modules](#Recipe-Modules)**
6 * [build](#recipe_modules-build) (Python3 ✅) — Build Skia for various platforms.
7 * [builder_name_schema](#recipe_modules-builder_name_schema) (Python3 ✅)
8 * [checkout](#recipe_modules-checkout) (Python3 ✅)
9 * [docker](#recipe_modules-docker) (Python3 ✅)
10 * [doxygen](#recipe_modules-doxygen) (Python3 ✅)
11 * [env](#recipe_modules-env) (Python3 ✅)
12 * [flavor](#recipe_modules-flavor) (Python3 ✅)
13 * [git](#recipe_modules-git) (Python3 ✅)
14 * [gold_upload](#recipe_modules-gold_upload) (Python3 ✅)
15 * [gsutil](#recipe_modules-gsutil) (Python3 ✅)
16 * [infra](#recipe_modules-infra) (Python3 ✅)
17 * [run](#recipe_modules-run) (Python3 ✅)
18 * [vars](#recipe_modules-vars) (Python3 ✅)
19
20**[Recipes](#Recipes)**
21 * [build:examples/full](#recipes-build_examples_full) (Python3 ✅)
22 * [builder_name_schema:examples/full](#recipes-builder_name_schema_examples_full) (Python3 ✅)
23 * [checkout:examples/full](#recipes-checkout_examples_full) (Python3 ✅)
24 * [compile](#recipes-compile) (Python3 ✅)
25 * [compute_buildstats](#recipes-compute_buildstats) (Python3 ✅)
26 * [docker:examples/full](#recipes-docker_examples_full) (Python3 ✅)
27 * [doxygen:examples/full](#recipes-doxygen_examples_full) (Python3 ✅)
28 * [env:examples/full](#recipes-env_examples_full) (Python3 ✅)
29 * [flavor:examples/full](#recipes-flavor_examples_full) (Python3 ✅)
30 * [git:examples/full](#recipes-git_examples_full) (Python3 ✅)
31 * [gold_upload:examples/full](#recipes-gold_upload_examples_full) (Python3 ✅)
32 * [gsutil:examples/full](#recipes-gsutil_examples_full) (Python3 ✅)
33 * [housekeeper](#recipes-housekeeper) (Python3 ✅)
34 * [infra](#recipes-infra) (Python3 ✅)
35 * [infra:examples/full](#recipes-infra_examples_full) (Python3 ✅)
36 * [perf](#recipes-perf) (Python3 ✅)
37 * [perf_pathkit](#recipes-perf_pathkit) (Python3 ✅)
38 * [perf_skottietrace](#recipes-perf_skottietrace) (Python3 ✅)
39 * [perf_skottiewasm_lottieweb](#recipes-perf_skottiewasm_lottieweb) (Python3 ✅)
40 * [run:examples/full](#recipes-run_examples_full) (Python3 ✅)
41 * [skpbench](#recipes-skpbench) (Python3 ✅)
42 * [sync_and_compile](#recipes-sync_and_compile) (Python3 ✅)
43 * [test](#recipes-test) (Python3 ✅)
44 * [test_canvaskit](#recipes-test_canvaskit) (Python3 ✅)
45 * [test_lottie_web](#recipes-test_lottie_web) (Python3 ✅)
46 * [test_pathkit](#recipes-test_pathkit) (Python3 ✅)
47 * [upload_buildstats_results](#recipes-upload_buildstats_results) (Python3 ✅)
48 * [upload_dm_results](#recipes-upload_dm_results) (Python3 ✅)
49 * [upload_nano_results](#recipes-upload_nano_results) (Python3 ✅)
50 * [vars:examples/full](#recipes-vars_examples_full) (Python3 ✅)
51## Recipe Modules
52
53### *recipe_modules* / [build](/infra/bots/recipe_modules/build)
54
55[DEPS](/infra/bots/recipe_modules/build/__init__.py#7): [depot\_tools/gclient][depot_tools/recipe_modules/gclient], [recipe\_engine/context][recipe_engine/recipe_modules/context], [recipe\_engine/file][recipe_engine/recipe_modules/file], [recipe\_engine/path][recipe_engine/recipe_modules/path], [recipe\_engine/python][recipe_engine/recipe_modules/python], [recipe\_engine/step][recipe_engine/recipe_modules/step], [docker](#recipe_modules-docker), [env](#recipe_modules-env), [infra](#recipe_modules-infra), [run](#recipe_modules-run), [vars](#recipe_modules-vars)
56
57PYTHON_VERSION_COMPATIBILITY: PY3
58
59Build Skia for various platforms.
60
61#### **class [BuildApi](/infra/bots/recipe_modules/build/api.py#20)([RecipeApi][recipe_engine/wkt/RecipeApi]):**
62
63— **def [\_\_call\_\_](/infra/bots/recipe_modules/build/api.py#47)(self, checkout_root, out_dir):**
64
65Compile the code.
66
67— **def [copy\_build\_products](/infra/bots/recipe_modules/build/api.py#51)(self, out_dir, dst):**
68
69Copy selected build products to dst.
70### *recipe_modules* / [builder\_name\_schema](/infra/bots/recipe_modules/builder_name_schema)
71
72PYTHON_VERSION_COMPATIBILITY: PY3
73
74#### **class [BuilderNameSchemaApi](/infra/bots/recipe_modules/builder_name_schema/api.py#14)([RecipeApi][recipe_engine/wkt/RecipeApi]):**
75
76— **def [DictForBuilderName](/infra/bots/recipe_modules/builder_name_schema/api.py#32)(self, \*args, \*\*kwargs):**
77
78— **def [MakeBuilderName](/infra/bots/recipe_modules/builder_name_schema/api.py#29)(self, \*\*kwargs):**
79### *recipe_modules* / [checkout](/infra/bots/recipe_modules/checkout)
80
81[DEPS](/infra/bots/recipe_modules/checkout/__init__.py#7): [depot\_tools/bot\_update][depot_tools/recipe_modules/bot_update], [depot\_tools/gclient][depot_tools/recipe_modules/gclient], [depot\_tools/git][depot_tools/recipe_modules/git], [depot\_tools/tryserver][depot_tools/recipe_modules/tryserver], [recipe\_engine/context][recipe_engine/recipe_modules/context], [recipe\_engine/file][recipe_engine/recipe_modules/file], [recipe\_engine/path][recipe_engine/recipe_modules/path], [recipe\_engine/properties][recipe_engine/recipe_modules/properties], [recipe\_engine/python][recipe_engine/recipe_modules/python], [recipe\_engine/step][recipe_engine/recipe_modules/step], [run](#recipe_modules-run), [vars](#recipe_modules-vars)
82
83PYTHON_VERSION_COMPATIBILITY: PY3
84
85#### **class [CheckoutApi](/infra/bots/recipe_modules/checkout/api.py#13)([RecipeApi][recipe_engine/wkt/RecipeApi]):**
86
87— **def [assert\_git\_is\_from\_cipd](/infra/bots/recipe_modules/checkout/api.py#20)(self):**
88
89Fail if git is not obtained from CIPD.
90
91— **def [bot\_update](/infra/bots/recipe_modules/checkout/api.py#48)(self, checkout_root, gclient_cache=None, skip_patch=False, override_revision=None):**
92
93Run the steps to obtain a checkout using bot_update.
94
95Args:
96 checkout_root: Root directory where the code will be synced.
97 gclient_cache: Optional, directory of the gclient cache.
98 skip_patch: Ignore changelist/patchset when syncing the Skia repo.
99
100  **@property**<br>— **def [default\_checkout\_root](/infra/bots/recipe_modules/checkout/api.py#15)(self):**
101
102The default location for cached persistent checkouts.
103
104— **def [git](/infra/bots/recipe_modules/checkout/api.py#35)(self, checkout_root):**
105
106Run the steps to perform a pure-git checkout without DEPS.
107### *recipe_modules* / [docker](/infra/bots/recipe_modules/docker)
108
109[DEPS](/infra/bots/recipe_modules/docker/__init__.py#8): [recipe\_engine/file][recipe_engine/recipe_modules/file], [recipe\_engine/path][recipe_engine/recipe_modules/path], [recipe\_engine/python][recipe_engine/recipe_modules/python], [recipe\_engine/raw\_io][recipe_engine/recipe_modules/raw_io], [recipe\_engine/step][recipe_engine/recipe_modules/step], [env](#recipe_modules-env), [run](#recipe_modules-run)
110
111PYTHON_VERSION_COMPATIBILITY: PY3
112
113#### **class [DockerApi](/infra/bots/recipe_modules/docker/api.py#15)([RecipeApi][recipe_engine/wkt/RecipeApi]):**
114
115— **def [mount\_out](/infra/bots/recipe_modules/docker/api.py#27)(self):**
116
117— **def [mount\_src](/infra/bots/recipe_modules/docker/api.py#24)(self):**
118
119— **def [run](/infra/bots/recipe_modules/docker/api.py#32)(self, name, docker_image, src_dir, out_dir, script, args=None, docker_args=None, copies=None, recursive_read=None, attempts=1, match_directory_structure=False):**
120### *recipe_modules* / [doxygen](/infra/bots/recipe_modules/doxygen)
121
122[DEPS](/infra/bots/recipe_modules/doxygen/__init__.py#7): [recipe\_engine/context][recipe_engine/recipe_modules/context], [recipe\_engine/step][recipe_engine/recipe_modules/step], [run](#recipe_modules-run)
123
124PYTHON_VERSION_COMPATIBILITY: PY3
125
126#### **class [DoxygenApi](/infra/bots/recipe_modules/doxygen/api.py#9)([RecipeApi][recipe_engine/wkt/RecipeApi]):**
127
128— **def [generate\_and\_upload](/infra/bots/recipe_modules/doxygen/api.py#10)(self, skia_dir):**
129### *recipe_modules* / [env](/infra/bots/recipe_modules/env)
130
131[DEPS](/infra/bots/recipe_modules/env/__init__.py#7): [recipe\_engine/context][recipe_engine/recipe_modules/context]
132
133PYTHON_VERSION_COMPATIBILITY: PY3
134
135#### **class [EnvApi](/infra/bots/recipe_modules/env/api.py#9)([RecipeApi][recipe_engine/wkt/RecipeApi]):**
136### *recipe_modules* / [flavor](/infra/bots/recipe_modules/flavor)
137
138[DEPS](/infra/bots/recipe_modules/flavor/__init__.py#7): [recipe\_engine/context][recipe_engine/recipe_modules/context], [recipe\_engine/file][recipe_engine/recipe_modules/file], [recipe\_engine/json][recipe_engine/recipe_modules/json], [recipe\_engine/path][recipe_engine/recipe_modules/path], [recipe\_engine/platform][recipe_engine/recipe_modules/platform], [recipe\_engine/python][recipe_engine/recipe_modules/python], [recipe\_engine/raw\_io][recipe_engine/recipe_modules/raw_io], [recipe\_engine/step][recipe_engine/recipe_modules/step], [env](#recipe_modules-env), [run](#recipe_modules-run), [vars](#recipe_modules-vars)
139
140PYTHON_VERSION_COMPATIBILITY: PY3
141
142#### **class [SkiaFlavorApi](/infra/bots/recipe_modules/flavor/api.py#55)([RecipeApi][recipe_engine/wkt/RecipeApi]):**
143
144— **def [cleanup\_steps](/infra/bots/recipe_modules/flavor/api.py#125)(self):**
145
146— **def [copy\_directory\_contents\_to\_device](/infra/bots/recipe_modules/flavor/api.py#81)(self, host_dir, device_dir):**
147
148— **def [copy\_directory\_contents\_to\_host](/infra/bots/recipe_modules/flavor/api.py#84)(self, device_dir, host_dir):**
149
150— **def [copy\_file\_to\_device](/infra/bots/recipe_modules/flavor/api.py#87)(self, host_path, device_path):**
151
152— **def [create\_clean\_device\_dir](/infra/bots/recipe_modules/flavor/api.py#93)(self, path):**
153
154— **def [create\_clean\_host\_dir](/infra/bots/recipe_modules/flavor/api.py#90)(self, path):**
155
156— **def [device\_path\_join](/infra/bots/recipe_modules/flavor/api.py#78)(self, \*args):**
157
158— **def [get\_flavor](/infra/bots/recipe_modules/flavor/api.py#56)(self, vars_api, app_name):**
159
160Return a flavor utils object specific to the given builder.
161
162— **def [install](/infra/bots/recipe_modules/flavor/api.py#102)(self, skps=False, images=False, lotties=False, svgs=False, resources=False, mskps=False, texttraces=False):**
163
164— **def [read\_file\_on\_device](/infra/bots/recipe_modules/flavor/api.py#96)(self, path, \*\*kwargs):**
165
166— **def [remove\_file\_on\_device](/infra/bots/recipe_modules/flavor/api.py#99)(self, path):**
167
168— **def [setup](/infra/bots/recipe_modules/flavor/api.py#69)(self, app_name):**
169
170— **def [step](/infra/bots/recipe_modules/flavor/api.py#75)(self, name, cmd, \*\*kwargs):**
171### *recipe_modules* / [git](/infra/bots/recipe_modules/git)
172
173[DEPS](/infra/bots/recipe_modules/git/__init__.py#7): [recipe\_engine/path][recipe_engine/recipe_modules/path], [env](#recipe_modules-env)
174
175PYTHON_VERSION_COMPATIBILITY: PY3
176
177#### **class [GitApi](/infra/bots/recipe_modules/git/api.py#9)([RecipeApi][recipe_engine/wkt/RecipeApi]):**
178
179— **def [env](/infra/bots/recipe_modules/git/api.py#10)(self):**
180
181Add Git to PATH
182
183Requires the infra/git and infra/tools/git CIPD packages to be installed
184in the 'git' relative path.
185### *recipe_modules* / [gold\_upload](/infra/bots/recipe_modules/gold_upload)
186
187[DEPS](/infra/bots/recipe_modules/gold_upload/__init__.py#7): [recipe\_engine/context][recipe_engine/recipe_modules/context], [recipe\_engine/file][recipe_engine/recipe_modules/file], [recipe\_engine/json][recipe_engine/recipe_modules/json], [recipe\_engine/platform][recipe_engine/recipe_modules/platform], [recipe\_engine/properties][recipe_engine/recipe_modules/properties], [recipe\_engine/python][recipe_engine/recipe_modules/python], [recipe\_engine/step][recipe_engine/recipe_modules/step], [recipe\_engine/time][recipe_engine/recipe_modules/time], [flavor](#recipe_modules-flavor), [gsutil](#recipe_modules-gsutil), [run](#recipe_modules-run), [vars](#recipe_modules-vars)
188
189PYTHON_VERSION_COMPATIBILITY: PY3
190
191#### **class [GoldUploadApi](/infra/bots/recipe_modules/gold_upload/api.py#11)([RecipeApi][recipe_engine/wkt/RecipeApi]):**
192
193— **def [upload](/infra/bots/recipe_modules/gold_upload/api.py#12)(self):**
194
195Attempt to upload files to Gold.
196This module assumes setup has occurred for the vars and flavor modules.
197### *recipe_modules* / [gsutil](/infra/bots/recipe_modules/gsutil)
198
199[DEPS](/infra/bots/recipe_modules/gsutil/__init__.py#7): [recipe\_engine/context][recipe_engine/recipe_modules/context], [recipe\_engine/python][recipe_engine/recipe_modules/python], [recipe\_engine/step][recipe_engine/recipe_modules/step], [run](#recipe_modules-run), [vars](#recipe_modules-vars)
200
201PYTHON_VERSION_COMPATIBILITY: PY3
202
203#### **class [GSUtilApi](/infra/bots/recipe_modules/gsutil/api.py#10)([RecipeApi][recipe_engine/wkt/RecipeApi]):**
204
205— **def [\_\_call\_\_](/infra/bots/recipe_modules/gsutil/api.py#11)(self, step_name, \*args):**
206
207Run gsutil with the given args.
208
209This assumes there exists an executable called gsutil on the PATH.
210This probably only works for Linux/Mac, but those are the only
211hosts that we try to upload to GCS from anyway.
212
213— **def [cp](/infra/bots/recipe_modules/gsutil/api.py#20)(self, name, src, dst, extra_gsutil_args=None, extra_args=None, multithread=False):**
214
215Attempt to upload or download files to/from Google Cloud Storage (GCS).
216
217Args:
218 name: string. Will be used to fill out the step name.
219 src: string. Absolute path for a local file or gcs file (e.g. gs://...)
220 dst: string. Same as src.
221 extra_gsutil_args: optional list of args to be passed to gsutil before the
222 cp command.
223 extra_args: optional list of args to be passed to gsutil cp. e.g. [-Z]
224 asks all files be compressed with gzip after upload and before download.
225 multi_thread: if the -m argument should be used to copy multiple items
226 at once (e.g. gsutil -m cp foo* gs://bar/dir)
227
228If the operation fails, it will be retried multiple times.
229### *recipe_modules* / [infra](/infra/bots/recipe_modules/infra)
230
231[DEPS](/infra/bots/recipe_modules/infra/__init__.py#7): [recipe\_engine/context][recipe_engine/recipe_modules/context], [recipe\_engine/file][recipe_engine/recipe_modules/file], [recipe\_engine/path][recipe_engine/recipe_modules/path], [recipe\_engine/raw\_io][recipe_engine/recipe_modules/raw_io], [recipe\_engine/step][recipe_engine/recipe_modules/step], [run](#recipe_modules-run), [vars](#recipe_modules-vars)
232
233PYTHON_VERSION_COMPATIBILITY: PY3
234
235#### **class [InfraApi](/infra/bots/recipe_modules/infra/api.py#14)([RecipeApi][recipe_engine/wkt/RecipeApi]):**
236
237  **@property**<br>— **def [go\_bin](/infra/bots/recipe_modules/infra/api.py#46)(self):**
238
239  **@property**<br>— **def [go\_env](/infra/bots/recipe_modules/infra/api.py#50)(self):**
240
241  **@property**<br>— **def [gopath](/infra/bots/recipe_modules/infra/api.py#60)(self):**
242
243  **@property**<br>— **def [goroot](/infra/bots/recipe_modules/infra/api.py#15)(self):**
244### *recipe_modules* / [run](/infra/bots/recipe_modules/run)
245
246[DEPS](/infra/bots/recipe_modules/run/__init__.py#7): [recipe\_engine/file][recipe_engine/recipe_modules/file], [recipe\_engine/path][recipe_engine/recipe_modules/path], [recipe\_engine/properties][recipe_engine/recipe_modules/properties], [recipe\_engine/python][recipe_engine/recipe_modules/python], [recipe\_engine/step][recipe_engine/recipe_modules/step], [env](#recipe_modules-env), [vars](#recipe_modules-vars)
247
248PYTHON_VERSION_COMPATIBILITY: PY3
249
250#### **class [SkiaStepApi](/infra/bots/recipe_modules/run/api.py#14)([RecipeApi][recipe_engine/wkt/RecipeApi]):**
251
252— **def [\_\_call\_\_](/infra/bots/recipe_modules/run/api.py#69)(self, steptype, name, abort_on_failure=True, fail_build_on_failure=True, \*\*kwargs):**
253
254Run a step. If it fails, keep going but mark the build status failed.
255
256— **def [\_\_init\_\_](/infra/bots/recipe_modules/run/api.py#16)(self, \*args, \*\*kwargs):**
257
258Initialize the recipe module.
259
260— **def [asset\_version](/infra/bots/recipe_modules/run/api.py#54)(self, asset_name, skia_dir, test_data=None):**
261
262Return the contents of VERSION for the given asset as a string.
263
264If test_data is not specified, reads the property
265'test_<asset_name>_version' or if not present, uses
266TEST_DEFAULT_ASSET_VERSION.
267
268— **def [check\_failure](/infra/bots/recipe_modules/run/api.py#25)(self):**
269
270Raise an exception if any step failed.
271
272  **@property**<br>— **def [failed\_steps](/infra/bots/recipe_modules/run/api.py#31)(self):**
273
274— **def [readfile](/infra/bots/recipe_modules/run/api.py#40)(self, filename, \*args, \*\*kwargs):**
275
276Convenience function for reading files.
277
278— **def [rmtree](/infra/bots/recipe_modules/run/api.py#50)(self, path):**
279
280Wrapper around api.file.rmtree.
281
282— **def [run\_once](/infra/bots/recipe_modules/run/api.py#35)(self, fn, \*args, \*\*kwargs):**
283
284— **def [with\_retry](/infra/bots/recipe_modules/run/api.py#81)(self, steptype, name, attempts, between_attempts_fn=None, abort_on_failure=True, fail_build_on_failure=True, \*\*kwargs):**
285
286— **def [writefile](/infra/bots/recipe_modules/run/api.py#45)(self, filename, contents):**
287
288Convenience function for writing files.
289### *recipe_modules* / [vars](/infra/bots/recipe_modules/vars)
290
291[DEPS](/infra/bots/recipe_modules/vars/__init__.py#7): [depot\_tools/bot\_update][depot_tools/recipe_modules/bot_update], [recipe\_engine/context][recipe_engine/recipe_modules/context], [recipe\_engine/json][recipe_engine/recipe_modules/json], [recipe\_engine/path][recipe_engine/recipe_modules/path], [recipe\_engine/properties][recipe_engine/recipe_modules/properties], [recipe\_engine/python][recipe_engine/recipe_modules/python], [recipe\_engine/raw\_io][recipe_engine/recipe_modules/raw_io], [recipe\_engine/step][recipe_engine/recipe_modules/step], [builder\_name\_schema](#recipe_modules-builder_name_schema)
292
293PYTHON_VERSION_COMPATIBILITY: PY3
294
295#### **class [SkiaVarsApi](/infra/bots/recipe_modules/vars/api.py#16)([RecipeApi][recipe_engine/wkt/RecipeApi]):**
296
297  **@property**<br>— **def [is\_linux](/infra/bots/recipe_modules/vars/api.py#88)(self):**
298
299— **def [setup](/infra/bots/recipe_modules/vars/api.py#18)(self):**
300
301Prepare the variables.
302
303  **@property**<br>— **def [swarming\_bot\_id](/infra/bots/recipe_modules/vars/api.py#96)(self):**
304
305  **@property**<br>— **def [swarming\_task\_id](/infra/bots/recipe_modules/vars/api.py#108)(self):**
306## Recipes
307
308### *recipes* / [build:examples/full](/infra/bots/recipe_modules/build/examples/full.py)
309
310[DEPS](/infra/bots/recipe_modules/build/examples/full.py#7): [recipe\_engine/path][recipe_engine/recipe_modules/path], [recipe\_engine/platform][recipe_engine/recipe_modules/platform], [recipe\_engine/properties][recipe_engine/recipe_modules/properties], [recipe\_engine/raw\_io][recipe_engine/recipe_modules/raw_io], [build](#recipe_modules-build), [run](#recipe_modules-run), [vars](#recipe_modules-vars)
311
312PYTHON_VERSION_COMPATIBILITY: PY3
313
314— **def [RunSteps](/infra/bots/recipe_modules/build/examples/full.py#18)(api):**
315### *recipes* / [builder\_name\_schema:examples/full](/infra/bots/recipe_modules/builder_name_schema/examples/full.py)
316
317[DEPS](/infra/bots/recipe_modules/builder_name_schema/examples/full.py#7): [builder\_name\_schema](#recipe_modules-builder_name_schema)
318
319PYTHON_VERSION_COMPATIBILITY: PY3
320
321— **def [RunSteps](/infra/bots/recipe_modules/builder_name_schema/examples/full.py#12)(api):**
322### *recipes* / [checkout:examples/full](/infra/bots/recipe_modules/checkout/examples/full.py)
323
324[DEPS](/infra/bots/recipe_modules/checkout/examples/full.py#7): [recipe\_engine/file][recipe_engine/recipe_modules/file], [recipe\_engine/path][recipe_engine/recipe_modules/path], [recipe\_engine/platform][recipe_engine/recipe_modules/platform], [recipe\_engine/properties][recipe_engine/recipe_modules/properties], [checkout](#recipe_modules-checkout), [run](#recipe_modules-run), [vars](#recipe_modules-vars)
325
326PYTHON_VERSION_COMPATIBILITY: PY3
327
328— **def [RunSteps](/infra/bots/recipe_modules/checkout/examples/full.py#18)(api):**
329### *recipes* / [compile](/infra/bots/recipes/compile.py)
330
331[DEPS](/infra/bots/recipes/compile.py#10): [recipe\_engine/context][recipe_engine/recipe_modules/context], [recipe\_engine/file][recipe_engine/recipe_modules/file], [recipe\_engine/json][recipe_engine/recipe_modules/json], [recipe\_engine/path][recipe_engine/recipe_modules/path], [recipe\_engine/platform][recipe_engine/recipe_modules/platform], [recipe\_engine/properties][recipe_engine/recipe_modules/properties], [recipe\_engine/python][recipe_engine/recipe_modules/python], [recipe\_engine/step][recipe_engine/recipe_modules/step], [build](#recipe_modules-build), [checkout](#recipe_modules-checkout), [run](#recipe_modules-run), [vars](#recipe_modules-vars)
332
333PYTHON_VERSION_COMPATIBILITY: PY3
334
335— **def [RunSteps](/infra/bots/recipes/compile.py#26)(api):**
336### *recipes* / [compute\_buildstats](/infra/bots/recipes/compute_buildstats.py)
337
338[DEPS](/infra/bots/recipes/compute_buildstats.py#12): [recipe\_engine/context][recipe_engine/recipe_modules/context], [recipe\_engine/file][recipe_engine/recipe_modules/file], [recipe\_engine/path][recipe_engine/recipe_modules/path], [recipe\_engine/properties][recipe_engine/recipe_modules/properties], [recipe\_engine/python][recipe_engine/recipe_modules/python], [recipe\_engine/raw\_io][recipe_engine/recipe_modules/raw_io], [recipe\_engine/step][recipe_engine/recipe_modules/step], [checkout](#recipe_modules-checkout), [env](#recipe_modules-env), [run](#recipe_modules-run), [vars](#recipe_modules-vars)
339
340PYTHON_VERSION_COMPATIBILITY: PY3
341
342— **def [RunSteps](/infra/bots/recipes/compute_buildstats.py#35)(api):**
343
344— **def [add\_binary\_size\_output\_property](/infra/bots/recipes/compute_buildstats.py#31)(result, source, binary_size):**
345
346— **def [analyze\_cpp\_lib](/infra/bots/recipes/compute_buildstats.py#167)(api, checkout_root, out_dir, files):**
347
348— **def [analyze\_flutter\_lib](/infra/bots/recipes/compute_buildstats.py#195)(api, checkout_root, out_dir, files):**
349
350— **def [analyze\_wasm\_file](/infra/bots/recipes/compute_buildstats.py#234)(api, checkout_root, out_dir, files):**
351
352— **def [analyze\_web\_file](/infra/bots/recipes/compute_buildstats.py#140)(api, checkout_root, out_dir, files):**
353
354— **def [keys\_and\_props](/infra/bots/recipes/compute_buildstats.py#116)(api):**
355
356— **def [make\_treemap](/infra/bots/recipes/compute_buildstats.py#266)(api, checkout_root, out_dir, files):**
357### *recipes* / [docker:examples/full](/infra/bots/recipe_modules/docker/examples/full.py)
358
359[DEPS](/infra/bots/recipe_modules/docker/examples/full.py#7): [recipe\_engine/context][recipe_engine/recipe_modules/context], [recipe\_engine/properties][recipe_engine/recipe_modules/properties], [recipe\_engine/step][recipe_engine/recipe_modules/step], [docker](#recipe_modules-docker), [vars](#recipe_modules-vars)
360
361PYTHON_VERSION_COMPATIBILITY: PY3
362
363— **def [RunSteps](/infra/bots/recipe_modules/docker/examples/full.py#16)(api):**
364### *recipes* / [doxygen:examples/full](/infra/bots/recipe_modules/doxygen/examples/full.py)
365
366[DEPS](/infra/bots/recipe_modules/doxygen/examples/full.py#7): [recipe\_engine/path][recipe_engine/recipe_modules/path], [recipe\_engine/properties][recipe_engine/recipe_modules/properties], [doxygen](#recipe_modules-doxygen), [vars](#recipe_modules-vars)
367
368PYTHON_VERSION_COMPATIBILITY: PY3
369
370— **def [RunSteps](/infra/bots/recipe_modules/doxygen/examples/full.py#15)(api):**
371### *recipes* / [env:examples/full](/infra/bots/recipe_modules/env/examples/full.py)
372
373[DEPS](/infra/bots/recipe_modules/env/examples/full.py#7): [recipe\_engine/context][recipe_engine/recipe_modules/context], [recipe\_engine/step][recipe_engine/recipe_modules/step], [env](#recipe_modules-env)
374
375PYTHON_VERSION_COMPATIBILITY: PY3
376
377— **def [RunSteps](/infra/bots/recipe_modules/env/examples/full.py#14)(api):**
378### *recipes* / [flavor:examples/full](/infra/bots/recipe_modules/flavor/examples/full.py)
379
380[DEPS](/infra/bots/recipe_modules/flavor/examples/full.py#7): [recipe\_engine/platform][recipe_engine/recipe_modules/platform], [recipe\_engine/properties][recipe_engine/recipe_modules/properties], [recipe\_engine/raw\_io][recipe_engine/recipe_modules/raw_io], [flavor](#recipe_modules-flavor), [run](#recipe_modules-run), [vars](#recipe_modules-vars)
381
382PYTHON_VERSION_COMPATIBILITY: PY3
383
384— **def [RunSteps](/infra/bots/recipe_modules/flavor/examples/full.py#32)(api):**
385
386— **def [test\_exceptions](/infra/bots/recipe_modules/flavor/examples/full.py#17)(api):**
387### *recipes* / [git:examples/full](/infra/bots/recipe_modules/git/examples/full.py)
388
389[DEPS](/infra/bots/recipe_modules/git/examples/full.py#7): [recipe\_engine/platform][recipe_engine/recipe_modules/platform], [recipe\_engine/step][recipe_engine/recipe_modules/step], [git](#recipe_modules-git)
390
391PYTHON_VERSION_COMPATIBILITY: PY3
392
393— **def [RunSteps](/infra/bots/recipe_modules/git/examples/full.py#14)(api):**
394### *recipes* / [gold\_upload:examples/full](/infra/bots/recipe_modules/gold_upload/examples/full.py)
395
396[DEPS](/infra/bots/recipe_modules/gold_upload/examples/full.py#10): [recipe\_engine/path][recipe_engine/recipe_modules/path], [recipe\_engine/platform][recipe_engine/recipe_modules/platform], [recipe\_engine/properties][recipe_engine/recipe_modules/properties], [recipe\_engine/python][recipe_engine/recipe_modules/python], [recipe\_engine/step][recipe_engine/recipe_modules/step], [flavor](#recipe_modules-flavor), [gold\_upload](#recipe_modules-gold_upload), [run](#recipe_modules-run), [vars](#recipe_modules-vars)
397
398PYTHON_VERSION_COMPATIBILITY: PY3
399
400— **def [RunSteps](/infra/bots/recipe_modules/gold_upload/examples/full.py#23)(api):**
401### *recipes* / [gsutil:examples/full](/infra/bots/recipe_modules/gsutil/examples/full.py)
402
403[DEPS](/infra/bots/recipe_modules/gsutil/examples/full.py#10): [recipe\_engine/path][recipe_engine/recipe_modules/path], [recipe\_engine/properties][recipe_engine/recipe_modules/properties], [recipe\_engine/python][recipe_engine/recipe_modules/python], [recipe\_engine/step][recipe_engine/recipe_modules/step], [gsutil](#recipe_modules-gsutil), [run](#recipe_modules-run), [vars](#recipe_modules-vars)
404
405PYTHON_VERSION_COMPATIBILITY: PY3
406
407— **def [RunSteps](/infra/bots/recipe_modules/gsutil/examples/full.py#21)(api):**
408### *recipes* / [housekeeper](/infra/bots/recipes/housekeeper.py)
409
410[DEPS](/infra/bots/recipes/housekeeper.py#13): [recipe\_engine/file][recipe_engine/recipe_modules/file], [recipe\_engine/path][recipe_engine/recipe_modules/path], [recipe\_engine/properties][recipe_engine/recipe_modules/properties], [checkout](#recipe_modules-checkout), [doxygen](#recipe_modules-doxygen), [run](#recipe_modules-run), [vars](#recipe_modules-vars)
411
412PYTHON_VERSION_COMPATIBILITY: PY3
413
414— **def [RunSteps](/infra/bots/recipes/housekeeper.py#24)(api):**
415### *recipes* / [infra](/infra/bots/recipes/infra.py)
416
417[DEPS](/infra/bots/recipes/infra.py#10): [recipe\_engine/context][recipe_engine/recipe_modules/context], [recipe\_engine/path][recipe_engine/recipe_modules/path], [recipe\_engine/properties][recipe_engine/recipe_modules/properties], [recipe\_engine/step][recipe_engine/recipe_modules/step], [infra](#recipe_modules-infra), [vars](#recipe_modules-vars)
418
419PYTHON_VERSION_COMPATIBILITY: PY3
420
421— **def [RunSteps](/infra/bots/recipes/infra.py#28)(api):**
422
423— **def [git\_init](/infra/bots/recipes/infra.py#20)(api, repo_root, env):**
424### *recipes* / [infra:examples/full](/infra/bots/recipe_modules/infra/examples/full.py)
425
426[DEPS](/infra/bots/recipe_modules/infra/examples/full.py#10): [recipe\_engine/context][recipe_engine/recipe_modules/context], [recipe\_engine/file][recipe_engine/recipe_modules/file], [recipe\_engine/path][recipe_engine/recipe_modules/path], [recipe\_engine/properties][recipe_engine/recipe_modules/properties], [recipe\_engine/python][recipe_engine/recipe_modules/python], [recipe\_engine/step][recipe_engine/recipe_modules/step], [infra](#recipe_modules-infra), [run](#recipe_modules-run), [vars](#recipe_modules-vars)
427
428PYTHON_VERSION_COMPATIBILITY: PY3
429
430— **def [RunSteps](/infra/bots/recipe_modules/infra/examples/full.py#23)(api):**
431### *recipes* / [perf](/infra/bots/recipes/perf.py)
432
433[DEPS](/infra/bots/recipes/perf.py#15): [recipe\_engine/file][recipe_engine/recipe_modules/file], [recipe\_engine/json][recipe_engine/recipe_modules/json], [recipe\_engine/path][recipe_engine/recipe_modules/path], [recipe\_engine/platform][recipe_engine/recipe_modules/platform], [recipe\_engine/properties][recipe_engine/recipe_modules/properties], [recipe\_engine/raw\_io][recipe_engine/recipe_modules/raw_io], [recipe\_engine/step][recipe_engine/recipe_modules/step], [recipe\_engine/time][recipe_engine/recipe_modules/time], [env](#recipe_modules-env), [flavor](#recipe_modules-flavor), [run](#recipe_modules-run), [vars](#recipe_modules-vars)
434
435PYTHON_VERSION_COMPATIBILITY: PY3
436
437— **def [RunSteps](/infra/bots/recipes/perf.py#104)(api):**
438
439— **def [perf\_steps](/infra/bots/recipes/perf.py#31)(api):**
440
441Run Skia benchmarks.
442### *recipes* / [perf\_pathkit](/infra/bots/recipes/perf_pathkit.py)
443
444[DEPS](/infra/bots/recipes/perf_pathkit.py#9): [recipe\_engine/file][recipe_engine/recipe_modules/file], [recipe\_engine/path][recipe_engine/recipe_modules/path], [recipe\_engine/properties][recipe_engine/recipe_modules/properties], [recipe\_engine/python][recipe_engine/recipe_modules/python], [recipe\_engine/step][recipe_engine/recipe_modules/step], [checkout](#recipe_modules-checkout), [docker](#recipe_modules-docker), [env](#recipe_modules-env), [infra](#recipe_modules-infra), [run](#recipe_modules-run), [vars](#recipe_modules-vars)
445
446PYTHON_VERSION_COMPATIBILITY: PY3
447
448— **def [RunSteps](/infra/bots/recipes/perf_pathkit.py#28)(api):**
449### *recipes* / [perf\_skottietrace](/infra/bots/recipes/perf_skottietrace.py)
450
451[DEPS](/infra/bots/recipes/perf_skottietrace.py#17): [recipe\_engine/context][recipe_engine/recipe_modules/context], [recipe\_engine/file][recipe_engine/recipe_modules/file], [recipe\_engine/json][recipe_engine/recipe_modules/json], [recipe\_engine/path][recipe_engine/recipe_modules/path], [recipe\_engine/properties][recipe_engine/recipe_modules/properties], [recipe\_engine/python][recipe_engine/recipe_modules/python], [recipe\_engine/raw\_io][recipe_engine/recipe_modules/raw_io], [recipe\_engine/step][recipe_engine/recipe_modules/step], [recipe\_engine/time][recipe_engine/recipe_modules/time], [flavor](#recipe_modules-flavor), [run](#recipe_modules-run), [vars](#recipe_modules-vars)
452
453PYTHON_VERSION_COMPATIBILITY: PY3
454
455— **def [RunSteps](/infra/bots/recipes/perf_skottietrace.py#238)(api):**
456
457— **def [get\_trace\_match](/infra/bots/recipes/perf_skottietrace.py#147)(lottie_filename, is_android):**
458
459Returns the DM regex to match the specified lottie file name.
460
461— **def [parse\_trace](/infra/bots/recipes/perf_skottietrace.py#162)(trace_json, lottie_filename, api):**
462
463parse_trace parses the specified trace JSON.
464
465Parses the trace JSON and calculates the time of a single frame. Frame time is
466considered the same as seek time + render time.
467Note: The first seek is ignored because it is a constructor call.
468
469A dictionary is returned that has the following structure:
470{
471 'frame_max_us': 100,
472 'frame_min_us': 90,
473 'frame_avg_us': 95,
474}
475
476— **def [perf\_steps](/infra/bots/recipes/perf_skottietrace.py#37)(api):**
477
478Run DM on lottie files with tracing turned on and then parse the output.
479### *recipes* / [perf\_skottiewasm\_lottieweb](/infra/bots/recipes/perf_skottiewasm_lottieweb.py)
480
481[DEPS](/infra/bots/recipes/perf_skottiewasm_lottieweb.py#14): [recipe\_engine/context][recipe_engine/recipe_modules/context], [recipe\_engine/file][recipe_engine/recipe_modules/file], [recipe\_engine/json][recipe_engine/recipe_modules/json], [recipe\_engine/path][recipe_engine/recipe_modules/path], [recipe\_engine/properties][recipe_engine/recipe_modules/properties], [recipe\_engine/python][recipe_engine/recipe_modules/python], [recipe\_engine/step][recipe_engine/recipe_modules/step], [recipe\_engine/time][recipe_engine/recipe_modules/time], [checkout](#recipe_modules-checkout), [env](#recipe_modules-env), [flavor](#recipe_modules-flavor), [infra](#recipe_modules-infra), [run](#recipe_modules-run), [vars](#recipe_modules-vars)
482
483PYTHON_VERSION_COMPATIBILITY: PY3
484
485— **def [RunSteps](/infra/bots/recipes/perf_skottiewasm_lottieweb.py#84)(api):**
486
487— **def [parse\_trace](/infra/bots/recipes/perf_skottiewasm_lottieweb.py#205)(trace_json, lottie_filename, api, renderer):**
488
489parse_trace parses the specified trace JSON.
490
491Parses the trace JSON and calculates the time of a single frame.
492A dictionary is returned that has the following structure:
493{
494 'frame_max_us': 100,
495 'frame_min_us': 90,
496 'frame_avg_us': 95,
497}
498### *recipes* / [run:examples/full](/infra/bots/recipe_modules/run/examples/full.py)
499
500[DEPS](/infra/bots/recipe_modules/run/examples/full.py#7): [recipe\_engine/context][recipe_engine/recipe_modules/context], [recipe\_engine/path][recipe_engine/recipe_modules/path], [recipe\_engine/platform][recipe_engine/recipe_modules/platform], [recipe\_engine/properties][recipe_engine/recipe_modules/properties], [recipe\_engine/step][recipe_engine/recipe_modules/step], [run](#recipe_modules-run), [vars](#recipe_modules-vars)
501
502PYTHON_VERSION_COMPATIBILITY: PY3
503
504— **def [RunSteps](/infra/bots/recipe_modules/run/examples/full.py#22)(api):**
505
506— **def [myfunc](/infra/bots/recipe_modules/run/examples/full.py#18)(api, i):**
507### *recipes* / [skpbench](/infra/bots/recipes/skpbench.py)
508
509[DEPS](/infra/bots/recipes/skpbench.py#13): [recipe\_engine/context][recipe_engine/recipe_modules/context], [recipe\_engine/file][recipe_engine/recipe_modules/file], [recipe\_engine/path][recipe_engine/recipe_modules/path], [recipe\_engine/platform][recipe_engine/recipe_modules/platform], [recipe\_engine/properties][recipe_engine/recipe_modules/properties], [recipe\_engine/python][recipe_engine/recipe_modules/python], [recipe\_engine/raw\_io][recipe_engine/recipe_modules/raw_io], [recipe\_engine/step][recipe_engine/recipe_modules/step], [recipe\_engine/time][recipe_engine/recipe_modules/time], [flavor](#recipe_modules-flavor), [run](#recipe_modules-run), [vars](#recipe_modules-vars)
510
511PYTHON_VERSION_COMPATIBILITY: PY3
512
513— **def [RunSteps](/infra/bots/recipes/skpbench.py#163)(api):**
514
515— **def [skpbench\_steps](/infra/bots/recipes/skpbench.py#42)(api):**
516
517benchmark Skia using skpbench.
518### *recipes* / [sync\_and\_compile](/infra/bots/recipes/sync_and_compile.py)
519
520[DEPS](/infra/bots/recipes/sync_and_compile.py#10): [depot\_tools/gitiles][depot_tools/recipe_modules/gitiles], [recipe\_engine/context][recipe_engine/recipe_modules/context], [recipe\_engine/file][recipe_engine/recipe_modules/file], [recipe\_engine/json][recipe_engine/recipe_modules/json], [recipe\_engine/path][recipe_engine/recipe_modules/path], [recipe\_engine/platform][recipe_engine/recipe_modules/platform], [recipe\_engine/properties][recipe_engine/recipe_modules/properties], [recipe\_engine/python][recipe_engine/recipe_modules/python], [recipe\_engine/step][recipe_engine/recipe_modules/step], [build](#recipe_modules-build), [checkout](#recipe_modules-checkout), [run](#recipe_modules-run), [vars](#recipe_modules-vars)
521
522PYTHON_VERSION_COMPATIBILITY: PY3
523
524— **def [RunSteps](/infra/bots/recipes/sync_and_compile.py#27)(api):**
525### *recipes* / [test](/infra/bots/recipes/test.py)
526
527[DEPS](/infra/bots/recipes/test.py#13): [recipe\_engine/context][recipe_engine/recipe_modules/context], [recipe\_engine/file][recipe_engine/recipe_modules/file], [recipe\_engine/path][recipe_engine/recipe_modules/path], [recipe\_engine/platform][recipe_engine/recipe_modules/platform], [recipe\_engine/properties][recipe_engine/recipe_modules/properties], [recipe\_engine/python][recipe_engine/recipe_modules/python], [recipe\_engine/raw\_io][recipe_engine/recipe_modules/raw_io], [recipe\_engine/step][recipe_engine/recipe_modules/step], [env](#recipe_modules-env), [flavor](#recipe_modules-flavor), [gold\_upload](#recipe_modules-gold_upload), [run](#recipe_modules-run), [vars](#recipe_modules-vars)
528
529PYTHON_VERSION_COMPATIBILITY: PY3
530
531— **def [RunSteps](/infra/bots/recipes/test.py#165)(api):**
532
533— **def [test\_steps](/infra/bots/recipes/test.py#31)(api):**
534
535Run the DM test.
536### *recipes* / [test\_canvaskit](/infra/bots/recipes/test_canvaskit.py)
537
538[DEPS](/infra/bots/recipes/test_canvaskit.py#9): [recipe\_engine/file][recipe_engine/recipe_modules/file], [recipe\_engine/path][recipe_engine/recipe_modules/path], [recipe\_engine/properties][recipe_engine/recipe_modules/properties], [recipe\_engine/python][recipe_engine/recipe_modules/python], [recipe\_engine/step][recipe_engine/recipe_modules/step], [checkout](#recipe_modules-checkout), [docker](#recipe_modules-docker), [env](#recipe_modules-env), [flavor](#recipe_modules-flavor), [gold\_upload](#recipe_modules-gold_upload), [infra](#recipe_modules-infra), [run](#recipe_modules-run), [vars](#recipe_modules-vars)
539
540PYTHON_VERSION_COMPATIBILITY: PY3
541
542— **def [RunSteps](/infra/bots/recipes/test_canvaskit.py#29)(api):**
543### *recipes* / [test\_lottie\_web](/infra/bots/recipes/test_lottie_web.py)
544
545[DEPS](/infra/bots/recipes/test_lottie_web.py#9): [recipe\_engine/file][recipe_engine/recipe_modules/file], [recipe\_engine/path][recipe_engine/recipe_modules/path], [recipe\_engine/properties][recipe_engine/recipe_modules/properties], [recipe\_engine/step][recipe_engine/recipe_modules/step], [checkout](#recipe_modules-checkout), [docker](#recipe_modules-docker), [env](#recipe_modules-env), [flavor](#recipe_modules-flavor), [gold\_upload](#recipe_modules-gold_upload), [infra](#recipe_modules-infra), [run](#recipe_modules-run), [vars](#recipe_modules-vars)
546
547PYTHON_VERSION_COMPATIBILITY: PY3
548
549— **def [RunSteps](/infra/bots/recipes/test_lottie_web.py#29)(api):**
550### *recipes* / [test\_pathkit](/infra/bots/recipes/test_pathkit.py)
551
552[DEPS](/infra/bots/recipes/test_pathkit.py#9): [recipe\_engine/file][recipe_engine/recipe_modules/file], [recipe\_engine/path][recipe_engine/recipe_modules/path], [recipe\_engine/properties][recipe_engine/recipe_modules/properties], [recipe\_engine/python][recipe_engine/recipe_modules/python], [recipe\_engine/step][recipe_engine/recipe_modules/step], [checkout](#recipe_modules-checkout), [docker](#recipe_modules-docker), [env](#recipe_modules-env), [flavor](#recipe_modules-flavor), [gold\_upload](#recipe_modules-gold_upload), [infra](#recipe_modules-infra), [run](#recipe_modules-run), [vars](#recipe_modules-vars)
553
554PYTHON_VERSION_COMPATIBILITY: PY3
555
556— **def [RunSteps](/infra/bots/recipes/test_pathkit.py#30)(api):**
557### *recipes* / [upload\_buildstats\_results](/infra/bots/recipes/upload_buildstats_results.py)
558
559[DEPS](/infra/bots/recipes/upload_buildstats_results.py#10): [recipe\_engine/context][recipe_engine/recipe_modules/context], [recipe\_engine/file][recipe_engine/recipe_modules/file], [recipe\_engine/path][recipe_engine/recipe_modules/path], [recipe\_engine/properties][recipe_engine/recipe_modules/properties], [recipe\_engine/step][recipe_engine/recipe_modules/step], [recipe\_engine/time][recipe_engine/recipe_modules/time], [vars](#recipe_modules-vars)
560
561PYTHON_VERSION_COMPATIBILITY: PY3
562
563— **def [RunSteps](/infra/bots/recipes/upload_buildstats_results.py#21)(api):**
564### *recipes* / [upload\_dm\_results](/infra/bots/recipes/upload_dm_results.py)
565
566[DEPS](/infra/bots/recipes/upload_dm_results.py#13): [recipe\_engine/file][recipe_engine/recipe_modules/file], [recipe\_engine/json][recipe_engine/recipe_modules/json], [recipe\_engine/path][recipe_engine/recipe_modules/path], [recipe\_engine/properties][recipe_engine/recipe_modules/properties], [recipe\_engine/step][recipe_engine/recipe_modules/step], [recipe\_engine/time][recipe_engine/recipe_modules/time], [gsutil](#recipe_modules-gsutil), [vars](#recipe_modules-vars)
567
568PYTHON_VERSION_COMPATIBILITY: PY3
569
570— **def [RunSteps](/infra/bots/recipes/upload_dm_results.py#29)(api):**
571### *recipes* / [upload\_nano\_results](/infra/bots/recipes/upload_nano_results.py)
572
573[DEPS](/infra/bots/recipes/upload_nano_results.py#10): [recipe\_engine/context][recipe_engine/recipe_modules/context], [recipe\_engine/file][recipe_engine/recipe_modules/file], [recipe\_engine/path][recipe_engine/recipe_modules/path], [recipe\_engine/properties][recipe_engine/recipe_modules/properties], [recipe\_engine/step][recipe_engine/recipe_modules/step], [recipe\_engine/time][recipe_engine/recipe_modules/time], [vars](#recipe_modules-vars)
574
575PYTHON_VERSION_COMPATIBILITY: PY3
576
577— **def [RunSteps](/infra/bots/recipes/upload_nano_results.py#21)(api):**
578### *recipes* / [vars:examples/full](/infra/bots/recipe_modules/vars/examples/full.py)
579
580[DEPS](/infra/bots/recipe_modules/vars/examples/full.py#7): [recipe\_engine/path][recipe_engine/recipe_modules/path], [recipe\_engine/platform][recipe_engine/recipe_modules/platform], [recipe\_engine/properties][recipe_engine/recipe_modules/properties], [recipe\_engine/step][recipe_engine/recipe_modules/step], [vars](#recipe_modules-vars)
581
582PYTHON_VERSION_COMPATIBILITY: PY3
583
584— **def [RunSteps](/infra/bots/recipe_modules/vars/examples/full.py#16)(api):**
585
586[depot_tools/recipe_modules/bot_update]: https://chromium.googlesource.com/chromium/tools/depot_tools.git/+/f05fcf7051e12e5b561b8811e299096f332157f7/recipes/README.recipes.md#recipe_modules-bot_update
587[depot_tools/recipe_modules/gclient]: https://chromium.googlesource.com/chromium/tools/depot_tools.git/+/f05fcf7051e12e5b561b8811e299096f332157f7/recipes/README.recipes.md#recipe_modules-gclient
588[depot_tools/recipe_modules/git]: https://chromium.googlesource.com/chromium/tools/depot_tools.git/+/f05fcf7051e12e5b561b8811e299096f332157f7/recipes/README.recipes.md#recipe_modules-git
589[depot_tools/recipe_modules/gitiles]: https://chromium.googlesource.com/chromium/tools/depot_tools.git/+/f05fcf7051e12e5b561b8811e299096f332157f7/recipes/README.recipes.md#recipe_modules-gitiles
590[depot_tools/recipe_modules/tryserver]: https://chromium.googlesource.com/chromium/tools/depot_tools.git/+/f05fcf7051e12e5b561b8811e299096f332157f7/recipes/README.recipes.md#recipe_modules-tryserver
591[recipe_engine/recipe_modules/context]: https://chromium.googlesource.com/infra/luci/recipes-py.git/+/428eeaebf2e1de58ed1c7cae50daba3384d730cd/README.recipes.md#recipe_modules-context
592[recipe_engine/recipe_modules/file]: https://chromium.googlesource.com/infra/luci/recipes-py.git/+/428eeaebf2e1de58ed1c7cae50daba3384d730cd/README.recipes.md#recipe_modules-file
593[recipe_engine/recipe_modules/json]: https://chromium.googlesource.com/infra/luci/recipes-py.git/+/428eeaebf2e1de58ed1c7cae50daba3384d730cd/README.recipes.md#recipe_modules-json
594[recipe_engine/recipe_modules/path]: https://chromium.googlesource.com/infra/luci/recipes-py.git/+/428eeaebf2e1de58ed1c7cae50daba3384d730cd/README.recipes.md#recipe_modules-path
595[recipe_engine/recipe_modules/platform]: https://chromium.googlesource.com/infra/luci/recipes-py.git/+/428eeaebf2e1de58ed1c7cae50daba3384d730cd/README.recipes.md#recipe_modules-platform
596[recipe_engine/recipe_modules/properties]: https://chromium.googlesource.com/infra/luci/recipes-py.git/+/428eeaebf2e1de58ed1c7cae50daba3384d730cd/README.recipes.md#recipe_modules-properties
597[recipe_engine/recipe_modules/python]: https://chromium.googlesource.com/infra/luci/recipes-py.git/+/428eeaebf2e1de58ed1c7cae50daba3384d730cd/README.recipes.md#recipe_modules-python
598[recipe_engine/recipe_modules/raw_io]: https://chromium.googlesource.com/infra/luci/recipes-py.git/+/428eeaebf2e1de58ed1c7cae50daba3384d730cd/README.recipes.md#recipe_modules-raw_io
599[recipe_engine/recipe_modules/step]: https://chromium.googlesource.com/infra/luci/recipes-py.git/+/428eeaebf2e1de58ed1c7cae50daba3384d730cd/README.recipes.md#recipe_modules-step
600[recipe_engine/recipe_modules/time]: https://chromium.googlesource.com/infra/luci/recipes-py.git/+/428eeaebf2e1de58ed1c7cae50daba3384d730cd/README.recipes.md#recipe_modules-time
601[recipe_engine/wkt/RecipeApi]: https://chromium.googlesource.com/infra/luci/recipes-py.git/+/428eeaebf2e1de58ed1c7cae50daba3384d730cd/recipe_engine/recipe_api.py#886
602