| <!--- AUTOGENERATED BY `./recipes.py test train` --> |
| # Repo documentation for [depot\_tools](https://chromium.googlesource.com/chromium/tools/depot_tools.git) |
| ## Table of Contents |
| |
| **[Recipe Modules](#Recipe-Modules)** |
| * [bot_update](#recipe_modules-bot_update) — Recipe module to ensure a checkout is consistent on a bot. |
| * [cipd](#recipe_modules-cipd) — API for interacting with CIPD. |
| * [depot_tools](#recipe_modules-depot_tools) — The `depot_tools` module provides safe functions to access paths within the depot_tools repo. |
| * [gclient](#recipe_modules-gclient) |
| * [gerrit](#recipe_modules-gerrit) |
| * [git](#recipe_modules-git) |
| * [git_cl](#recipe_modules-git_cl) |
| * [gitiles](#recipe_modules-gitiles) |
| * [gsutil](#recipe_modules-gsutil) |
| * [infra_paths](#recipe_modules-infra_paths) |
| * [osx_sdk](#recipe_modules-osx_sdk) — The `osx_sdk` module provides safe functions to access a semi-hermetic XCode installation. |
| * [presubmit](#recipe_modules-presubmit) |
| * [tryserver](#recipe_modules-tryserver) |
| * [windows_sdk](#recipe_modules-windows_sdk) — The `windows_sdk` module provides safe functions to access a hermetic Microsoft Visual Studio installation. |
| |
| **[Recipes](#Recipes)** |
| * [bot_update:examples/full](#recipes-bot_update_examples_full) |
| * [bot_update:tests/ensure_checkout](#recipes-bot_update_tests_ensure_checkout) |
| * [cipd:examples/full](#recipes-cipd_examples_full) |
| * [cipd:examples/platform_suffix](#recipes-cipd_examples_platform_suffix) |
| * [depot_tools:examples/full](#recipes-depot_tools_examples_full) |
| * [fetch_end_to_end_test](#recipes-fetch_end_to_end_test) |
| * [gclient:examples/full](#recipes-gclient_examples_full) |
| * [gclient:tests/patch_project](#recipes-gclient_tests_patch_project) |
| * [gerrit:examples/full](#recipes-gerrit_examples_full) |
| * [git:examples/full](#recipes-git_examples_full) |
| * [git_cl:examples/full](#recipes-git_cl_examples_full) |
| * [gitiles:examples/full](#recipes-gitiles_examples_full) |
| * [gitiles:tests/parse_repo_url](#recipes-gitiles_tests_parse_repo_url) |
| * [gsutil:examples/full](#recipes-gsutil_examples_full) |
| * [infra_paths:examples/full](#recipes-infra_paths_examples_full) |
| * [osx_sdk:examples/full](#recipes-osx_sdk_examples_full) |
| * [presubmit:examples/full](#recipes-presubmit_examples_full) |
| * [presubmit:tests/execute](#recipes-presubmit_tests_execute) |
| * [presubmit:tests/prepare](#recipes-presubmit_tests_prepare) |
| * [tryserver:examples/full](#recipes-tryserver_examples_full) |
| * [tryserver:tests/gerrit_change_fetch_ref](#recipes-tryserver_tests_gerrit_change_fetch_ref) |
| * [windows_sdk:examples/full](#recipes-windows_sdk_examples_full) |
| ## Recipe Modules |
| |
| ### *recipe_modules* / [bot\_update](/recipes/recipe_modules/bot_update) |
| |
| [DEPS](/recipes/recipe_modules/bot_update/__init__.py#1): [depot\_tools](#recipe_modules-depot_tools), [gclient](#recipe_modules-gclient), [gerrit](#recipe_modules-gerrit), [gitiles](#recipe_modules-gitiles), [tryserver](#recipe_modules-tryserver), [recipe\_engine/buildbucket][recipe_engine/recipe_modules/buildbucket], [recipe\_engine/commit\_position][recipe_engine/recipe_modules/commit_position], [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/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/runtime][recipe_engine/recipe_modules/runtime], [recipe\_engine/source\_manifest][recipe_engine/recipe_modules/source_manifest], [recipe\_engine/step][recipe_engine/recipe_modules/step] |
| |
| Recipe module to ensure a checkout is consistent on a bot. |
| |
| #### **class [BotUpdateApi](/recipes/recipe_modules/bot_update/api.py#12)([RecipeApi][recipe_engine/wkt/RecipeApi]):** |
| |
| — **def [\_\_call\_\_](/recipes/recipe_modules/bot_update/api.py#27)(self, name, cmd, \*\*kwargs):** |
| |
| Wrapper for easy calling of bot_update. |
| |
| — **def [deapply\_patch](/recipes/recipe_modules/bot_update/api.py#468)(self, bot_update_step):** |
| |
| Deapplies a patch, taking care of DEPS and solution revisions properly. |
| |
| |
| — **def [ensure\_checkout](/recipes/recipe_modules/bot_update/api.py#68)(self, gclient_config=None, suffix=None, patch=True, update_presentation=True, patch_root=None, with_branch_heads=False, with_tags=False, refs=None, patch_oauth2=None, oauth2_json=None, use_site_config_creds=None, clobber=False, root_solution_revision=None, rietveld=None, issue=None, patchset=None, gerrit_no_reset=False, gerrit_no_rebase_patch_ref=False, disable_syntax_validation=False, manifest_name=None, patch_refs=None, ignore_input_commit=False, set_output_commit=False, step_test_data=None, \*\*kwargs):** |
| |
| Args: |
| gclient_config: The gclient configuration to use when running bot_update. |
| If omitted, the current gclient configuration is used. |
| disable_syntax_validation: (legacy) Disables syntax validation for DEPS. |
| Needed as migration paths for recipes dealing with older revisions, |
| such as bisect. |
| manifest_name: The name of the manifest to upload to LogDog. This must |
| be unique for the whole build. |
| ignore_input_commit: if True, ignore api.buildbucket.gitiles_commit. |
| Exists for historical reasons. Please do not use. |
| set_output_commit: if True, mark the checked out commit as the |
| primary output commit of this build, i.e. call |
| api.buildbucket.set_output_gitiles_commit. |
| In case of multiple repos, the repo is the one specified in |
| api.buildbucket.gitiles_commit or the first configured solution. |
| When sorting builds by commit position, this commit will be used. |
| Requires falsy ignore_input_commit. |
| step_test_data: a null function that returns test bot_update.py output. |
| Use test_api.output_json to generate test data. |
| |
| — **def [get\_project\_revision\_properties](/recipes/recipe_modules/bot_update/api.py#445)(self, project_name, gclient_config=None):** |
| |
| Returns all property names used for storing the checked-out revision of |
| a given project. |
| |
| Args: |
| project_name (str): The name of a checked-out project as deps path, e.g. |
| src or src/v8. |
| gclient_config: The gclient configuration to use. If omitted, the current |
| gclient configuration is used. |
| |
| Returns (list of str): All properties that'll hold the checked-out revision |
| of the given project. An empty list if no such properties exist. |
| |
| — **def [initialize](/recipes/recipe_modules/bot_update/api.py#22)(self):** |
| |
|   **@property**<br>— **def [last\_returned\_properties](/recipes/recipe_modules/bot_update/api.py#36)(self):** |
| ### *recipe_modules* / [cipd](/recipes/recipe_modules/cipd) |
| |
| [DEPS](/recipes/recipe_modules/cipd/__init__.py#1): [infra\_paths](#recipe_modules-infra_paths), [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/raw\_io][recipe_engine/recipe_modules/raw_io], [recipe\_engine/step][recipe_engine/recipe_modules/step] |
| |
| API for interacting with CIPD. |
| |
| Depends on 'cipd' binary available in PATH: |
| https://godoc.org/go.chromium.org/luci/cipd/client/cmd/cipd |
| |
| WARNING: There is an alternative cipd recipe_module in recipes-py.git: |
| https://codesearch.chromium.org/chromium/infra/recipes-py/recipe_modules/cipd/ |
| |
| Consider using that one instead. |
| TODO(crbug.com/875523): Delete this module. |
| |
| #### **class [CIPDApi](/recipes/recipe_modules/cipd/api.py#160)([RecipeApi][recipe_engine/wkt/RecipeApi]):** |
| |
| CIPDApi provides basic support for CIPD. |
| |
| This assumes that `cipd` (or `cipd.exe` or `cipd.bat` on windows) has been |
| installed somewhere in $PATH. This will be true if you use depot_tools, or if |
| your recipe is running inside of chrome-infrastructure's systems (buildbot, |
| swarming). |
| |
| — **def [build](/recipes/recipe_modules/cipd/api.py#233)(self, input_dir, output_package, package_name, install_mode=None):** |
| |
| Builds, but does not upload, a cipd package from a directory. |
| |
| Args: |
| input_dir (Path) - the directory to build the package from. |
| output_package (Path) - the file to write the package to. |
| package_name (str) - the name of the cipd package as it would appear when |
| uploaded to the cipd package server. |
| install_mode (None|'copy'|'symlink') - the mechanism that the cipd client |
| should use when installing this package. If None, defaults to the |
| platform default ('copy' on windows, 'symlink' on everything else). |
| |
| — **def [create\_from\_pkg](/recipes/recipe_modules/cipd/api.py#329)(self, pkg_def, refs=None, tags=None):** |
| |
| Builds and uploads a package based on a PackageDefinition object. |
| |
| This builds and uploads the package in one step. |
| |
| Args: |
| pkg_def (PackageDefinition) - The description of the package we want to |
| create. |
| refs (list(str)) - A list of ref names to set for the package instance. |
| tags (dict(str, str)) - A map of tag name -> value to set for the package |
| instance. |
| |
| Returns the JSON 'result' section, e.g.: { |
| "package": "infra/tools/cipd/android-amd64", |
| "instance_id": "433bfdf86c0bb82d1eee2d1a0473d3709c25d2c4" |
| } |
| |
| — **def [create\_from\_yaml](/recipes/recipe_modules/cipd/api.py#309)(self, pkg_def, refs=None, tags=None):** |
| |
| Builds and uploads a package based on on-disk YAML package definition |
| file. |
| |
| This builds and uploads the package in one step. |
| |
| Args: |
| pkg_def (Path) - The path to the yaml file. |
| refs (list(str)) - A list of ref names to set for the package instance. |
| tags (dict(str, str)) - A map of tag name -> value to set for the package |
| instance. |
| |
| Returns the JSON 'result' section, e.g.: { |
| "package": "infra/tools/cipd/android-amd64", |
| "instance_id": "433bfdf86c0bb82d1eee2d1a0473d3709c25d2c4" |
| } |
| |
|   **@property**<br>— **def [default\_bot\_service\_account\_credentials](/recipes/recipe_modules/cipd/api.py#197)(self):** |
| |
| — **def [describe](/recipes/recipe_modules/cipd/api.py#436)(self, package_name, version, test_data_refs=None, test_data_tags=None):** |
| |
| — **def [ensure](/recipes/recipe_modules/cipd/api.py#351)(self, root, packages):** |
| |
| Ensures that packages are installed in a given root dir. |
| |
| packages must be a mapping from package name to its version, where |
| * name must be for right platform (see also ``platform_suffix``), |
| * version could be either instance_id, or ref, or unique tag. |
| |
| If installing a package requires credentials, call |
| ``set_service_account_credentials`` before calling this function. |
| |
|   **@property**<br>— **def [executable](/recipes/recipe_modules/cipd/api.py#193)(self):** |
| |
| — **def [initialize](/recipes/recipe_modules/cipd/api.py#187)(self):** |
| |
| — **def [platform\_suffix](/recipes/recipe_modules/cipd/api.py#206)(self, name=None, arch=None, bits=None):** |
| |
| Use to get full package name that is platform indepdent. |
| |
| Example: |
| >>> 'my/package/%s' % api.cipd.platform_suffix() |
| 'my/package/linux-amd64' |
| |
| Optional platform bits and architecture may be supplied to generate CIPD |
| suffixes for other platforms. If any are omitted, the current platform |
| parameters will be used. |
| |
| — **def [register](/recipes/recipe_modules/cipd/api.py#261)(self, package_name, package_path, refs=None, tags=None):** |
| |
| — **def [search](/recipes/recipe_modules/cipd/api.py#418)(self, package_name, tag):** |
| |
| — **def [set\_ref](/recipes/recipe_modules/cipd/api.py#398)(self, package_name, version, refs):** |
| |
| — **def [set\_service\_account\_credentials](/recipes/recipe_modules/cipd/api.py#190)(self, path):** |
| |
| — **def [set\_tag](/recipes/recipe_modules/cipd/api.py#378)(self, package_name, version, tags):** |
| ### *recipe_modules* / [depot\_tools](/recipes/recipe_modules/depot_tools) |
| |
| [DEPS](/recipes/recipe_modules/depot_tools/__init__.py#5): [recipe\_engine/context][recipe_engine/recipe_modules/context], [recipe\_engine/platform][recipe_engine/recipe_modules/platform], [recipe\_engine/runtime][recipe_engine/recipe_modules/runtime] |
| |
| The `depot_tools` module provides safe functions to access paths within |
| the depot_tools repo. |
| |
| #### **class [DepotToolsApi](/recipes/recipe_modules/depot_tools/api.py#12)([RecipeApi][recipe_engine/wkt/RecipeApi]):** |
| |
|   **@property**<br>— **def [autoninja\_path](/recipes/recipe_modules/depot_tools/api.py#45)(self):** |
| |
|   **@property**<br>— **def [cros\_path](/recipes/recipe_modules/depot_tools/api.py#26)(self):** |
| |
|   **@property**<br>— **def [download\_from\_google\_storage\_path](/recipes/recipe_modules/depot_tools/api.py#13)(self):** |
| |
|   **@property**<br>— **def [gn\_py\_path](/recipes/recipe_modules/depot_tools/api.py#30)(self):** |
| |
|   **@property**<br>— **def [gsutil\_py\_path](/recipes/recipe_modules/depot_tools/api.py#36)(self):** |
| |
|   **@property**<br>— **def [ninja\_path](/recipes/recipe_modules/depot_tools/api.py#40)(self):** |
| |
|   **@contextlib.contextmanager**<br>— **def [on\_path](/recipes/recipe_modules/depot_tools/api.py#54)(self):** |
| |
| Use this context manager to put depot_tools on $PATH. |
| |
| Example: |
| |
| with api.depot_tools.on_path(): |
| # run some steps |
| |
|   **@property**<br>— **def [presubmit\_support\_py\_path](/recipes/recipe_modules/depot_tools/api.py#50)(self):** |
| |
|   **@property**<br>— **def [root](/recipes/recipe_modules/depot_tools/api.py#21)(self):** |
| |
| Returns (Path): The "depot_tools" root directory. |
| |
|   **@property**<br>— **def [upload\_to\_google\_storage\_path](/recipes/recipe_modules/depot_tools/api.py#17)(self):** |
| ### *recipe_modules* / [gclient](/recipes/recipe_modules/gclient) |
| |
| [DEPS](/recipes/recipe_modules/gclient/__init__.py#1): [gitiles](#recipe_modules-gitiles), [infra\_paths](#recipe_modules-infra_paths), [tryserver](#recipe_modules-tryserver), [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/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] |
| |
| #### **class [GclientApi](/recipes/recipe_modules/gclient/api.py#65)([RecipeApi][recipe_engine/wkt/RecipeApi]):** |
| |
| — **def [\_\_call\_\_](/recipes/recipe_modules/gclient/api.py#75)(self, name, cmd, infra_step=True, \*\*kwargs):** |
| |
| Wrapper for easy calling of gclient steps. |
| |
| — **def [break\_locks](/recipes/recipe_modules/gclient/api.py#270)(self):** |
| |
| Remove all index.lock files. If a previous run of git crashed, bot was |
| reset, etc... we might end up with leftover index.lock files. |
| |
| — **def [checkout](/recipes/recipe_modules/gclient/api.py#230)(self, gclient_config=None, revert=RevertOnTryserver, inject_parent_got_revision=True, extra_sync_flags=None, \*\*kwargs):** |
| |
| Return a step generator function for gclient checkouts. |
| |
|   **@staticmethod**<br>— **def [config\_to\_pythonish](/recipes/recipe_modules/gclient/api.py#120)(cfg):** |
| |
| — **def [get\_config\_defaults](/recipes/recipe_modules/gclient/api.py#114)(self):** |
| |
| — **def [get\_gerrit\_patch\_root](/recipes/recipe_modules/gclient/api.py#292)(self, gclient_config=None):** |
| |
| Returns local path to the repo where gerrit patch will be applied. |
| |
| If there is no patch, returns None. |
| If patch is specified, but such repo is not found among configured solutions |
| or repo_path_map, returns name of the first solution. This is done solely |
| for backward compatibility with existing tests. |
| Please do not rely on this logic in new code. |
| Instead, properly map a repository to a local path using repo_path_map. |
| TODO(nodir): remove this. Update all recipe tests to specify a git_repo |
| matching the recipe. |
| |
| — **def [get\_repo\_path](/recipes/recipe_modules/gclient/api.py#319)(self, repo_url, gclient_config=None):** |
| |
| Returns local path to the repo checkout given its url. |
| |
| Consults cfg.repo_path_map and fallbacks to urls in configured solutions. |
| |
| Returns None if not found. |
| |
|   **@staticmethod**<br>— **def [got\_revision\_reverse\_mapping](/recipes/recipe_modules/gclient/api.py#125)(cfg):** |
| |
| Returns the merged got_revision_reverse_mapping. |
| |
| Returns (dict): A mapping from property name -> project name. It merges the |
| values of the deprecated got_revision_mapping and the new |
| got_revision_reverse_mapping. |
| |
| — **def [inject\_parent\_got\_revision](/recipes/recipe_modules/gclient/api.py#205)(self, gclient_config=None, override=False):** |
| |
| Match gclient config to build revisions obtained from build_properties. |
| |
| Args: |
| gclient_config (gclient config object) - The config to manipulate. A value |
| of None manipulates the module's built-in config (self.c). |
| override (bool) - If True, will forcibly set revision and custom_vars |
| even if the config already contains values for them. |
| |
| — **def [resolve\_revision](/recipes/recipe_modules/gclient/api.py#142)(self, revision):** |
| |
| — **def [runhooks](/recipes/recipe_modules/gclient/api.py#264)(self, args=None, name='runhooks', \*\*kwargs):** |
| |
| — **def [set\_patch\_repo\_revision](/recipes/recipe_modules/gclient/api.py#349)(self, gclient_config=None):** |
| |
| Updates config revision corresponding to patch_project. |
| |
| Useful for bot_update only, as this is the only consumer of gclient's config |
| revision map. This doesn't overwrite the revision if it was already set. |
| |
|   **@spec_alias.deleter**<br>— **def [spec\_alias](/recipes/recipe_modules/gclient/api.py#110)(self):** |
| |
| — **def [sync](/recipes/recipe_modules/gclient/api.py#147)(self, cfg, extra_sync_flags=None, \*\*kwargs):** |
| |
|   **@use_mirror.setter**<br>— **def [use\_mirror](/recipes/recipe_modules/gclient/api.py#97)(self, val):** |
| ### *recipe_modules* / [gerrit](/recipes/recipe_modules/gerrit) |
| |
| [DEPS](/recipes/recipe_modules/gerrit/__init__.py#1): [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/python][recipe_engine/recipe_modules/python], [recipe\_engine/raw\_io][recipe_engine/recipe_modules/raw_io], [recipe\_engine/step][recipe_engine/recipe_modules/step] |
| |
| #### **class [GerritApi](/recipes/recipe_modules/gerrit/api.py#7)([RecipeApi][recipe_engine/wkt/RecipeApi]):** |
| |
| Module for interact with gerrit endpoints |
| |
| — **def [\_\_call\_\_](/recipes/recipe_modules/gerrit/api.py#14)(self, name, cmd, infra_step=True, \*\*kwargs):** |
| |
| Wrapper for easy calling of gerrit_utils steps. |
| |
| — **def [abandon\_change](/recipes/recipe_modules/gerrit/api.py#159)(self, host, change, message=None, name=None, step_test_data=None):** |
| |
| — **def [create\_gerrit\_branch](/recipes/recipe_modules/gerrit/api.py#31)(self, host, project, branch, commit, \*\*kwargs):** |
| |
| Create a new branch from given project and commit |
| |
| Returns: |
| the ref of the branch created |
| |
| — **def [get\_change\_description](/recipes/recipe_modules/gerrit/api.py#72)(self, host, change, patchset):** |
| |
| Get the description for a given CL and patchset. |
| |
| Args: |
| host: URL of Gerrit host to query. |
| change: The change number. |
| patchset: The patchset number. |
| |
| Returns: |
| The description corresponding to given CL and patchset. |
| |
| — **def [get\_changes](/recipes/recipe_modules/gerrit/api.py#117)(self, host, query_params, start=None, limit=None, o_params=None, step_test_data=None, \*\*kwargs):** |
| |
| Query changes for the given host. |
| |
| Args: |
| host: URL of Gerrit host to query. |
| query_params: Query parameters as list of (key, value) tuples to form a |
| query as documented here: |
| https://gerrit-review.googlesource.com/Documentation/user-search.html#search-operators |
| start: How many changes to skip (starting with the most recent). |
| limit: Maximum number of results to return. |
| o_params: A list of additional output specifiers, as documented here: |
| https://gerrit-review.googlesource.com/Documentation/rest-api-changes.html#list-changes |
| step_test_data: Optional mock test data for the underlying gerrit client. |
| Returns: |
| A list of change dicts as documented here: |
| https://gerrit-review.googlesource.com/Documentation/rest-api-changes.html#list-changes |
| |
| — **def [get\_gerrit\_branch](/recipes/recipe_modules/gerrit/api.py#53)(self, host, project, branch, \*\*kwargs):** |
| |
| Get a branch from given project and commit |
| |
| Returns: |
| the revision of the branch |
| |
| — **def [get\_revision\_info](/recipes/recipe_modules/gerrit/api.py#87)(self, host, change, patchset):** |
| |
| Returns the info for a given patchset of a given change. |
| |
| Args: |
| host: Gerrit host to query. |
| change: The change number. |
| patchset: The patchset number. |
| |
| Returns: |
| A dict for the target revision as documented here: |
| https://gerrit-review.googlesource.com/Documentation/rest-api-changes.html#list-changes |
| ### *recipe_modules* / [git](/recipes/recipe_modules/git) |
| |
| [DEPS](/recipes/recipe_modules/git/__init__.py#1): [infra\_paths](#recipe_modules-infra_paths), [recipe\_engine/buildbucket][recipe_engine/recipe_modules/buildbucket], [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/python][recipe_engine/recipe_modules/python], [recipe\_engine/raw\_io][recipe_engine/recipe_modules/raw_io], [recipe\_engine/runtime][recipe_engine/recipe_modules/runtime], [recipe\_engine/step][recipe_engine/recipe_modules/step] |
| |
| #### **class [GitApi](/recipes/recipe_modules/git/api.py#10)([RecipeApi][recipe_engine/wkt/RecipeApi]):** |
| |
| — **def [\_\_call\_\_](/recipes/recipe_modules/git/api.py#13)(self, \*args, \*\*kwargs):** |
| |
| Return a git command step. |
| |
| — **def [bundle\_create](/recipes/recipe_modules/git/api.py#382)(self, bundle_path, rev_list_args=None, \*\*kwargs):** |
| |
| Run 'git bundle create' on a Git repository. |
| |
| Args: |
| bundle_path (Path): The path of the output bundle. |
| refs (list): The list of refs to include in the bundle. If None, all |
| refs in the Git checkout will be bundled. |
| kwargs: Forwarded to '__call__'. |
| |
| — **def [cat\_file\_at\_commit](/recipes/recipe_modules/git/api.py#45)(self, file_path, commit_hash, remote_name=None, \*\*kwargs):** |
| |
| Outputs the contents of a file at a given revision. |
| |
| — **def [checkout](/recipes/recipe_modules/git/api.py#117)(self, url, ref=None, dir_path=None, recursive=False, submodules=True, submodule_update_force=False, keep_paths=None, step_suffix=None, curl_trace_file=None, can_fail_build=True, set_got_revision=False, remote_name=None, display_fetch_size=None, file_name=None, submodule_update_recursive=True, use_git_cache=False, progress=True, tags=False):** |
| |
| Performs a full git checkout and returns sha1 of checked out revision. |
| |
| Args: |
| url (str): url of remote repo to use as upstream |
| ref (str): ref to fetch and check out |
| dir_path (Path): optional directory to clone into |
| recursive (bool): whether to recursively fetch submodules or not |
| submodules (bool): whether to sync and update submodules or not |
| submodule_update_force (bool): whether to update submodules with --force |
| keep_paths (iterable of strings): paths to ignore during git-clean; |
| paths are gitignore-style patterns relative to checkout_path. |
| step_suffix (str): suffix to add to a each step name |
| curl_trace_file (Path): if not None, dump GIT_CURL_VERBOSE=1 trace to that |
| file. Useful for debugging git issue reproducible only on bots. It has |
| a side effect of all stderr output of 'git fetch' going to that file. |
| can_fail_build (bool): if False, ignore errors during fetch or checkout. |
| set_got_revision (bool): if True, resolves HEAD and sets got_revision |
| property. |
| remote_name (str): name of the git remote to use |
| display_fetch_size (bool): if True, run `git count-objects` before and |
| after fetch and display delta. Adds two more steps. Defaults to False. |
| file_name (str): optional path to a single file to checkout. |
| submodule_update_recursive (bool): if True, updates submodules |
| recursively. |
| use_git_cache (bool): if True, git cache will be used for this checkout. |
| WARNING, this is EXPERIMENTAL!!! This wasn't tested with: |
| * submodules |
| * since origin url is modified |
| to a local path, may cause problem with scripts that do |
| "git fetch origin" or "git push origin". |
| * arbitrary refs such refs/whatever/not-fetched-by-default-to-cache |
| progress (bool): wether to show progress for fetch or not |
| tags (bool): Also fetch tags. |
| |
| Returns: If the checkout was successful, this returns the commit hash of |
| the checked-out-repo. Otherwise this returns None. |
| |
| — **def [config\_get](/recipes/recipe_modules/git/api.py#355)(self, prop_name, \*\*kwargs):** |
| |
| Returns: (str) The Git config output, or None if no output was generated. |
| |
| Args: |
| prop_name: (str) The name of the config property to query. |
| kwargs: Forwarded to '__call__'. |
| |
| — **def [count\_objects](/recipes/recipe_modules/git/api.py#53)(self, previous_result=None, can_fail_build=False, \*\*kwargs):** |
| |
| Returns `git count-objects` result as a dict. |
| |
| Args: |
| previous_result (dict): the result of previous count_objects call. |
| If passed, delta is reported in the log and step text. |
| can_fail_build (bool): if True, may fail the build and/or raise an |
| exception. Defaults to False. |
| |
| Returns: |
| A dict of count-object values, or None if count-object run failed. |
| |
| — **def [fetch\_tags](/recipes/recipe_modules/git/api.py#39)(self, remote_name=None, \*\*kwargs):** |
| |
| Fetches all tags from the remote. |
| |
| — **def [get\_remote\_url](/recipes/recipe_modules/git/api.py#372)(self, remote_name=None, \*\*kwargs):** |
| |
| Returns: (str) The URL of the remote Git repository, or None. |
| |
| Args: |
| remote_name: (str) The name of the remote to query, defaults to 'origin'. |
| kwargs: Forwarded to '__call__'. |
| |
| — **def [get\_timestamp](/recipes/recipe_modules/git/api.py#327)(self, commit='HEAD', test_data=None, \*\*kwargs):** |
| |
| Find and return the timestamp of the given commit. |
| |
| — **def [new\_branch](/recipes/recipe_modules/git/api.py#395)(self, branch, name=None, upstream=None, \*\*kwargs):** |
| |
| Runs git new-branch on a Git repository, to be used before git cl upload. |
| |
| Args: |
| branch (str): new branch name, which must not yet exist. |
| name (str): step name. |
| upstream (str): to origin/master. |
| kwargs: Forwarded to '__call__'. |
| |
| — **def [rebase](/recipes/recipe_modules/git/api.py#336)(self, name_prefix, branch, dir_path, remote_name=None, \*\*kwargs):** |
| |
| Run rebase HEAD onto branch |
| Args: |
| name_prefix (str): a prefix used for the step names |
| branch (str): a branch name or a hash to rebase onto |
| dir_path (Path): directory to clone into |
| remote_name (str): the remote name to rebase from if not origin |
| ### *recipe_modules* / [git\_cl](/recipes/recipe_modules/git_cl) |
| |
| [DEPS](/recipes/recipe_modules/git_cl/__init__.py#1): [recipe\_engine/context][recipe_engine/recipe_modules/context], [recipe\_engine/raw\_io][recipe_engine/recipe_modules/raw_io], [recipe\_engine/step][recipe_engine/recipe_modules/step] |
| |
| #### **class [GitClApi](/recipes/recipe_modules/git_cl/api.py#9)([RecipeApi][recipe_engine/wkt/RecipeApi]):** |
| |
| — **def [get\_description](/recipes/recipe_modules/git_cl/api.py#23)(self, patch_url=None, codereview=None, \*\*kwargs):** |
| |
| DEPRECATED. Consider using gerrit.get_change_description instead. |
| |
| — **def [issue](/recipes/recipe_modules/git_cl/api.py#54)(self, \*\*kwargs):** |
| |
| — **def [set\_description](/recipes/recipe_modules/git_cl/api.py#34)(self, description, patch_url=None, codereview=None, \*\*kwargs):** |
| |
| — **def [upload](/recipes/recipe_modules/git_cl/api.py#47)(self, message, upload_args=None, \*\*kwargs):** |
| ### *recipe_modules* / [gitiles](/recipes/recipe_modules/gitiles) |
| |
| [DEPS](/recipes/recipe_modules/gitiles/__init__.py#5): [recipe\_engine/json][recipe_engine/recipe_modules/json], [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], [recipe\_engine/url][recipe_engine/recipe_modules/url] |
| |
| #### **class [Gitiles](/recipes/recipe_modules/gitiles/api.py#11)([RecipeApi][recipe_engine/wkt/RecipeApi]):** |
| |
| Module for polling a git repository using the Gitiles web interface. |
| |
| — **def [canonicalize\_repo\_url](/recipes/recipe_modules/gitiles/api.py#216)(self, repo_url):** |
| |
| Returns a canonical form of repo_url. If not recognized, returns as is. |
| |
| |
| — **def [commit\_log](/recipes/recipe_modules/gitiles/api.py#114)(self, url, commit, step_name=None, attempts=None):** |
| |
| Returns: (dict) the Gitiles commit log structure for a given commit. |
| |
| Args: |
| url (str): The base repository URL. |
| commit (str): The commit hash. |
| step_name (str): If not None, override the step name. |
| attempts (int): Number of times to try the request before failing. |
| |
| — **def [download\_archive](/recipes/recipe_modules/gitiles/api.py#156)(self, repository_url, destination, revision='refs/heads/master'):** |
| |
| Downloads an archive of the repo and extracts it to `destination`. |
| |
| If the gitiles server attempts to provide a tarball with paths which escape |
| `destination`, this function will extract all valid files and then |
| raise StepFailure with an attribute `StepFailure.gitiles_skipped_files` |
| containing the names of the files that were skipped. |
| |
| Args: |
| repository_url (str): Full URL to the repository |
| destination (Path): Local path to extract the archive to. Must not exist |
| prior to this call. |
| revision (str): The ref or revision in the repo to download. Defaults to |
| 'refs/heads/master'. |
| |
| — **def [download\_file](/recipes/recipe_modules/gitiles/api.py#130)(self, repository_url, file_path, branch='master', step_name=None, attempts=None, \*\*kwargs):** |
| |
| Downloads raw file content from a Gitiles repository. |
| |
| Args: |
| repository_url (str): Full URL to the repository. |
| branch (str): Branch of the repository. |
| file_path (str): Relative path to the file from the repository root. |
| step_name (str): Custom name for this step (optional). |
| attempts (int): Number of times to try the request before failing. |
| |
| Returns: |
| Raw file content. |
| |
| — **def [log](/recipes/recipe_modules/gitiles/api.py#68)(self, url, ref, limit=0, cursor=None, step_name=None, attempts=None, \*\*kwargs):** |
| |
| Returns the most recent commits under the given ref with properties. |
| |
| Args: |
| url (str): URL of the remote repository. |
| ref (str): Name of the desired ref (see Gitiles.refs). |
| limit (int): Number of commits to limit the fetching to. |
| Gitiles does not return all commits in one call; instead paging is |
| used. 0 implies to return whatever first gerrit responds with. |
| Otherwise, paging will be used to fetch at least this many |
| commits, but all fetched commits will be returned. |
| cursor (str or None): The paging cursor used to fetch the next page. |
| step_name (str): Custom name for this step (optional). |
| |
| Returns: |
| A tuple of (commits, cursor). |
| Commits are a list of commits (as Gitiles dict structure) in reverse |
| chronological order. The number of commits may be higher than limit |
| argument. |
| Cursor can be used for subsequent calls to log for paging. If None, |
| signals that there are no more commits to fetch. |
| |
| — **def [parse\_repo\_url](/recipes/recipe_modules/gitiles/api.py#205)(self, repo_url):** |
| |
| Returns (host, project) pair. |
| |
| Returns (None, None) if repo_url is not recognized. |
| |
| — **def [refs](/recipes/recipe_modules/gitiles/api.py#56)(self, url, step_name='refs', attempts=None):** |
| |
| Returns a list of refs in the remote repository. |
| |
| — **def [unparse\_repo\_url](/recipes/recipe_modules/gitiles/api.py#212)(self, host, project):** |
| |
| Generates a Gitiles repo URL. See also parse_repo_url. |
| ### *recipe_modules* / [gsutil](/recipes/recipe_modules/gsutil) |
| |
| [DEPS](/recipes/recipe_modules/gsutil/__init__.py#1): [recipe\_engine/path][recipe_engine/recipe_modules/path], [recipe\_engine/python][recipe_engine/recipe_modules/python] |
| |
| #### **class [GSUtilApi](/recipes/recipe_modules/gsutil/api.py#9)([RecipeApi][recipe_engine/wkt/RecipeApi]):** |
| |
| — **def [\_\_call\_\_](/recipes/recipe_modules/gsutil/api.py#14)(self, cmd, name=None, use_retry_wrapper=True, version=None, parallel_upload=False, multithreaded=False, infra_step=True, \*\*kwargs):** |
| |
| A step to run arbitrary gsutil commands. |
| |
| On LUCI this should automatically use the ambient task account credentials. |
| On Buildbot, this assumes that gsutil authentication environment variables |
| (AWS_CREDENTIAL_FILE and BOTO_CONFIG) are already set, though if you want to |
| set them to something else you can always do so using the env={} kwarg. |
| |
| Note also that gsutil does its own wildcard processing, so wildcards are |
| valid in file-like portions of the cmd. See 'gsutil help wildcards'. |
| |
| Arguments: |
| |
| * cmd (List[str|Path]) - Arguments to pass to gsutil. Include gsutil-level |
| options first (see 'gsutil help options'). |
| * name (str) - Name of the step to use. Defaults to the first non-flag |
| token in the cmd. |
| |
| — **def [cat](/recipes/recipe_modules/gsutil/api.py#108)(self, url, args=None, \*\*kwargs):** |
| |
| — **def [copy](/recipes/recipe_modules/gsutil/api.py#115)(self, source_bucket, source, dest_bucket, dest, args=None, link_name='gsutil.copy', metadata=None, unauthenticated_url=False, \*\*kwargs):** |
| |
| — **def [download](/recipes/recipe_modules/gsutil/api.py#94)(self, bucket, source, dest, args=None, \*\*kwargs):** |
| |
| — **def [download\_url](/recipes/recipe_modules/gsutil/api.py#101)(self, url, dest, args=None, \*\*kwargs):** |
| |
|   **@property**<br>— **def [gsutil\_py\_path](/recipes/recipe_modules/gsutil/api.py#10)(self):** |
| |
| — **def [list](/recipes/recipe_modules/gsutil/api.py#132)(self, url, args=None, \*\*kwargs):** |
| |
| — **def [remove\_url](/recipes/recipe_modules/gsutil/api.py#146)(self, url, args=None, \*\*kwargs):** |
| |
| — **def [signurl](/recipes/recipe_modules/gsutil/api.py#139)(self, private_key_file, bucket, dest, args=None, \*\*kwargs):** |
| |
| — **def [upload](/recipes/recipe_modules/gsutil/api.py#78)(self, source, bucket, dest, args=None, link_name='gsutil.upload', metadata=None, unauthenticated_url=False, \*\*kwargs):** |
| ### *recipe_modules* / [infra\_paths](/recipes/recipe_modules/infra_paths) |
| |
| [DEPS](/recipes/recipe_modules/infra_paths/__init__.py#1): [recipe\_engine/path][recipe_engine/recipe_modules/path], [recipe\_engine/properties][recipe_engine/recipe_modules/properties] |
| |
| #### **class [InfraPathsApi](/recipes/recipe_modules/infra_paths/api.py#8)([RecipeApi][recipe_engine/wkt/RecipeApi]):** |
| |
| infra_paths module is glue for design mistakes. It will be removed. |
| |
|   **@property**<br>— **def [default\_git\_cache\_dir](/recipes/recipe_modules/infra_paths/api.py#17)(self):** |
| |
| Returns the location of the default git cache directory. |
| |
| This property should be used instead of using path['git_cache'] directly. |
| |
| It returns git_cache path if it is defined (Buildbot world), otherwise |
| uses the more generic [CACHE]/git path (LUCI world). |
| |
| — **def [initialize](/recipes/recipe_modules/infra_paths/api.py#11)(self):** |
| ### *recipe_modules* / [osx\_sdk](/recipes/recipe_modules/osx_sdk) |
| |
| [DEPS](/recipes/recipe_modules/osx_sdk/__init__.py#5): [recipe\_engine/cipd][recipe_engine/recipe_modules/cipd], [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/platform][recipe_engine/recipe_modules/platform], [recipe\_engine/step][recipe_engine/recipe_modules/step] |
| |
| The `osx_sdk` module provides safe functions to access a semi-hermetic |
| XCode installation. |
| |
| Available only to Google-run bots. |
| |
| #### **class [OSXSDKApi](/recipes/recipe_modules/osx_sdk/api.py#24)([RecipeApi][recipe_engine/wkt/RecipeApi]):** |
| |
| API for using OS X SDK distributed via CIPD. |
| |
|   **@contextmanager**<br>— **def [\_\_call\_\_](/recipes/recipe_modules/osx_sdk/api.py#37)(self, kind):** |
| |
| Sets up the XCode SDK environment. |
| |
| Is a no-op on non-mac platforms. |
| |
| This will deploy the helper tool and the XCode.app bundle at |
| `[START_DIR]/cache/osx_sdk`. |
| |
| To avoid machines rebuilding these on every run, set up a named cache in |
| your cr-buildbucket.cfg file like: |
| |
| caches: { |
| # Cache for mac_toolchain tool and XCode.app |
| name: "osx_sdk" |
| path: "osx_sdk" |
| } |
| |
| If you have builders which e.g. use a non-current SDK, you can give them |
| a uniqely named cache: |
| |
| caches: { |
| # Cache for N-1 version mac_toolchain tool and XCode.app |
| name: "osx_sdk_old" |
| path: "osx_sdk" |
| } |
| |
| Similarly, if you have mac and iOS builders you may want to distinguish the |
| cache name by adding '_ios' to it. However, if you're sharing the same bots |
| for both mac and iOS, consider having a single cache and just always |
| fetching the iOS version. This will lead to lower overall disk utilization |
| and should help to reduce cache thrashing. |
| |
| Usage: |
| with api.osx_sdk('mac'): |
| # sdk with mac build bits |
| |
| with api.osx_sdk('ios'): |
| # sdk with mac+iOS build bits |
| |
| Args: |
| kind ('mac'|'ios'): How the SDK should be configured. iOS includes the |
| base XCode distribution, as well as the iOS simulators (which can be |
| quite large). |
| |
| Raises: |
| StepFailure or InfraFailure. |
| ### *recipe_modules* / [presubmit](/recipes/recipe_modules/presubmit) |
| |
| [DEPS](/recipes/recipe_modules/presubmit/__init__.py#11): [bot\_update](#recipe_modules-bot_update), [depot\_tools](#recipe_modules-depot_tools), [gclient](#recipe_modules-gclient), [git](#recipe_modules-git), [tryserver](#recipe_modules-tryserver), [recipe\_engine/context][recipe_engine/recipe_modules/context], [recipe\_engine/cq][recipe_engine/recipe_modules/cq], [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] |
| |
| #### **class [PresubmitApi](/recipes/recipe_modules/presubmit/api.py#11)([RecipeApi][recipe_engine/wkt/RecipeApi]):** |
| |
| — **def [\_\_call\_\_](/recipes/recipe_modules/presubmit/api.py#27)(self, \*args, \*\*kwargs):** |
| |
| Return a presubmit step. |
| |
| — **def [execute](/recipes/recipe_modules/presubmit/api.py#74)(self, bot_update_step):** |
| |
| Runs presubmit and sets summary markdown if applicable. |
| |
| Args: |
| bot_update_step: the StepResult from a previously executed bot_update step. |
| Returns: |
| a RawResult object, suitable for being returned from RunSteps. |
| |
| — **def [prepare](/recipes/recipe_modules/presubmit/api.py#39)(self):** |
| |
| Set up a presubmit run. |
| |
| This includes: |
| |
| - setting up the checkout w/ bot_update |
| - locally committing the applied patch |
| - running hooks, if requested |
| |
| This expects the gclient configuration to already have been set. |
| |
| Returns: |
| the StepResult from the bot_update step. |
| |
|   **@property**<br>— **def [presubmit\_support\_path](/recipes/recipe_modules/presubmit/api.py#23)(self):** |
| ### *recipe_modules* / [tryserver](/recipes/recipe_modules/tryserver) |
| |
| [DEPS](/recipes/recipe_modules/tryserver/__init__.py#5): [gerrit](#recipe_modules-gerrit), [git](#recipe_modules-git), [git\_cl](#recipe_modules-git_cl), [recipe\_engine/buildbucket][recipe_engine/recipe_modules/buildbucket], [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/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] |
| |
| #### **class [TryserverApi](/recipes/recipe_modules/tryserver/api.py#11)([RecipeApi][recipe_engine/wkt/RecipeApi]):** |
| |
| — **def [add\_failure\_reason](/recipes/recipe_modules/tryserver/api.py#237)(self, reason):** |
| |
| Records a more detailed reason why build is failing. |
| |
| The reason can be any JSON-serializable object. |
| |
|   **@property**<br>— **def [gerrit\_change](/recipes/recipe_modules/tryserver/api.py#34)(self):** |
| |
| Returns current gerrit change, if there is exactly one. |
| |
| Returns a self.m.buildbucket.common_pb2.GerritChange or None. |
| |
|   **@property**<br>— **def [gerrit\_change\_fetch\_ref](/recipes/recipe_modules/tryserver/api.py#98)(self):** |
| |
| Returns gerrit patch ref, e.g. "refs/heads/45/12345/6, or None. |
| |
| Populated iff gerrit_change is populated. |
| |
|   **@property**<br>— **def [gerrit\_change\_repo\_url](/recipes/recipe_modules/tryserver/api.py#42)(self):** |
| |
| Returns canonical URL of the gitiles repo of the current Gerrit CL. |
| |
| Populated iff gerrit_change is populated. |
| |
|   **@property**<br>— **def [gerrit\_change\_target\_ref](/recipes/recipe_modules/tryserver/api.py#107)(self):** |
| |
| Returns gerrit change destination ref, e.g. "refs/heads/master". |
| |
| Populated iff gerrit_change is populated. |
| |
| — **def [get\_files\_affected\_by\_patch](/recipes/recipe_modules/tryserver/api.py#137)(self, patch_root, \*\*kwargs):** |
| |
| Returns list of paths to files affected by the patch. |
| |
| Argument: |
| patch_root: path relative to api.path['root'], usually obtained from |
| api.gclient.get_gerrit_patch_root(). |
| |
| Returned paths will be relative to to patch_root. |
| |
| — **def [get\_footer](/recipes/recipe_modules/tryserver/api.py#295)(self, tag, patch_text=None):** |
| |
| Gets a specific tag from a CL description |
| |
| — **def [get\_footers](/recipes/recipe_modules/tryserver/api.py#275)(self, patch_text=None):** |
| |
| Retrieves footers from the patch description. |
| |
| footers are machine readable tags embedded in commit messages. See |
| git-footers documentation for more information. |
| |
| — **def [initialize](/recipes/recipe_modules/tryserver/api.py#23)(self):** |
| |
|   **@property**<br>— **def [is\_gerrit\_issue](/recipes/recipe_modules/tryserver/api.py#121)(self):** |
| |
| Returns true iff the properties exist to match a Gerrit issue. |
| |
|   **@property**<br>— **def [is\_patch\_in\_git](/recipes/recipe_modules/tryserver/api.py#131)(self):** |
| |
|   **@property**<br>— **def [is\_tryserver](/recipes/recipe_modules/tryserver/api.py#116)(self):** |
| |
| Returns true iff we have a change to check out. |
| |
| — **def [normalize\_footer\_name](/recipes/recipe_modules/tryserver/api.py#299)(self, footer):** |
| |
| — **def [set\_compile\_failure\_tryjob\_result](/recipes/recipe_modules/tryserver/api.py#200)(self):** |
| |
| Mark the tryjob result as a compile failure. |
| |
| — **def [set\_do\_not\_retry\_build](/recipes/recipe_modules/tryserver/api.py#186)(self):** |
| |
| A flag to indicate the build should not be retried by the CQ. |
| |
| This mechanism is used to reduce CQ duration when retrying will likely |
| return an identical result. |
| |
|   **@contextlib.contextmanager**<br>— **def [set\_failure\_hash](/recipes/recipe_modules/tryserver/api.py#246)(self):** |
| |
| Context manager that sets a failure_hash build property on StepFailure. |
| |
| This can be used to easily compare whether two builds have failed |
| for the same reason. For example, if a patch is bad (breaks something), |
| we'd expect it to always break in the same way. Different failures |
| for the same patch are usually a sign of flakiness. |
| |
| — **def [set\_invalid\_test\_results\_tryjob\_result](/recipes/recipe_modules/tryserver/api.py#212)(self):** |
| |
| Mark the tryjob result as having invalid test results. |
| |
| This means we run some tests, but the results were not valid |
| (e.g. no list of specific test cases that failed, or too many |
| tests failing, etc). |
| |
| — **def [set\_patch\_failure\_tryjob\_result](/recipes/recipe_modules/tryserver/api.py#196)(self):** |
| |
| Mark the tryjob result as failure to apply the patch. |
| |
| — **def [set\_subproject\_tag](/recipes/recipe_modules/tryserver/api.py#164)(self, subproject_tag):** |
| |
| Adds a subproject tag to the build. |
| |
| This can be used to distinguish between builds that execute different steps |
| depending on what was patched, e.g. blink vs. pure chromium patches. |
| |
| — **def [set\_test\_expired\_tryjob\_result](/recipes/recipe_modules/tryserver/api.py#229)(self):** |
| |
| Mark the tryjob result as a test expiration. |
| |
| This means a test task expired and was never scheduled, most likely due to |
| lack of capacity. |
| |
| — **def [set\_test\_failure\_tryjob\_result](/recipes/recipe_modules/tryserver/api.py#204)(self):** |
| |
| Mark the tryjob result as a test failure. |
| |
| This means we started running actual tests (not prerequisite steps |
| like checkout or compile), and some of these tests have failed. |
| |
| — **def [set\_test\_timeout\_tryjob\_result](/recipes/recipe_modules/tryserver/api.py#221)(self):** |
| |
| Mark the tryjob result as a test timeout. |
| |
| This means tests were scheduled but didn't finish executing within the |
| timeout. |
| ### *recipe_modules* / [windows\_sdk](/recipes/recipe_modules/windows_sdk) |
| |
| [DEPS](/recipes/recipe_modules/windows_sdk/__init__.py#5): [recipe\_engine/cipd][recipe_engine/recipe_modules/cipd], [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/step][recipe_engine/recipe_modules/step] |
| |
| The `windows_sdk` module provides safe functions to access a hermetic |
| Microsoft Visual Studio installation. |
| |
| Available only to Google-run bots. |
| |
| #### **class [WindowsSDKApi](/recipes/recipe_modules/windows_sdk/api.py#16)([RecipeApi][recipe_engine/wkt/RecipeApi]):** |
| |
| API for using Windows SDK distributed via CIPD. |
| |
|   **@contextmanager**<br>— **def [\_\_call\_\_](/recipes/recipe_modules/windows_sdk/api.py#26)(self, path=None, version=None, enabled=True, target_arch='x64'):** |
| |
| Setups the SDK environment when enabled. |
| |
| Args: |
| path (path): Path to a directory where to install the SDK |
| (default is '[CACHE]/windows_sdk') |
| version (str): CIPD version of the SDK |
| (default is set via $infra/windows_sdk.version property) |
| enabled (bool): Whether the SDK should be used or not. |
| target_arch (str): 'x86' or 'x64'. |
| |
| Yields: |
| If enabled, yields SDKPaths object with paths to well-known roots within |
| the deployed bundle: |
| * win_sdk - a Path to the root of the extracted Windows SDK. |
| * dia_sdk - a Path to the root of the extracted Debug Interface Access |
| SDK. |
| |
| Raises: |
| StepFailure or InfraFailure. |
| ## Recipes |
| |
| ### *recipes* / [bot\_update:examples/full](/recipes/recipe_modules/bot_update/examples/full.py) |
| |
| [DEPS](/recipes/recipe_modules/bot_update/examples/full.py#5): [bot\_update](#recipe_modules-bot_update), [gclient](#recipe_modules-gclient), [gerrit](#recipe_modules-gerrit), [tryserver](#recipe_modules-tryserver), [recipe\_engine/buildbucket][recipe_engine/recipe_modules/buildbucket], [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/runtime][recipe_engine/recipe_modules/runtime] |
| |
| — **def [RunSteps](/recipes/recipe_modules/bot_update/examples/full.py#22)(api):** |
| ### *recipes* / [bot\_update:tests/ensure\_checkout](/recipes/recipe_modules/bot_update/tests/ensure_checkout.py) |
| |
| [DEPS](/recipes/recipe_modules/bot_update/tests/ensure_checkout.py#7): [bot\_update](#recipe_modules-bot_update), [gclient](#recipe_modules-gclient), [recipe\_engine/json][recipe_engine/recipe_modules/json] |
| |
| — **def [RunSteps](/recipes/recipe_modules/bot_update/tests/ensure_checkout.py#14)(api):** |
| ### *recipes* / [cipd:examples/full](/recipes/recipe_modules/cipd/examples/full.py) |
| |
| [DEPS](/recipes/recipe_modules/cipd/examples/full.py#8): [cipd](#recipe_modules-cipd), [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] |
| |
| — **def [RunSteps](/recipes/recipe_modules/cipd/examples/full.py#27)(api, use_pkg, pkg_files, pkg_dirs, ver_files, install_mode):** |
| ### *recipes* / [cipd:examples/platform\_suffix](/recipes/recipe_modules/cipd/examples/platform_suffix.py) |
| |
| [DEPS](/recipes/recipe_modules/cipd/examples/platform_suffix.py#8): [cipd](#recipe_modules-cipd), [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] |
| |
| — **def [RunSteps](/recipes/recipe_modules/cipd/examples/platform_suffix.py#22)(api, arch_override, bits_override, expect_error):** |
| ### *recipes* / [depot\_tools:examples/full](/recipes/recipe_modules/depot_tools/examples/full.py) |
| |
| [DEPS](/recipes/recipe_modules/depot_tools/examples/full.py#5): [depot\_tools](#recipe_modules-depot_tools), [recipe\_engine/path][recipe_engine/recipe_modules/path], [recipe\_engine/platform][recipe_engine/recipe_modules/platform], [recipe\_engine/runtime][recipe_engine/recipe_modules/runtime], [recipe\_engine/step][recipe_engine/recipe_modules/step] |
| |
| — **def [RunSteps](/recipes/recipe_modules/depot_tools/examples/full.py#14)(api):** |
| ### *recipes* / [fetch\_end\_to\_end\_test](/recipes/recipes/fetch_end_to_end_test.py) |
| |
| [DEPS](/recipes/recipes/fetch_end_to_end_test.py#5): [bot\_update](#recipe_modules-bot_update), [gclient](#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] |
| |
| — **def [RunSteps](/recipes/recipes/fetch_end_to_end_test.py#16)(api):** |
| ### *recipes* / [gclient:examples/full](/recipes/recipe_modules/gclient/examples/full.py) |
| |
| [DEPS](/recipes/recipe_modules/gclient/examples/full.py#5): [gclient](#recipe_modules-gclient), [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] |
| |
| — **def [RunSteps](/recipes/recipe_modules/gclient/examples/full.py#52)(api):** |
| ### *recipes* / [gclient:tests/patch\_project](/recipes/recipe_modules/gclient/tests/patch_project.py) |
| |
| [DEPS](/recipes/recipe_modules/gclient/tests/patch_project.py#9): [gclient](#recipe_modules-gclient), [recipe\_engine/buildbucket][recipe_engine/recipe_modules/buildbucket], [recipe\_engine/properties][recipe_engine/recipe_modules/properties] |
| |
| — **def [RunSteps](/recipes/recipe_modules/gclient/tests/patch_project.py#22)(api, patch_project, patch_repository_url):** |
| ### *recipes* / [gerrit:examples/full](/recipes/recipe_modules/gerrit/examples/full.py) |
| |
| [DEPS](/recipes/recipe_modules/gerrit/examples/full.py#5): [gerrit](#recipe_modules-gerrit), [recipe\_engine/step][recipe_engine/recipe_modules/step] |
| |
| — **def [RunSteps](/recipes/recipe_modules/gerrit/examples/full.py#11)(api):** |
| ### *recipes* / [git:examples/full](/recipes/recipe_modules/git/examples/full.py) |
| |
| [DEPS](/recipes/recipe_modules/git/examples/full.py#5): [git](#recipe_modules-git), [recipe\_engine/buildbucket][recipe_engine/recipe_modules/buildbucket], [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/raw\_io][recipe_engine/recipe_modules/raw_io], [recipe\_engine/runtime][recipe_engine/recipe_modules/runtime], [recipe\_engine/step][recipe_engine/recipe_modules/step] |
| |
| — **def [RunSteps](/recipes/recipe_modules/git/examples/full.py#19)(api):** |
| ### *recipes* / [git\_cl:examples/full](/recipes/recipe_modules/git_cl/examples/full.py) |
| |
| [DEPS](/recipes/recipe_modules/git_cl/examples/full.py#9): [git\_cl](#recipe_modules-git_cl), [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] |
| |
| — **def [RunSteps](/recipes/recipe_modules/git_cl/examples/full.py#17)(api):** |
| ### *recipes* / [gitiles:examples/full](/recipes/recipe_modules/gitiles/examples/full.py) |
| |
| [DEPS](/recipes/recipe_modules/gitiles/examples/full.py#5): [gitiles](#recipe_modules-gitiles), [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] |
| |
| — **def [RunSteps](/recipes/recipe_modules/gitiles/examples/full.py#14)(api):** |
| ### *recipes* / [gitiles:tests/parse\_repo\_url](/recipes/recipe_modules/gitiles/tests/parse_repo_url.py) |
| |
| [DEPS](/recipes/recipe_modules/gitiles/tests/parse_repo_url.py#5): [gitiles](#recipe_modules-gitiles), [recipe\_engine/properties][recipe_engine/recipe_modules/properties], [recipe\_engine/step][recipe_engine/recipe_modules/step] |
| |
| — **def [RunSteps](/recipes/recipe_modules/gitiles/tests/parse_repo_url.py#12)(api):** |
| ### *recipes* / [gsutil:examples/full](/recipes/recipe_modules/gsutil/examples/full.py) |
| |
| [DEPS](/recipes/recipe_modules/gsutil/examples/full.py#5): [gsutil](#recipe_modules-gsutil), [recipe\_engine/path][recipe_engine/recipe_modules/path] |
| |
| — **def [RunSteps](/recipes/recipe_modules/gsutil/examples/full.py#11)(api):** |
| |
| Move things around in a loop! |
| ### *recipes* / [infra\_paths:examples/full](/recipes/recipe_modules/infra_paths/examples/full.py) |
| |
| [DEPS](/recipes/recipe_modules/infra_paths/examples/full.py#7): [infra\_paths](#recipe_modules-infra_paths), [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] |
| |
| — **def [RunSteps](/recipes/recipe_modules/infra_paths/examples/full.py#16)(api):** |
| ### *recipes* / [osx\_sdk:examples/full](/recipes/recipe_modules/osx_sdk/examples/full.py) |
| |
| [DEPS](/recipes/recipe_modules/osx_sdk/examples/full.py#5): [osx\_sdk](#recipe_modules-osx_sdk), [recipe\_engine/platform][recipe_engine/recipe_modules/platform], [recipe\_engine/properties][recipe_engine/recipe_modules/properties], [recipe\_engine/step][recipe_engine/recipe_modules/step] |
| |
| — **def [RunSteps](/recipes/recipe_modules/osx_sdk/examples/full.py#13)(api):** |
| ### *recipes* / [presubmit:examples/full](/recipes/recipe_modules/presubmit/examples/full.py) |
| |
| [DEPS](/recipes/recipe_modules/presubmit/examples/full.py#5): [presubmit](#recipe_modules-presubmit), [recipe\_engine/json][recipe_engine/recipe_modules/json] |
| |
| — **def [RunSteps](/recipes/recipe_modules/presubmit/examples/full.py#11)(api):** |
| ### *recipes* / [presubmit:tests/execute](/recipes/recipe_modules/presubmit/tests/execute.py) |
| |
| [DEPS](/recipes/recipe_modules/presubmit/tests/execute.py#10): [gclient](#recipe_modules-gclient), [presubmit](#recipe_modules-presubmit), [recipe\_engine/buildbucket][recipe_engine/recipe_modules/buildbucket], [recipe\_engine/context][recipe_engine/recipe_modules/context], [recipe\_engine/cq][recipe_engine/recipe_modules/cq], [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/runtime][recipe_engine/recipe_modules/runtime] |
| |
| — **def [RunSteps](/recipes/recipe_modules/presubmit/tests/execute.py#29)(api, patch_project, patch_repository_url):** |
| ### *recipes* / [presubmit:tests/prepare](/recipes/recipe_modules/presubmit/tests/prepare.py) |
| |
| [DEPS](/recipes/recipe_modules/presubmit/tests/prepare.py#9): [gclient](#recipe_modules-gclient), [presubmit](#recipe_modules-presubmit), [recipe\_engine/buildbucket][recipe_engine/recipe_modules/buildbucket], [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/runtime][recipe_engine/recipe_modules/runtime] |
| |
| — **def [RunSteps](/recipes/recipe_modules/presubmit/tests/prepare.py#26)(api, patch_project, patch_repository_url):** |
| ### *recipes* / [tryserver:examples/full](/recipes/recipe_modules/tryserver/examples/full.py) |
| |
| [DEPS](/recipes/recipe_modules/tryserver/examples/full.py#5): [gerrit](#recipe_modules-gerrit), [tryserver](#recipe_modules-tryserver), [recipe\_engine/buildbucket][recipe_engine/recipe_modules/buildbucket], [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/raw\_io][recipe_engine/recipe_modules/raw_io], [recipe\_engine/step][recipe_engine/recipe_modules/step] |
| |
| — **def [RunSteps](/recipes/recipe_modules/tryserver/examples/full.py#19)(api):** |
| ### *recipes* / [tryserver:tests/gerrit\_change\_fetch\_ref](/recipes/recipe_modules/tryserver/tests/gerrit_change_fetch_ref.py) |
| |
| [DEPS](/recipes/recipe_modules/tryserver/tests/gerrit_change_fetch_ref.py#7): [gerrit](#recipe_modules-gerrit), [tryserver](#recipe_modules-tryserver), [recipe\_engine/buildbucket][recipe_engine/recipe_modules/buildbucket], [recipe\_engine/properties][recipe_engine/recipe_modules/properties] |
| |
| — **def [RunSteps](/recipes/recipe_modules/tryserver/tests/gerrit_change_fetch_ref.py#15)(api):** |
| ### *recipes* / [windows\_sdk:examples/full](/recipes/recipe_modules/windows_sdk/examples/full.py) |
| |
| [DEPS](/recipes/recipe_modules/windows_sdk/examples/full.py#5): [windows\_sdk](#recipe_modules-windows_sdk), [recipe\_engine/platform][recipe_engine/recipe_modules/platform], [recipe\_engine/properties][recipe_engine/recipe_modules/properties], [recipe\_engine/step][recipe_engine/recipe_modules/step] |
| |
| — **def [RunSteps](/recipes/recipe_modules/windows_sdk/examples/full.py#13)(api):** |
| |
| [recipe_engine/recipe_modules/buildbucket]: https://chromium.googlesource.com/infra/luci/recipes-py.git/+/11077013dc5ac1cf8fa7971965046b0e67c0dd5f/README.recipes.md#recipe_modules-buildbucket |
| [recipe_engine/recipe_modules/cipd]: https://chromium.googlesource.com/infra/luci/recipes-py.git/+/11077013dc5ac1cf8fa7971965046b0e67c0dd5f/README.recipes.md#recipe_modules-cipd |
| [recipe_engine/recipe_modules/commit_position]: https://chromium.googlesource.com/infra/luci/recipes-py.git/+/11077013dc5ac1cf8fa7971965046b0e67c0dd5f/README.recipes.md#recipe_modules-commit_position |
| [recipe_engine/recipe_modules/context]: https://chromium.googlesource.com/infra/luci/recipes-py.git/+/11077013dc5ac1cf8fa7971965046b0e67c0dd5f/README.recipes.md#recipe_modules-context |
| [recipe_engine/recipe_modules/cq]: https://chromium.googlesource.com/infra/luci/recipes-py.git/+/11077013dc5ac1cf8fa7971965046b0e67c0dd5f/README.recipes.md#recipe_modules-cq |
| [recipe_engine/recipe_modules/file]: https://chromium.googlesource.com/infra/luci/recipes-py.git/+/11077013dc5ac1cf8fa7971965046b0e67c0dd5f/README.recipes.md#recipe_modules-file |
| [recipe_engine/recipe_modules/json]: https://chromium.googlesource.com/infra/luci/recipes-py.git/+/11077013dc5ac1cf8fa7971965046b0e67c0dd5f/README.recipes.md#recipe_modules-json |
| [recipe_engine/recipe_modules/path]: https://chromium.googlesource.com/infra/luci/recipes-py.git/+/11077013dc5ac1cf8fa7971965046b0e67c0dd5f/README.recipes.md#recipe_modules-path |
| [recipe_engine/recipe_modules/platform]: https://chromium.googlesource.com/infra/luci/recipes-py.git/+/11077013dc5ac1cf8fa7971965046b0e67c0dd5f/README.recipes.md#recipe_modules-platform |
| [recipe_engine/recipe_modules/properties]: https://chromium.googlesource.com/infra/luci/recipes-py.git/+/11077013dc5ac1cf8fa7971965046b0e67c0dd5f/README.recipes.md#recipe_modules-properties |
| [recipe_engine/recipe_modules/python]: https://chromium.googlesource.com/infra/luci/recipes-py.git/+/11077013dc5ac1cf8fa7971965046b0e67c0dd5f/README.recipes.md#recipe_modules-python |
| [recipe_engine/recipe_modules/raw_io]: https://chromium.googlesource.com/infra/luci/recipes-py.git/+/11077013dc5ac1cf8fa7971965046b0e67c0dd5f/README.recipes.md#recipe_modules-raw_io |
| [recipe_engine/recipe_modules/runtime]: https://chromium.googlesource.com/infra/luci/recipes-py.git/+/11077013dc5ac1cf8fa7971965046b0e67c0dd5f/README.recipes.md#recipe_modules-runtime |
| [recipe_engine/recipe_modules/source_manifest]: https://chromium.googlesource.com/infra/luci/recipes-py.git/+/11077013dc5ac1cf8fa7971965046b0e67c0dd5f/README.recipes.md#recipe_modules-source_manifest |
| [recipe_engine/recipe_modules/step]: https://chromium.googlesource.com/infra/luci/recipes-py.git/+/11077013dc5ac1cf8fa7971965046b0e67c0dd5f/README.recipes.md#recipe_modules-step |
| [recipe_engine/recipe_modules/url]: https://chromium.googlesource.com/infra/luci/recipes-py.git/+/11077013dc5ac1cf8fa7971965046b0e67c0dd5f/README.recipes.md#recipe_modules-url |
| [recipe_engine/wkt/RecipeApi]: https://chromium.googlesource.com/infra/luci/recipes-py.git/+/11077013dc5ac1cf8fa7971965046b0e67c0dd5f/recipe_engine/recipe_api.py#850 |