| <!--- AUTOGENERATED BY `./recipes.py test train` --> |
| # Repo documentation for [infra](https://chromium.googlesource.com/infra/infra.git) |
| ## Table of Contents |
| |
| **[Recipe Modules](#Recipe-Modules)** |
| * [buildenv](#recipe_modules-buildenv) — A helper for bootstrapping Go and Node environments. |
| * [cloudbuildhelper](#recipe_modules-cloudbuildhelper) — API for calling 'cloudbuildhelper' tool. |
| * [cloudkms](#recipe_modules-cloudkms) |
| * [codesearch](#recipe_modules-codesearch) |
| * [docker](#recipe_modules-docker) |
| * [infra_checkout](#recipe_modules-infra_checkout) |
| * [infra_cipd](#recipe_modules-infra_cipd) |
| * [omahaproxy](#recipe_modules-omahaproxy) |
| * [powershell](#recipe_modules-powershell) |
| * [qemu](#recipe_modules-qemu) |
| * [recipe_autoroller](#recipe_modules-recipe_autoroller) |
| * [support_3pp](#recipe_modules-support_3pp) — Allows uniform cross-compiliation, version tracking and archival for third-party software packages (libs+tools) for distribution via CIPD. |
| * [windows_adk](#recipe_modules-windows_adk) |
| * [windows_scripts_executor](#recipe_modules-windows_scripts_executor) |
| * [windows_sdk](#recipe_modules-windows_sdk) |
| * [zip](#recipe_modules-zip) |
| |
| **[Recipes](#Recipes)** |
| * [3pp](#recipes-3pp) — This recipe builds and packages third party software, such as Git. |
| * [build_from_tarball](#recipes-build_from_tarball) |
| * [build_wheels](#recipes-build_wheels) |
| * [buildenv:examples/simple](#recipes-buildenv_examples_simple) |
| * [chromium_bootstrap/test](#recipes-chromium_bootstrap_test) — This recipe verifies importing of chromium bootstrap protos. |
| * [cloudbuildhelper:examples/discover](#recipes-cloudbuildhelper_examples_discover) |
| * [cloudbuildhelper:examples/full](#recipes-cloudbuildhelper_examples_full) |
| * [cloudbuildhelper:examples/roll](#recipes-cloudbuildhelper_examples_roll) |
| * [cloudbuildhelper:examples/version_label](#recipes-cloudbuildhelper_examples_version_label) |
| * [cloudkms:examples/usage](#recipes-cloudkms_examples_usage) |
| * [codesearch:examples/full](#recipes-codesearch_examples_full) |
| * [codesearch:tests/checkout_generated_files_repo_and_sync](#recipes-codesearch_tests_checkout_generated_files_repo_and_sync) |
| * [codesearch:tests/clone_and_run_clang_tool](#recipes-codesearch_tests_clone_and_run_clang_tool) |
| * [codesearch:tests/configs](#recipes-codesearch_tests_configs) |
| * [codesearch:tests/create_and_upload_kythe_index_pack](#recipes-codesearch_tests_create_and_upload_kythe_index_pack) |
| * [cv_testing/tryjob](#recipes-cv_testing_tryjob) — Recipe to test LUCI CQ/CV itself. |
| * [depot_tools_builder](#recipes-depot_tools_builder) — Recipe to build windows depot_tools bootstrap zipfile. |
| * [docker:examples/full](#recipes-docker_examples_full) |
| * [docker_image_builder](#recipes-docker_image_builder) |
| * [fleet_systems/dhcp](#recipes-fleet_systems_dhcp) — Test chrome-golo repo DHCP configs using dhcpd binaries via docker. |
| * [gae_tarball_uploader](#recipes-gae_tarball_uploader) |
| * [gerrit_hello_world](#recipes-gerrit_hello_world) — Pushes a trivial CL to Gerrit to verify git authentication works on LUCI. |
| * [gerrit_plugins](#recipes-gerrit_plugins) |
| * [git_cache_updater](#recipes-git_cache_updater) — Updates the Git Cache zip files. |
| * [gsutil_hello_world](#recipes-gsutil_hello_world) — Pushes a trivial CL to Gerrit to verify git authentication works on LUCI. |
| * [images_builder](#recipes-images_builder) |
| * [images_pins_roller](#recipes-images_pins_roller) |
| * [infra_checkout:examples/ci](#recipes-infra_checkout_examples_ci) |
| * [infra_checkout:examples/try](#recipes-infra_checkout_examples_try) |
| * [infra_cipd:examples/usage](#recipes-infra_cipd_examples_usage) |
| * [infra_continuous](#recipes-infra_continuous) |
| * [infra_frontend_tester](#recipes-infra_frontend_tester) |
| * [infra_repo_trybot](#recipes-infra_repo_trybot) |
| * [luci_go](#recipes-luci_go) |
| * [luci_py](#recipes-luci_py) |
| * [powershell:examples/test](#recipes-powershell_examples_test) |
| * [qemu:examples/basic](#recipes-qemu_examples_basic) |
| * [qemu:examples/create_disk](#recipes-qemu_examples_create_disk) |
| * [qemu:examples/mount_disk_image](#recipes-qemu_examples_mount_disk_image) |
| * [qemu:examples/powerdown_vm](#recipes-qemu_examples_powerdown_vm) |
| * [qemu:examples/quit_vm](#recipes-qemu_examples_quit_vm) |
| * [qemu:examples/start_vm](#recipes-qemu_examples_start_vm) |
| * [qemu:examples/status_vm](#recipes-qemu_examples_status_vm) |
| * [recipe_autoroller](#recipes-recipe_autoroller) — Rolls recipes. |
| * [recipe_autoroller:examples/full](#recipes-recipe_autoroller_examples_full) |
| * [recipe_bundler](#recipes-recipe_bundler) |
| * [recipe_roll_tryjob](#recipes-recipe_roll_tryjob) |
| * [recipe_simulation](#recipes-recipe_simulation) — A continuous builder which runs recipe tests. |
| * [recipes_py_continuous](#recipes-recipes_py_continuous) |
| * [support_3pp:tests/full](#recipes-support_3pp_tests_full) |
| * [tricium_infra](#recipes-tricium_infra) |
| * [update_submodules_mirror](#recipes-update_submodules_mirror) |
| * [windows_adk:examples/ensure](#recipes-windows_adk_examples_ensure) |
| * [windows_image_builder/offline](#recipes-windows_image_builder_offline) |
| * [windows_image_builder/online_windows_customization](#recipes-windows_image_builder_online_windows_customization) |
| * [windows_image_builder/winpe_customization](#recipes-windows_image_builder_winpe_customization) |
| * [windows_scripts_executor:examples/add_windows_driver](#recipes-windows_scripts_executor_examples_add_windows_driver) |
| * [windows_scripts_executor:examples/add_windows_package](#recipes-windows_scripts_executor_examples_add_windows_package) |
| * [windows_scripts_executor:examples/cipd_test](#recipes-windows_scripts_executor_examples_cipd_test) |
| * [windows_scripts_executor:examples/customization_mode](#recipes-windows_scripts_executor_examples_customization_mode) |
| * [windows_scripts_executor:examples/edit_offline_registry_test](#recipes-windows_scripts_executor_examples_edit_offline_registry_test) |
| * [windows_scripts_executor:examples/execute_online_customization](#recipes-windows_scripts_executor_examples_execute_online_customization) |
| * [windows_scripts_executor:examples/gcs_test](#recipes-windows_scripts_executor_examples_gcs_test) |
| * [windows_scripts_executor:examples/get_executable_configs](#recipes-windows_scripts_executor_examples_get_executable_configs) |
| * [windows_scripts_executor:examples/git_test](#recipes-windows_scripts_executor_examples_git_test) |
| * [windows_scripts_executor:examples/online_windows_customization](#recipes-windows_scripts_executor_examples_online_windows_customization) |
| * [windows_scripts_executor:examples/powershell_expression](#recipes-windows_scripts_executor_examples_powershell_expression) |
| * [windows_scripts_executor:examples/process_customizations](#recipes-windows_scripts_executor_examples_process_customizations) |
| * [windows_scripts_executor:examples/shutdown_vm](#recipes-windows_scripts_executor_examples_shutdown_vm) |
| * [windows_scripts_executor:examples/test](#recipes-windows_scripts_executor_examples_test) |
| * [windows_scripts_executor:examples/trim_uploads](#recipes-windows_scripts_executor_examples_trim_uploads) |
| * [windows_scripts_executor:examples/windows_iso](#recipes-windows_scripts_executor_examples_windows_iso) |
| * [windows_sdk:examples/full](#recipes-windows_sdk_examples_full) |
| * [zip:examples/full](#recipes-zip_examples_full) |
| ## Recipe Modules |
| |
| ### *recipe_modules* / [buildenv](/recipes/recipe_modules/buildenv) |
| |
| [DEPS](/recipes/recipe_modules/buildenv/__init__.py#5): [recipe\_engine/file][recipe_engine/recipe_modules/file], [recipe\_engine/golang][recipe_engine/recipe_modules/golang], [recipe\_engine/nodejs][recipe_engine/recipe_modules/nodejs], [recipe\_engine/path][recipe_engine/recipe_modules/path] |
| |
| |
| A helper for bootstrapping Go and Node environments. |
| |
| #### **class [BuildEnvApi](/recipes/recipe_modules/buildenv/api.py#13)([RecipeApi][recipe_engine/wkt/RecipeApi]):** |
| |
| API for bootstrapping Go and Node environments. |
| |
|   **@contextlib.contextmanager**<br>— **def [\_\_call\_\_](/recipes/recipe_modules/buildenv/api.py#16)(self, root, go_version_file: Optional[str]=None, nodejs_version_file: Optional[str]=None):** |
| |
| A context manager that activates the build environment. |
| |
| Used to build code in a standalone git repositories that don't have Go |
| or Node.js available via some other mechanism (like via gclient DEPS). |
| |
| It reads the Golang version from `<root>/<go_version_file>` and Node.js |
| version from `<root>/<nodejs_version_file>`, bootstraps the corresponding |
| versions in cache directories, adjusts PATH and other environment variables |
| and yields to the user code. |
| |
| Let's assume the requested Go version is '1.16.10' and Node.js version |
| is '16.13.0', then this call will use following cache directories (notice |
| that '.' is replace with '_' since '.' is not allowed in cache names): |
| * `go1_16_10`: to install Go under. |
| * `gocache`: for Go cache directories. |
| * `nodejs16_13_0`: to install Node.js under. |
| * `npmcache`: for NPM cache directories. |
| |
| For best performance the builder must map these directories as named |
| caches using e.g. |
| |
| luci.builder( |
| ... |
| caches = [ |
| swarming.cache("go1_16_10"), |
| swarming.cache("gocache"), |
| swarming.cache("nodejs16_13_0"), |
| swarming.cache("npmcache"), |
| ], |
| ) |
| |
| Args: |
| root (Path) - path to the checkout root. |
| go_version_file (str) - path within the checkout to a text file with Go |
| version to bootstrap or None to skip bootstrapping Go. |
| nodejs_version_file (str) - path within the checkout to a text file with |
| Node.js version to bootstrap or None to skip bootstrapping Node.js. |
| ### *recipe_modules* / [cloudbuildhelper](/recipes/recipe_modules/cloudbuildhelper) |
| |
| [DEPS](/recipes/recipe_modules/cloudbuildhelper/__init__.py#5): [depot\_tools/depot\_tools][depot_tools/recipe_modules/depot_tools], [depot\_tools/git][depot_tools/recipe_modules/git], [depot\_tools/git\_cl][depot_tools/recipe_modules/git_cl], [recipe\_engine/buildbucket][recipe_engine/recipe_modules/buildbucket], [recipe\_engine/cipd][recipe_engine/recipe_modules/cipd], [recipe\_engine/commit\_position][recipe_engine/recipe_modules/commit_position], [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/raw\_io][recipe_engine/recipe_modules/raw_io], [recipe\_engine/step][recipe_engine/recipe_modules/step], [recipe\_engine/time][recipe_engine/recipe_modules/time] |
| |
| |
| API for calling 'cloudbuildhelper' tool. |
| |
| See https://chromium.googlesource.com/infra/infra/+/main/build/images/. |
| |
| #### **class [CloudBuildHelperApi](/recipes/recipe_modules/cloudbuildhelper/api.py#22)([RecipeApi][recipe_engine/wkt/RecipeApi]):** |
| |
| API for calling 'cloudbuildhelper' tool. |
| |
| — **def [build](/recipes/recipe_modules/cloudbuildhelper/api.py#129)(self, manifest, canonical_tag=None, build_id=None, infra=None, restrictions=None, labels=None, tags=None, checkout_metadata=None, step_test_image=None, cost=None):** |
| |
| Calls `cloudbuildhelper build <manifest>` interpreting the result. |
| |
| Args: |
| * manifest (Path) - path to YAML file with definition of what to build. |
| * canonical_tag (str) - tag to push the image to if we built a new image. |
| * build_id (str) - identifier of the CI build to put into metadata. |
| * infra (str) - what section to pick from 'infra' field in the YAML. |
| * restrictions (Restrictions) - restrictions to apply to manifests. |
| * labels ({str: str}) - labels to attach to the docker image. |
| * tags ([str]) - tags to unconditionally push the image to. |
| * checkout_metadata (CheckoutMetadata) - to get revisions. |
| * step_test_image (Image) - image to produce in training mode. |
| * cost (ResourceCost) - an estimated resource cost of this call. |
| |
| Returns: |
| Image instance or NotUploadedImage if the YAML doesn't specify a registry. |
| |
| Raises: |
| StepFailure on failures. |
| |
|   **@command.setter**<br>— **def [command](/recipes/recipe_modules/cloudbuildhelper/api.py#104)(self, val):** |
| |
| Can be used to tell the module to use an existing binary. |
| |
| — **def [discover\_manifests](/recipes/recipe_modules/cloudbuildhelper/api.py#487)(self, root, entries, test_data=None):** |
| |
| Returns a list with paths to all manifests we need to build. |
| |
| Each entry is either a directory to scan recursively, or a reference to |
| a concrete manifest (if ends with ".yaml"). |
| |
| Args: |
| * root (Path) - gclient solution root. |
| * entries ([str]) - paths relative to the solution root to scan. |
| * test_data ([str]) - paths to put into each `dirs` in training mode. |
| |
| Returns: |
| [Path]. |
| |
| — **def [do\_roll](/recipes/recipe_modules/cloudbuildhelper/api.py#515)(self, repo_url, root, callback, ref='main'):** |
| |
| Checks out a repo, calls the callback to modify it, uploads the result. |
| |
| Args: |
| * repo_url (str) - repo to checkout. |
| * root (Path) - where to check it out too (can be a cache). |
| * callback (func(Path)) - will be called as `callback(root)` with cwd also |
| set to `root`. It can modify files there and either return None to |
| skip the roll or RollCL to attempt the roll. If no files are modified, |
| the roll will be skipped regardless of the return value. |
| * ref (str) - a ref to update (e.g. "main"). |
| |
| Returns: |
| * (None, None) if didn't create a CL (because nothing has changed). |
| * (Issue number, Issue URL) if created a CL. |
| |
| — **def [get\_version\_label](/recipes/recipe_modules/cloudbuildhelper/api.py#585)(self, path, revision, ref=None, commit_position=None, template=None):** |
| |
| Computes a version string identifying a commit. |
| |
| To calculate a commit position it either uses `Cr-Commit-Position` footer, |
| if available, or falls back to `git number <rev>`. |
| |
| Uses the given `template` string to format the label. It is a Python format |
| string, with following placeholders available: |
| |
| {rev}: a string with the short git revision hash. |
| {ref}: a string with the last component of the commit ref (e.g. 'main'). |
| {cp}: an integer with the commit position number. |
| {date}: "YYYY.MM.DD" UTC date when the build started. |
| {build}: an integer build number or 0 if not available. |
| |
| Defaults to `{cp}-{rev}`. |
| |
| This label is used as a version name for artifacts produced based on this |
| checked out commit. |
| |
| Args: |
| * path (Path) - path to the git checkout root. |
| * revision (str) - checked out revision. |
| * ref (str) - checked out git ref if known. |
| * commit_position (str) - `Cr-Commit-Position` footer value if available. |
| * template (str) - a Python format string to use to format the version. |
| |
| Returns: |
| A version string. |
| |
| — **def [report\_version](/recipes/recipe_modules/cloudbuildhelper/api.py#109)(self):** |
| |
| Reports the version of cloudbuildhelper tool via the step text. |
| |
| Returns: |
| None. |
| |
| — **def [update\_pins](/recipes/recipe_modules/cloudbuildhelper/api.py#463)(self, path):** |
| |
| Calls `cloudbuildhelper pins-update <path>`. |
| |
| Updates the file at `path` in place if some docker tags mentioned there have |
| moved since the last pins update. |
| |
| Args: |
| * path (Path) - path to a `pins.yaml` file to update. |
| |
| Returns: |
| List of strings with updated "<image>:<tag>" pairs, if any. |
| |
| — **def [upload](/recipes/recipe_modules/cloudbuildhelper/api.py#364)(self, manifest, canonical_tag, build_id=None, infra=None, restrictions=None, checkout_metadata=None, step_test_tarball=None, cost=None):** |
| |
| Calls `cloudbuildhelper upload <manifest>` interpreting the result. |
| |
| Args: |
| * manifest (Path) - path to YAML file with definition of what to build. |
| * canonical_tag (str) - tag to apply to a tarball if we built a new one. |
| * build_id (str) - identifier of the CI build to put into metadata. |
| * infra (str) - what section to pick from 'infra' field in the YAML. |
| * restrictions (Restrictions) - restrictions to apply to manifests. |
| * checkout_metadata (CheckoutMetadata) - to get revisions. |
| * step_test_tarball (Tarball) - tarball to produce in training mode. |
| * cost (ResourceCost) - an estimated resource cost of this call. |
| |
| Returns: |
| Tarball instance. |
| |
| Raises: |
| StepFailure on failures. |
| ### *recipe_modules* / [cloudkms](/recipes/recipe_modules/cloudkms) |
| |
| [DEPS](/recipes/recipe_modules/cloudkms/__init__.py#7): [recipe\_engine/cipd][recipe_engine/recipe_modules/cipd], [recipe\_engine/path][recipe_engine/recipe_modules/path], [recipe\_engine/step][recipe_engine/recipe_modules/step] |
| |
| |
| #### **class [CloudKMSApi](/recipes/recipe_modules/cloudkms/api.py#8)([RecipeApi][recipe_engine/wkt/RecipeApi]):** |
| |
| API for interacting with CloudKMS using the LUCI cloudkms tool. |
| |
|   **@property**<br>— **def [cloudkms\_path](/recipes/recipe_modules/cloudkms/api.py#15)(self):** |
| |
| Returns the path to LUCI cloudkms binary. |
| |
| When the property is accessed the first time, cloudkms will be installed |
| using cipd. |
| |
| — **def [decrypt](/recipes/recipe_modules/cloudkms/api.py#30)(self, kms_crypto_key, input_file, output_file):** |
| |
| Decrypt a ciphertext file with a CloudKMS key. |
| |
| Args: |
| * kms_crypto_key (str) - The name of the encryption key, e.g. |
| projects/chops-kms/locations/global/keyRings/[KEYRING]/cryptoKeys/[KEY] |
| * input_file (Path) - The path to the input (ciphertext) file. |
| * output_file (Path) - The path to the output (plaintext) file. It is |
| recommended that this is inside api.path.cleanup_dir to ensure the |
| plaintext file will be cleaned up by recipe. |
| |
| — **def [sign](/recipes/recipe_modules/cloudkms/api.py#48)(self, kms_crypto_key, input_file, output_file, service_account_creds_file=None):** |
| |
| Processes a plaintext and uploads the digest for signing by Cloud KMS. |
| |
| Args: |
| * kms_crypto_key (str) - The name of the cryptographic key, e.g. |
| projects/[PROJECT]/locations/[LOC]/keyRings/[KEYRING]/cryptoKeys/[KEY] |
| * input_file (Path) - Path to file with data to operate on. Data for sign |
| and verify cannot be larger than 64KiB. |
| * output_file (Path) - Path to write output signature to a json file. |
| * service_account_creds_file (str) - Path to JSON file with service |
| account credentials to use. |
| |
| — **def [verify](/recipes/recipe_modules/cloudkms/api.py#80)(self, kms_crypto_key, input_file, signature_file, output_file='-', service_account_creds_file=None):** |
| |
| Verifies a signature that was previously created with a key stored in |
| CloudKMS. |
| |
| Args: |
| * kms_crypto_key (str)- The name of the cryptographic public key, |
| e.g. |
| projects/[PROJECT]/locations/[LOC]/keyRings/[KEYRING]/cryptoKeys/[KEY] |
| * input_file (Path) - Path to file with data to operate on. Data for sign |
| and verify cannot be larger than 64KiB. |
| * signature_file (Path) - Path to read signature from. |
| * output_file (Path) - Path to write operation results |
| (successful verification or signature mismatch)to (use '-' for stdout). |
| * service_account_creds_file (str) - Path to JSON file with service |
| account credentials to use. |
| ### *recipe_modules* / [codesearch](/recipes/recipe_modules/codesearch) |
| |
| [DEPS](/recipes/recipe_modules/codesearch/__init__.py#5): [depot\_tools/depot\_tools][depot_tools/recipe_modules/depot_tools], [depot\_tools/git][depot_tools/recipe_modules/git], [depot\_tools/gsutil][depot_tools/recipe_modules/gsutil], [depot\_tools/tryserver][depot_tools/recipe_modules/tryserver], [recipe\_engine/buildbucket][recipe_engine/recipe_modules/buildbucket], [recipe\_engine/cipd][recipe_engine/recipe_modules/cipd], [recipe\_engine/commit\_position][recipe_engine/recipe_modules/commit_position], [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/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 [CodesearchApi](/recipes/recipe_modules/codesearch/api.py#11)([RecipeApi][recipe_engine/wkt/RecipeApi]):** |
| |
| — **def [add\_kythe\_metadata](/recipes/recipe_modules/codesearch/api.py#71)(self):** |
| |
| Adds inline Kythe metadata to Mojom generated files. |
| |
| This metadata is used to connect things in the generated file to the thing |
| in the Mojom file which generated it. This is made possible by annotations |
| added to the generated file by the Mojo compiler. |
| |
| — **def [checkout\_generated\_files\_repo\_and\_sync](/recipes/recipe_modules/codesearch/api.py#353)(self, copy, revision, kzip_path=None, ignore=None):** |
| |
| Check out the generated files repo and sync the generated files |
| into this checkout. |
| |
| Args: |
| copy: A dict that describes how generated files should be synced. Keys are |
| paths to local directories and values are where they are copied to in |
| the generated files repo. |
| |
| { |
| '/path/to/foo': 'foo', |
| '/path/to/bar': 'baz/bar', |
| } |
| |
| The above copy config would result in a generated files repo like: |
| |
| repo/ |
| repo/foo/ |
| repo/baz/bar/ |
| |
| kzip_path: Path to kzip that will be used to prune uploaded files. |
| ignore: List of paths that shouldn't be synced. |
| revision: A commit hash to be used in the commit message. |
| |
| — **def [cleanup\_old\_generated](/recipes/recipe_modules/codesearch/api.py#26)(self, age_days: int=7, checkout_dir: Optional[config_types.Path]=None):** |
| |
| Clean up generated files older than the specified number of days. |
| |
| Args: |
| age_days: Minimum age in days for files to delete (integer). |
| checkout_dir: The directory where code is checked out. If not specified, |
| use checkout_dir initialized in path module by default |
| |
| — **def [clone\_clang\_tools](/recipes/recipe_modules/codesearch/api.py#86)(self, clone_dir):** |
| |
| Clone chromium/src clang tools. |
| |
| — **def [create\_and\_upload\_kythe\_index\_pack](/recipes/recipe_modules/codesearch/api.py#188)(self, commit_hash: str, commit_timestamp: int, commit_position: Optional[str]=None, clang_target_arch: Optional[str]=None, checkout_dir: Optional[config_types.Path]=None):** |
| |
| Create the kythe index pack and upload it to google storage. |
| |
| Args: |
| commit_hash: Hash of the commit at which we're creating the index pack, |
| if None use got_revision. |
| commit_timestamp: Timestamp of the commit at which we're creating the |
| index pack, in integer seconds since the UNIX epoch. |
| clang_target_arch: Target architecture to cross-compile for. |
| checkout_dir: The directory where code is checked out. If not specified, |
| use checkout_dir initialized in path module by default. |
| |
| Returns: |
| Path to the generated index pack. |
| |
| — **def [get\_config\_defaults](/recipes/recipe_modules/codesearch/api.py#21)(self):** |
| |
| — **def [run\_clang\_tool](/recipes/recipe_modules/codesearch/api.py#95)(self, clang_dir: Optional[config_types.Path]=None, run_dirs: Optional[Iterable[config_types.Path]]=None, target_architecture: Optional[str]=None):** |
| |
| Download and run the clang tool. |
| |
| Args: |
| clang_dir: Path to clone clang into. |
| run_dirs: Dirs in which to run the clang tool. |
| target_architecture: If given, the architecture to transpile for. |
| ### *recipe_modules* / [docker](/recipes/recipe_modules/docker) |
| |
| [DEPS](/recipes/recipe_modules/docker/__init__.py#7): [recipe\_engine/path][recipe_engine/recipe_modules/path], [recipe\_engine/raw\_io][recipe_engine/recipe_modules/raw_io], [recipe\_engine/service\_account][recipe_engine/recipe_modules/service_account], [recipe\_engine/step][recipe_engine/recipe_modules/step] |
| |
| |
| #### **class [DockerApi](/recipes/recipe_modules/docker/api.py#10)([RecipeApi][recipe_engine/wkt/RecipeApi]):** |
| |
| Provides steps to connect and run Docker images. |
| |
| — **def [\_\_call\_\_](/recipes/recipe_modules/docker/api.py#161)(self, \*args, \*\*kwargs):** |
| |
| Executes specified docker command. |
| |
| Please make sure to use api.docker.login method before if specified command |
| requires authentication. |
| |
| Args: |
| args: arguments passed to the 'docker' command including subcommand name, |
| e.g. api.docker('push', 'my_image:latest'). |
| kwargs: arguments passed down to api.step module. |
| |
| — **def [ensure\_installed](/recipes/recipe_modules/docker/api.py#22)(self, \*\*kwargs):** |
| |
| Checks that the docker binary is in the PATH. |
| |
| Raises StepFailure if binary is not found. |
| |
| — **def [get\_version](/recipes/recipe_modules/docker/api.py#34)(self):** |
| |
| Returns Docker version installed or None if failed to detect. |
| |
| — **def [login](/recipes/recipe_modules/docker/api.py#51)(self, server='gcr.io', project='chromium-container-registry', service_account=None, step_name=None, \*\*kwargs):** |
| |
| Connect to a Docker registry. |
| |
| This step must be executed before any other step in this module that |
| requires authentication. |
| |
| Args: |
| server: GCP container registry to pull images from. Defaults to 'gcr.io'. |
| project: Name of the Cloud project where Docker images are hosted. |
| service_account: service_account.api.ServiceAccount used for |
| authenticating with the container registry. Defaults to the task's |
| associated service account. |
| step_name: Override step name. Default is 'docker login'. |
| |
| — **def [pull](/recipes/recipe_modules/docker/api.py#93)(self, image, step_name=None):** |
| |
| Pull a docker image from a remote repository. |
| |
| Args: |
| image: Name of the image to pull. |
| step_name: Override step name. Default is 'docker pull'. |
| |
| — **def [python](/recipes/recipe_modules/docker/api.py#19)(self, name, script, args, \*\*kwargs):** |
| |
| — **def [run](/recipes/recipe_modules/docker/api.py#109)(self, image, step_name=None, cmd_args=None, dir_mapping=None, env=None, inherit_luci_context=False, \*\*kwargs):** |
| |
| Run a command in a Docker image as the current user:group. |
| |
| Args: |
| image: Name of the image to run. |
| step_name: Override step name. Default is 'docker run'. |
| cmd_args: Used to specify command to run in an image as a list of |
| arguments. If not specified, then the default command embedded into |
| the image is executed. |
| dir_mapping: List of tuples (host_dir, docker_dir) mapping host |
| directories to directories in a Docker container. Directories are |
| mapped as read-write. |
| env: dict of env variables. |
| inherit_luci_context: Inherit current LUCI Context (including auth). |
| CAUTION: removes network isolation between the container and the |
| docker host. Read more https://docs.docker.com/network/host/. |
| ### *recipe_modules* / [infra\_checkout](/recipes/recipe_modules/infra_checkout) |
| |
| [DEPS](/recipes/recipe_modules/infra_checkout/__init__.py#7): [depot\_tools/bot\_update][depot_tools/recipe_modules/bot_update], [depot\_tools/gclient][depot_tools/recipe_modules/gclient], [depot\_tools/gerrit][depot_tools/recipe_modules/gerrit], [depot\_tools/git][depot_tools/recipe_modules/git], [depot\_tools/presubmit][depot_tools/recipe_modules/presubmit], [recipe\_engine/buildbucket][recipe_engine/recipe_modules/buildbucket], [recipe\_engine/cipd][recipe_engine/recipe_modules/cipd], [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/raw\_io][recipe_engine/recipe_modules/raw_io], [recipe\_engine/step][recipe_engine/recipe_modules/step], [recipe\_engine/tricium][recipe_engine/recipe_modules/tricium] |
| |
| |
| #### **class [InfraCheckoutApi](/recipes/recipe_modules/infra_checkout/api.py#13)([RecipeApi][recipe_engine/wkt/RecipeApi]):** |
| |
| Stateless API for using public infra gclient checkout. |
| |
| — **def [apply\_golangci\_lint](/recipes/recipe_modules/infra_checkout/api.py#256)(self, co, go_module_root=None):** |
| |
| Apply golangci-lint to existing diffs and emit lint warnings via tricium. |
| |
| `go_module_root` is an absolute path to the root of a Go module to lint. It |
| should be under `patch_root_path`. If None, `patch_root_path` itself will be |
| used. |
| |
| — **def [checkout](/recipes/recipe_modules/infra_checkout/api.py#16)(self, gclient_config_name, patch_root=None, path=None, internal=False, generate_py2_env=False, go_version_variant=None, \*\*kwargs):** |
| |
| Fetches infra gclient checkout into a given path OR named_cache. |
| |
| Arguments: |
| * gclient_config_name (string) - name of gclient config. |
| * patch_root (path or string) - path **inside** infra checkout to git repo |
| in which to apply the patch. For example, 'infra/luci' for luci-py repo. |
| If None (default), no patches will be applied. |
| * path (path or string) - path to where to create/update infra checkout. |
| If None (default) - path is cache with customizable name (see below). |
| * internal (bool) - by default, False, meaning infra gclient checkout |
| layout is assumed, else infra_internal. |
| This has an effect on named_cache default and inside which repo's |
| go corner the ./go/env.py command is run. |
| * generate_py2_env uses the "infra/3pp/tools/cpython" package to create |
| the infra/ENV python 2.7 virtual environment. This is only needed in |
| specific situations such as running tests for python 2.7 GAE apps. |
| * go_version_variant can be set go "legacy" or "bleeding_edge" to force |
| the builder to use a non-default Go version. What exact Go versions |
| correspond to "legacy" and "bleeding_edge" and default is defined in |
| bootstrap.py in infra.git. |
| * kwargs - passed as is to bot_update.ensure_checkout. |
| |
| Returns: |
| a Checkout object with commands for common actions on infra checkout. |
| |
| — **def [get\_footer\_infra\_deps\_overrides](/recipes/recipe_modules/infra_checkout/api.py#229)(self, gerrit_change, step_test_data=None):** |
| |
| Returns revision overrides for infra repos parsed from the gerrit footer. |
| |
| Checks the commit message for lines like: Try-<deps_name>: <revision>. |
| e.g. 'Try-infra: 123abc456def' |
| |
| Allowed values for <deps_name> are: |
| 'infra' for infra/infra, |
| 'infra_internal' for infra/infra_internal, |
| '.' for infra/infra_superproject |
| |
| These deps names are based what's found in infra/infra_superproject/DEPS |
| ### *recipe_modules* / [infra\_cipd](/recipes/recipe_modules/infra_cipd) |
| |
| [DEPS](/recipes/recipe_modules/infra_cipd/__init__.py#7): [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/runtime][recipe_engine/recipe_modules/runtime], [recipe\_engine/step][recipe_engine/recipe_modules/step] |
| |
| |
| #### **class [InfraCIPDApi](/recipes/recipe_modules/infra_cipd/api.py#11)([RecipeApi][recipe_engine/wkt/RecipeApi]):** |
| |
| API for building packages defined in infra's public and intenral repos. |
| |
| Essentially a shim around scripts in |
| https://chromium.googlesource.com/infra/infra.git/+/main/build/ |
| and its internal counterpart. |
| |
| — **def [build](/recipes/recipe_modules/infra_cipd/api.py#63)(self, sign_id=None):** |
| |
| Builds packages. |
| |
|   **@contextlib.contextmanager**<br>— **def [context](/recipes/recipe_modules/infra_cipd/api.py#23)(self, path_to_repo, goos=None, goarch=None):** |
| |
| Sets context building CIPD packages. |
| |
| Arguments: |
| path_to_repo (path): path infra or infra_internal repo root dir. |
| Expects to find `build/build.py` inside provided dir. |
| goos, goarch (str): allows for setting GOOS and GOARCH |
| for cross-compiling Go code. |
| |
| Doesn't support nesting. |
| |
| — **def [tags](/recipes/recipe_modules/infra_cipd/api.py#114)(self, git_repo_url, revision):** |
| |
| Returns tags to be attached to uploaded CIPD packages. |
| |
| — **def [test](/recipes/recipe_modules/infra_cipd/api.py#79)(self):** |
| |
| Tests previously built packages integrity. |
| |
| — **def [upload](/recipes/recipe_modules/infra_cipd/api.py#86)(self, tags, step_test_data=None):** |
| |
| Uploads previously built packages. |
| ### *recipe_modules* / [omahaproxy](/recipes/recipe_modules/omahaproxy) |
| |
| [DEPS](/recipes/recipe_modules/omahaproxy/__init__.py#3): [recipe\_engine/raw\_io][recipe_engine/recipe_modules/raw_io], [recipe\_engine/url][recipe_engine/recipe_modules/url] |
| |
| |
| #### **class [OmahaproxyApi](/recipes/recipe_modules/omahaproxy/api.py#11)([RecipeApi][recipe_engine/wkt/RecipeApi]):** |
| |
| APIs for interacting with omahaproxy. |
| |
| — **def [history](/recipes/recipe_modules/omahaproxy/api.py#20)(self, min_major_version=None, exclude_platforms=None):** |
| |
|   **@staticmethod**<br>— **def [split\_version](/recipes/recipe_modules/omahaproxy/api.py#14)(text):** |
| ### *recipe_modules* / [powershell](/recipes/recipe_modules/powershell) |
| |
| [DEPS](/recipes/recipe_modules/powershell/__init__.py#5): [recipe\_engine/json][recipe_engine/recipe_modules/json], [recipe\_engine/step][recipe_engine/recipe_modules/step] |
| |
| |
| #### **class [PowershellAPI](/recipes/recipe_modules/powershell/api.py#9)([RecipeApi][recipe_engine/wkt/RecipeApi]):** |
| |
| API to execute powershell scripts |
| |
| — **def [\_\_call\_\_](/recipes/recipe_modules/powershell/api.py#12)(self, name, command, logs=None, args=None, ret_codes=None):** |
| |
| Execute a command through powershell. |
| Args: |
| * name (str) - name of the step being run |
| * command (str|path) - powershell command or windows script/exe to run |
| * logs ([]str) - List of logs to read on completion. Specifying dir reads |
| all logs in dir |
| * args ([]str) - List of args supplied to the command |
| * ret_codes ([]int) - List of return codes to be treated as success |
| Returns: |
| Dict containing 'results' as a key |
| Raises: |
| StepFailure if the failure is detected. See resources/psinvoke.py |
| ### *recipe_modules* / [qemu](/recipes/recipe_modules/qemu) |
| |
| [DEPS](/recipes/recipe_modules/qemu/__init__.py#5): [recipe\_engine/cipd][recipe_engine/recipe_modules/cipd], [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/raw\_io][recipe_engine/recipe_modules/raw_io], [recipe\_engine/step][recipe_engine/recipe_modules/step] |
| |
| |
| #### **class [QEMUAPI](/recipes/recipe_modules/qemu/api.py#25)([RecipeApi][recipe_engine/wkt/RecipeApi]):** |
| |
| API to manage qemu VMs |
| |
| — **def [cleanup\_disks](/recipes/recipe_modules/qemu/api.py#65)(self):** |
| |
| cleanup_disks deletes all the disks in the disks dir. This is meant to |
| be used for cleanup after using the VM |
| |
| — **def [create\_disk](/recipes/recipe_modules/qemu/api.py#72)(self, disk_name, fs_format='fat', min_size=0, include=None):** |
| |
| create_disk creates a virtual disk with the given name, format and size. |
| |
| Optionally it is possible to specify a list of paths to copy to the disk. |
| If the size is deemed to be too small to copy the files it might be |
| increased to fit all the files. |
| |
| Args: |
| * disk_name: name of the disk image file |
| * fs_format: one of [exfat, ext3, fat, msdos, vfat, ext2, ext4, ntfs] |
| * min_size: minimum size of the disk in Megabytes(1048576 bytes) |
| (bigger size used if required) |
| * include: sequence of files and directories to copy to image |
| |
| — **def [create\_empty\_disk](/recipes/recipe_modules/qemu/api.py#173)(self, disk_name, fs_format, size):** |
| |
| create_empty_disk creates an empty disk image and formats it |
| |
| Args: |
| * disk_name: name of the disk image file |
| * fs_format: one of [ext3, fat, ntfs] |
| * size: size of the disk image in bytes |
| |
|   **@property**<br>— **def [disks](/recipes/recipe_modules/qemu/api.py#37)(self):** |
| |
| — **def [init](/recipes/recipe_modules/qemu/api.py#41)(self, version):** |
| |
| Initialize the module, ensure that qemu exists on the system |
| |
| Note: |
| - QEMU is installed in cache/qemu |
| - Virtual disks are stored in cleanup/qemu/disks |
| |
| Args: |
| * version: the cipd version tag for qemu |
| |
| — **def [mount\_disk\_image](/recipes/recipe_modules/qemu/api.py#223)(self, disk, partitions=[1]):** |
| |
| mount_disk_image mounts the given image and returns the mount location |
| and loop file used for mounting |
| |
| Args: |
| * disk: name of the disk image file |
| * partitions: list of partitions to mount, If None attempt to mount the |
| whole image |
| |
| Returns: loop file used for the disk and list of mount locations |
| |
|   **@property**<br>— **def [path](/recipes/recipe_modules/qemu/api.py#33)(self):** |
| |
| — **def [powerdown\_vm](/recipes/recipe_modules/qemu/api.py#369)(self, name):** |
| |
| powerdown_vm sends a shutdown signal to the given VM. Similar to power |
| button on a physical device |
| |
| Args: |
| * name: name of the vm to shutdown |
| |
| Returns: True if powerdown signal was sent to VM. False otherwise |
| |
| — **def [quit\_vm](/recipes/recipe_modules/qemu/api.py#410)(self, name):** |
| |
| quit_vm sends a quit signal to the qemu process. Use this if your VM |
| doesn't respond to powerdown signal. |
| |
| Args: |
| * name: name of the vm to quit |
| |
| Returns: True if quit signal was sent to VM. False otherwise |
| |
| — **def [start\_vm](/recipes/recipe_modules/qemu/api.py#297)(self, arch, qemu_vm, kvm=False):** |
| |
| start_vm starts a qemu vm |
| |
| QEMU is started with qemu_monitor running a qmp service. It also connects |
| the serial port of the machine to a tcp port. |
| |
| Args: |
| * arch: The arch that the VM should be based on |
| * qemu_vm: QEMU_VM proto object containing all the config for starting |
| the vm |
| * kvm: If true then VM is run on hardware. It's emulated otherwise |
| |
| — **def [unmount\_disk\_image](/recipes/recipe_modules/qemu/api.py#274)(self, loop_file, partitions=[1]):** |
| |
| unmount_disk_image unmounts the disk mounted using the given loop_file |
| |
| Args: |
| * loop_file: Loop device used to mount the image |
| |
| — **def [vm\_status](/recipes/recipe_modules/qemu/api.py#451)(self, name):** |
| |
| vm_status returns a dict describing the status of the vm. The return |
| value is the QMP response to `query-status` |
| |
| Args: |
| * name: name of the vm |
| |
| Returns: QMP json response for status query |
| ### *recipe_modules* / [recipe\_autoroller](/recipes/recipe_modules/recipe_autoroller) |
| |
| [DEPS](/recipes/recipe_modules/recipe_autoroller/__init__.py#7): [depot\_tools/depot\_tools][depot_tools/recipe_modules/depot_tools], [depot\_tools/gerrit][depot_tools/recipe_modules/gerrit], [depot\_tools/git][depot_tools/recipe_modules/git], [depot\_tools/git\_cl][depot_tools/recipe_modules/git_cl], [recipe\_engine/buildbucket][recipe_engine/recipe_modules/buildbucket], [recipe\_engine/context][recipe_engine/recipe_modules/context], [recipe\_engine/file][recipe_engine/recipe_modules/file], [recipe\_engine/futures][recipe_engine/recipe_modules/futures], [recipe\_engine/json][recipe_engine/recipe_modules/json], [recipe\_engine/led][recipe_engine/recipe_modules/led], [recipe\_engine/path][recipe_engine/recipe_modules/path], [recipe\_engine/proto][recipe_engine/recipe_modules/proto], [recipe\_engine/random][recipe_engine/recipe_modules/random], [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] |
| |
| |
| #### **class [RecipeAutorollerApi](/recipes/recipe_modules/recipe_autoroller/api.py#151)([RecipeApi][recipe_engine/wkt/RecipeApi]):** |
| |
| — **def [roll\_projects](/recipes/recipe_modules/recipe_autoroller/api.py#152)(self, projects):** |
| |
| Attempts to roll each project from the provided list. |
| |
| If rolling any of the projects leads to failures, other |
| projects are not affected. |
| |
| Args: |
| projects: list of tuples of |
| project_id (string): id as found in recipes.cfg. |
| project_url (string): Git repository URL of the project. |
| ### *recipe_modules* / [support\_3pp](/recipes/recipe_modules/support_3pp) |
| |
| [DEPS](/recipes/recipe_modules/support_3pp/__init__.py#7): [depot\_tools/git][depot_tools/recipe_modules/git], [depot\_tools/osx\_sdk][depot_tools/recipe_modules/osx_sdk], [depot\_tools/tryserver][depot_tools/recipe_modules/tryserver], [depot\_tools/windows\_sdk][depot_tools/recipe_modules/windows_sdk], [recipe\_engine/archive][recipe_engine/recipe_modules/archive], [recipe\_engine/bcid\_reporter][recipe_engine/recipe_modules/bcid_reporter], [recipe\_engine/buildbucket][recipe_engine/recipe_modules/buildbucket], [recipe\_engine/cipd][recipe_engine/recipe_modules/cipd], [recipe\_engine/context][recipe_engine/recipe_modules/context], [recipe\_engine/defer][recipe_engine/recipe_modules/defer], [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/runtime][recipe_engine/recipe_modules/runtime], [recipe\_engine/step][recipe_engine/recipe_modules/step], [recipe\_engine/url][recipe_engine/recipe_modules/url] |
| |
| |
| Allows uniform cross-compiliation, version tracking and archival for |
| third-party software packages (libs+tools) for distribution via CIPD. |
| |
| The purpose of the Third Party Packages (3pp) recipe/module is to generate CIPD |
| packages of statically-compiled software for distribution in our continuous |
| integration fleets, as well as software distributed to our develepers (e.g. |
| via depot_tools). |
| |
| Target os and architecture uses the CIPD "${os}-${arch}" (a.k.a. "${platform}") |
| nomenclature, which is currently defined in terms of Go's GOOS and GOARCH |
| runtime variables (with the unfortunate exception that CIPD uses 'mac' instead |
| of 'darwin'). This is somewhat arbitrary, but has worked well so far for us. |
| |
| #### Package Definitions |
| |
| The 3pp module loads package definitions from a folder containing subfolders. |
| Each subfolder defines a single software package to fetch, build and upload. |
| For example, you might have a folder in your repo like this: |
| |
| my_repo.git/ |
| 3pp/ # "root folder" |
| .vpython3 # common vpython file for all package scripts |
| zlib/ # zlib "package folder" |
| 3pp.pb # REQUIRED: the Spec.proto definition for zlib |
| install.sh # a script to build zlib from source |
| extra_resource_file |
| other_package/ |
| 3pp.pb # REQUIRED |
| fetch.py # a script to fetch `other_package` in a custom way |
| install.sh |
| install-win.sh # windows-specific build script |
| ... |
| |
| This defines two packages (`zlib`, and `other_package`). The 3pp.pb files have |
| references to the fetch/build scripts, and describe what dependencies the |
| packages have (if any). |
| |
| *** promo |
| NOTE: Only one layer of package folders is supported currently. |
| *** |
| |
| Packages are named by the folder that contains their definition file (3pp.pb) |
| and build scripts. It's preferable to have package named after software that it |
| contains. However, sometimes you want multiple major versions of the software to |
| exist side-by-side (e.g. pcre and pcre2, python and python3, etc.). In this |
| case, have two separate package definition folders. |
| |
| Each package folder contains a package spec (3pp.pb), as well as scripts, |
| patches and/or utility tools to build the software from source. |
| |
| The spec is a Text Proto document specified by the [spec.proto] schema. |
| |
| The spec is broken up into two main sections, "create" and "upload". The |
| create section allows you to specify how the package software gets created, and |
| allows specifying differences in how it's fetched/built/tested on a per-target |
| basis, and the upload section has some details on how the final result gets |
| uploaded to CIPD. |
| |
| [spec.proto]: /recipes/recipe_modules/support_3pp/spec.proto |
| |
| #### Creation Stages |
| |
| The 3pp.pb spec begins with a series of `create` messages, each with details on |
| on how to fetch+build+test the package. Each create message contains |
| a "platform_re" field which works as a regex on the ${platform} value. All |
| matching patterns apply in order, and non-matching patterns are skipped. Each |
| create message is applied with a dict.update for each member message (i.e. |
| ['source'].update, ['build'].update, etc.) to build a singular create message |
| for the current target platform. For list values (e.g. 'tool', 'dep' in the |
| Build message), you can clear them by providing a new empty value |
| (e.g. `tool: ""`) |
| |
| Once all the create messages are merged (see schema for all keys that can be |
| present), the actual creation takes place. |
| |
| Note that "source" is REQUIRED in the final merged instruction set. All other |
| messages are optional and have defaults as documented in [spec.proto]. |
| |
| The creation process is broken up into 4 different stages: |
| |
| * Source |
| * Build |
| * Package |
| * Verify |
| |
| ##### Envvars |
| |
| All scripts described below are invoked with the following environment variables |
| set: |
| * $_3PP_PACKAGE_NAME - the name of the package currently building |
| * $_3PP_PATCH_VERSION - the `patch_version` set for the version we're building |
| (if any patch version was set). |
| * $_3PP_PLATFORM - the platform we're targeting |
| * $_3PP_TOOL_PLATFORM - the platform that we're building on (will be different |
| than _3PP_PLATFORM if we're cross-compiling) |
| * $_3PP_VERSION - the version we're building, e.g. 1.2.3 |
| * $GOOS - The golang OS name we're targeting |
| * $GOARCH - The golang architecture we're targeting |
| * $MACOSX_DEPLOYMENT_TARGET - On OS X, set to 10.10, for your |
| semi-up-to-date OS X building needs. This needs to be consistently |
| set for all packages or it will cause linker warnings/errors when |
| linking in static libs that were targeting a newer version (e.g. |
| if it was left unset). Binaries built with this set to 10.10 will not |
| run on 10.9 or older systems. |
| |
| Additionally, on cross-compile environments, the $CROSS_TRIPLE environment |
| variable is set to a GCC cross compile target triplet of cpu-vendor-os. |
| |
| ##### Source |
| |
| The source is used to fetch the raw sources for assembling the package. In some |
| cases the sources may actually be binary artifacts (e.g. prebuilt windows |
| installers). |
| |
| The source is unpacked to a checkout directory, possibly in some specified |
| subdirectory. Sources can either produce the actual source files, or they can |
| produce a single archive file (e.g. zip or tarball), which can be unpacked with |
| the 'unpack_archive' option. In addition, patches can be applied to the source |
| with the 'patch_dir' option (the patches should be in `git format-patch` format, |
| and will be applied with `git apply`). |
| |
| * `git` - This checks out a semver tag in the repo. |
| * `cipd` - This fetches data from a CIPD package. |
| * `url` - This is used for packages that do not provide a stable distribution |
| like git for their source code. An original download url will be passed in |
| this method to download the source artifact from third party distribution. |
| * `script` - Used for "weird" packages which are distributed via e.g. |
| an HTML download page or an API. The script must be able to return the |
| 'latest' version of its source, as well as to actually fetch a specified |
| version. Python fetch scripts will be executed with `vpython3`, and so |
| may have a .vpython3 file (or similar) in the usual manner to pull in |
| dependencies like `requests`. |
| |
| Additionally the Source message contains a `patch_version` field to allow symver |
| disambiguation of the built packages when they contain patches or other |
| alterations which need to be versioned. This string will be joined with a '.' to |
| the source version being built when uploading the result to CIPD. |
| |
| ##### Build |
| |
| The build message allows you to specify `deps`, and `tools`, as well as a script |
| `install` which contains your logic to transform the source into the result |
| package. |
| |
| Deps are libraries built for the target `${platform}` and are typically used for |
| linking your package. |
| |
| Tools are binaries built for the host; they're things like `automake` or `sed` |
| that are used during the configure/make phase of your build, but aren't linked |
| into the built product. These tools will be available on $PATH (both '$tools' |
| and '$tools/bin' are added to $PATH, because many packages are set up with their |
| binaries at the base of the package, and some are set up with them in a /bin |
| folder) |
| |
| Installation occurs by invoking the script indicated by the 'install' field |
| (with the appropriate interpreter, depending on the file extension) like: |
| |
| <interpreter> "$install[*]" "$PREFIX" "$DEPS_PREFIX" |
| |
| Where: |
| |
| * The current working directory is the base of the source checkout w/o subdir. |
| * `$install[*]` are all of the tokens in the 'install' field. |
| * `$PREFIX` is the directory which the script should install everything to; |
| this directory will be archived into CIPD verbatim. |
| * `$DEPS_PREFIX` is the path to a prefix directory containing the union of all |
| of your packages' transitive deps. For example, all of the headers of your |
| deps are located at `$DEPS_PREFIX/include`. |
| * All `tools` are in $PATH |
| |
| If the 'install' script is omitted, it is assumed to be 'install.sh'. |
| |
| If the ENTIRE build message is omitted, no build takes place. Instead the |
| result of the 'source' stage will be packaged. |
| |
| During the execution of the build phase, the package itself and its dependent |
| packages (e.g. "dep" and "tool" in PB file) will be copied into the source |
| checkout in the .3pp directory, and the script will be invoked as |
| `/path/to/checkout/.3pp/<cipd_pkg_name>/$script_name`. If the package has |
| shared resources (like `.vpython3` files or helper scripts) which are outside of |
| the package directory, you would need to create a symbolic link for it. See |
| chromium.googlesource.com/infra/infra/+/main/3pp/cpython_common/ssl_suffix.py as |
| an example. |
| |
| ##### Package |
| |
| Once the build stage is complete, all files in the $PREFIX folder passed to the |
| install script will be zipped into a CIPD package. |
| |
| It is strongly recommended that if your package is a library or tool with many |
| files that it be packaged in the standard POSIXey PREFIX format (e.g. bin, lib, |
| include, etc.). If your package is a collection of one or more standalone |
| binaries, it's permissible to just have the binaries in the root of the output |
| $PREFIX. |
| |
| If the build stage is skipped (i.e. the build message is omitted) then the |
| output of the source stage will be packaged instead (this is mostly useful when |
| using a 'script' source). |
| |
| ##### Verify |
| |
| After the package is built it can be optionally tested. The recipe will run your |
| test script in an empty directory with the path to the |
| packaged-but-not-yet-uploaded cipd package file and it can do whatever testing |
| it needs to it (exiting non-zero if something is wrong). You can use the `cipd |
| pkg-deploy` command to deploy it (or whatever cipd commands you like, though |
| I wouldn't recommend uploading it to CIPD, as the 3pp recipe will do that after |
| the test exits 0). |
| |
| Additionally, vpython3 for the tool platform will be guaranteed to be in $PATH. |
| |
| ##### Upload |
| |
| Once the test comes back positive, the CIPD package will be uploaded to the CIPD |
| server and registered with the prefix indicated in the upload message. The full |
| CIPD package name is constructed as: |
| |
| <prefix>/<pkg_name>/${platform} |
| |
| So for example with the prefix `infra`, the `bzip2` package on linux-amd64 would |
| be uploaded to `infra/bzip2/linux-amd64` and tagged with the version that was |
| built (e.g. `version:1.2.3.patch_version1`). |
| |
| You can also mark the upload as a `universal` package, which will: |
| * Omit the `${platform}` suffix from the upload name |
| * Only build the package on the `linux-amd64' platform. This was chosen |
| to ensure that "universal" packages build consistently. |
| |
| #### Versions |
| |
| Every package will try to build the latest identifiable semver of its source, or |
| will attempt to build the semver requested as an input property to the |
| `3pp` recipe. This semver is also used to tag the uploaded artifacts in CIPD. |
| |
| Because some of the packages here are used as dependencies for others (e.g. |
| curl and zlib are dependencies of git, and zlib is a dependency of curl), each |
| package used as a dependency for others should specify its version explicitly |
| (currently this is only possible to do with the 'cipd' source type). So e.g. |
| zlib and curl specify their source versions, but git and python float at 'head', |
| always building the latest tagged version fetched from git. |
| |
| When building a floating package (e.g. python, git) you may explicitly |
| state the symver that you wish to build as part of the recipe invocation. |
| |
| The symver of a package (either specified in the package definition, in the |
| recipe properties or discovered while fetching its source code (e.g. latest git |
| tag)) is also used to tag the package when it's uploaded to CIPD (plus the |
| patch_version in the source message). |
| |
| #### Cross Compilation |
| |
| Third party packages are currently compiled on linux using the |
| 'infra.tools.dockerbuild' tool from the infra.git repo. This uses a slightly |
| modified version of the [dockcross] Docker cross-compile environment. Windows |
| and OS X targets are built using the 'osx_sdk' and 'windows_sdk' recipe modules, |
| each of which provides a hermetic (native) build toolchain for those platforms. |
| |
| For linux, we can support all the architectures implied by dockerbuild, |
| including: |
| * linux-arm64 |
| * linux-armv6l |
| * linux-mips32 |
| * linux-mips64 |
| * linux-amd64 |
| |
| [dockcross]: https://github.com/dockcross/dockcross |
| |
| #### Dry runs / experiments |
| |
| If the recipe is run with `force_build` it will always build all packages |
| indicated. Dependencies will be built if they do not exist in CIPD. None |
| of the built packages will be uploaded to CIPD. |
| |
| The recipe must always be run with a package_prefix (by assigning to the |
| .package_prefix property on the Support3ppApi). If the recipe is run in |
| experimental mode, 'experimental/' will be prepended to this. Additionally, you |
| may specify `experimental: true` in the Create message for a package, which will |
| have the same effect when running the recipe in production (to allow adding new |
| packages or package/platform combintations experimentally). |
| |
| #### Examples |
| |
| As an example of the package definition layout in action, take a look at the |
| [3pp](/3pp) folder in this infra.git repo. |
| |
| #### Caches |
| |
| This module uses the following named caches: |
| * `3pp_cipd` - Caches all downloaded and uploaded CIPD packages. Currently |
| tag lookups are performed every time against the CIPD server, but this will |
| hold the actual package files. |
| * `osx_sdk` - Cache for `depot_tools/osx_sdk`. Only on Mac. |
| * `windows_sdk` - Cache for `depot_tools/windows_sdk`. Only on Windows. |
| |
| #### **class [Support3ppApi](/recipes/recipe_modules/support_3pp/api.py#387)([RecipeApi][recipe_engine/wkt/RecipeApi]):** |
| |
| — **def [ensure\_uploaded](/recipes/recipe_modules/support_3pp/api.py#798)(self, packages=(), platform='', force_build=False, tryserver_affected_files=(), use_pkgbuild=False):** |
| |
| Executes entire {fetch,build,package,verify,upload} pipeline for all the |
| packages listed, targeting the given platform. |
| |
| Args: |
| * packages (seq[str]) - A sequence of packages to ensure are |
| uploaded. Packages must be listed as either 'pkgname' or |
| 'pkgname@version'. If empty, builds all loaded packages. |
| * platform (str) - If specified, the CIPD ${platform} to build for. |
| If unspecified, this will be the appropriate CIPD ${platform} for the |
| current host machine. |
| * force_build (bool) - If True, all applicable packages and their |
| dependencies will be built, regardless of the presence in CIPD. |
| The source and built packages will not be uploaded to CIPD. |
| * tryserver_affected_files (seq[Path]) - If given, run in tryserver mode |
| where the specified files (which must correspond to paths that were |
| passed to load_packages_from_path) have been modified in the CL. All |
| affected packages, and any that depend on them (recursively) are built. |
| If any files are modified which cannot be mapped to a specific package, |
| all packages are rebuilt. Overrides 'packages', and forces |
| force_build=True (packages are never uploaded in this mode). |
| * use_pkgbuild (bool) - If True, use the experimental pkgbuild to build |
| 3pp packages and skip the rest of the 3pp recipe. This will not upload |
| packages in any case. |
| |
| Returns (list[(cipd_pkg, cipd_version)], set[str]) of built CIPD packages |
| and their tagged versions, as well as a list of unsupported packages. |
| |
| — **def [initialize](/recipes/recipe_modules/support_3pp/api.py#421)(self):** |
| |
| — **def [load\_packages\_from\_path](/recipes/recipe_modules/support_3pp/api.py#619)(self, base_path, glob_pattern='\*\*/3pp.pb', check_dup=True):** |
| |
| Loads all package definitions from the given base_path and glob pattern |
| inside the git repository. |
| |
| To include package definitions across multiple git repository or git |
| submodules, load_packages_from_path need to be called for each of the |
| repository. |
| |
| This will parse and intern all the 3pp.pb package definition files so that |
| packages can be identified by their cipd package name. |
| For example, if you pass: |
| |
| path/ |
| pkgname/ |
| 3pp.pb |
| install.sh |
| |
| And the file "path/pkgname/3pp.pb" has the following content: |
| |
| upload { pkg_prefix: "my_pkg_prefix" } |
| |
| Its cipd package name will be "my_pkg_prefix/pkgname". |
| |
| Args: |
| * base_path (Path) - A path of a directory where the glob_pattern will be |
| applied to. |
| * glob_pattern (str) - A glob pattern to look for package definition files |
| "3pp.pb" whose behavior is defined by 3pp.proto. Default to "**/3pp.pb". |
| * check_dup (bool): When set, it will raise DuplicatePackage error if |
| a package spec is already loaded. Default to True. |
| |
| Returns a set(str) containing the cipd package names of the packages which |
| were loaded. |
| |
| Raises a DuplicatePackage exception if this function encounters a cipd |
| package name which is already registered. This could occur if you call |
| load_packages_from_path multiple times, and one of the later calls tries to |
| load a package which was registered under one of the earlier calls. |
| |
| — **def [package\_prefix](/recipes/recipe_modules/support_3pp/api.py#426)(self, experimental=False):** |
| |
| Returns the CIPD package name prefix (str), if any is set. |
| |
| This will prepend 'experimental/' to the currently set prefix if: |
| * The recipe is running in experimental mode; OR |
| * You pass experimental=True |
| |
| — **def [set\_experimental](/recipes/recipe_modules/support_3pp/api.py#454)(self, experimental):** |
| |
| Set the experimental mode (bool). |
| |
| — **def [set\_package\_prefix](/recipes/recipe_modules/support_3pp/api.py#439)(self, prefix):** |
| |
| Set the CIPD package name prefix (str). |
| |
| All CIPDSpecs for built packages (not sources) will have this string |
| prepended to them. |
| |
| — **def [set\_source\_cache\_prefix](/recipes/recipe_modules/support_3pp/api.py#448)(self, prefix):** |
| |
| Set the CIPD namespace (str) to store the source of the packages. |
| ### *recipe_modules* / [windows\_adk](/recipes/recipe_modules/windows_adk) |
| |
| [DEPS](/recipes/recipe_modules/windows_adk/__init__.py#5): [powershell](#recipe_modules-powershell), [recipe\_engine/cipd][recipe_engine/recipe_modules/cipd], [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/step][recipe_engine/recipe_modules/step] |
| |
| |
| #### **class [WindowsADKApi](/recipes/recipe_modules/windows_adk/api.py#15)([RecipeApi][recipe_engine/wkt/RecipeApi]):** |
| |
| API for using Windows ADK distributed via CIPD. |
| |
| — **def [cleanup](/recipes/recipe_modules/windows_adk/api.py#115)(self):** |
| |
| Remove the ADK and WinPE. |
| |
| — **def [cleanup\_win\_adk](/recipes/recipe_modules/windows_adk/api.py#83)(self):** |
| |
| Cleanup the Windows ADK. |
| |
| — **def [cleanup\_winpe](/recipes/recipe_modules/windows_adk/api.py#99)(self):** |
| |
| Cleanup WinPE. |
| |
| — **def [ensure](/recipes/recipe_modules/windows_adk/api.py#26)(self, install=True):** |
| |
| Ensure the presence of the Windows ADK. |
| |
| — **def [ensure\_win\_adk](/recipes/recipe_modules/windows_adk/api.py#42)(self, refs):** |
| |
| Downloads & Installs the Windows ADK. |
| |
| — **def [ensure\_win\_adk\_winpe](/recipes/recipe_modules/windows_adk/api.py#63)(self, refs):** |
| |
| Ensures that the WinPE add-on is available. |
| ### *recipe_modules* / [windows\_scripts\_executor](/recipes/recipe_modules/windows_scripts_executor) |
| |
| [DEPS](/recipes/recipe_modules/windows_scripts_executor/__init__.py#6): [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/gitiles][depot_tools/recipe_modules/gitiles], [depot\_tools/gsutil][depot_tools/recipe_modules/gsutil], [powershell](#recipe_modules-powershell), [qemu](#recipe_modules-qemu), [recipe\_engine/archive][recipe_engine/recipe_modules/archive], [recipe\_engine/buildbucket][recipe_engine/recipe_modules/buildbucket], [recipe\_engine/cipd][recipe_engine/recipe_modules/cipd], [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/raw\_io][recipe_engine/recipe_modules/raw_io], [recipe\_engine/step][recipe_engine/recipe_modules/step] |
| |
| |
| #### **class [WindowsPSExecutorAPI](/recipes/recipe_modules/windows_scripts_executor/api.py#28)([RecipeApi][recipe_engine/wkt/RecipeApi]):** |
| |
| API for using Windows PowerShell scripts. |
| |
| — **def [download\_all\_packages](/recipes/recipe_modules/windows_scripts_executor/api.py#308)(self, custs):** |
| |
| download_all_packages downloads all the packages referenced by given |
| custs. |
| |
| Args: |
| * custs: List of Customizations object from customizations.py |
| |
| — **def [execute\_customizations](/recipes/recipe_modules/windows_scripts_executor/api.py#319)(self, custs):** |
| |
| Executes the windows image builder user config. |
| |
| Args: |
| * custs: List of Customizations object from customizations.py |
| |
| — **def [filter\_executable\_customizations](/recipes/recipe_modules/windows_scripts_executor/api.py#295)(self, customizations):** |
| |
| filter_executable_customizations generates a list of customizations |
| that need to be executed. |
| |
| Args: |
| * customizations: List of Customizations object from customizations.py |
| |
| — **def [gen\_canonical\_configs](/recipes/recipe_modules/windows_scripts_executor/api.py#186)(self, customizations):** |
| |
| gen_canonical_configs strips all the names in the config and returns |
| individual configs containing one customization per image. |
| |
| Example: |
| Given an Image |
| |
| Image{ |
| arch: x86, |
| name: "windows10_x86_GCE", |
| customizations: [ |
| Customization{ |
| OfflineWinPECustomization{ |
| name: "winpe_networking" |
| image_dest: GCSSrc{ |
| bucket: "chrome-win-wim" |
| source: "rel/win10_networking.wim" |
| } |
| ... |
| } |
| }, |
| Customization{ |
| OfflineWinPECustomization{ |
| name: "winpe_diskpart" |
| image_src: Src{ |
| gcs_src: GCSSrc{ |
| bucket: "chrome-win-wim" |
| source: "rel/win10_networking.wim" |
| } |
| } |
| ... |
| } |
| } |
| ] |
| } |
| |
| Writes two configs: windows10_x86_GCE-winpe_networking.cfg with |
| |
| Image{ |
| arch: x86, |
| name: "", |
| customizations: [ |
| Customization{ |
| OfflineWinPECustomization{ |
| name: "" |
| image_dest: GCSSrc{ |
| bucket: "chrome-win-wim" |
| source: "rel/win10_networking.wim" |
| } |
| ... |
| } |
| } |
| ] |
| } |
| |
| and windows10_x86_GCE-winpe_diskpart.cfg with |
| |
| Image{ |
| arch: x86, |
| name: "", |
| customizations: [ |
| Customization{ |
| OfflineWinPECustomization{ |
| name: "" |
| image_src: Src{ |
| gcs_src: GCSSrc{ |
| bucket: "chrome-win-wim" |
| source: "rel/win10_networking.wim" |
| } |
| } |
| ... |
| } |
| } |
| ] |
| } |
| |
| to disk, calculates the hash for each config and sets the key for each |
| of them. The strings representing name of the image, customization,... |
| etc,. are set to empty before calculating the hash to maintain the |
| uniqueness of the hash. |
| |
| Args: |
| * customizations: List of Customizations object from customizations.py |
| |
| — **def [gen\_executable\_configs](/recipes/recipe_modules/windows_scripts_executor/api.py#354)(self, custs):** |
| |
| gen_executable_configs generates wib.Image configs that can be executed. |
| |
| Given a list of custs that can be run on a builder. Generates wib.Image |
| proto configs making sure that they can be executed independently. Some |
| customizations are dependent on others for inputs and can only be executed |
| if the dependent input is generated in the same wib.Image proto or is |
| already available. |
| |
| Args: |
| * custs: list of customization objects from customizations.py that can be |
| executed on the same builder |
| |
| Returns a list of tuples containing config and set of customization hash |
| that can be executed at the time |
| |
| — **def [get\_executable\_configs](/recipes/recipe_modules/windows_scripts_executor/api.py#329)(self, custs):** |
| |
| get_executable_configs returns a list of images that can be executed at |
| this time. |
| |
| image is generated after determining what customizations can be executed as |
| part of the image. A list of keys representing the customizations to be |
| executed are also returned with the image. |
| |
| Args: |
| * custs: List of customizations to be processed. |
| Returns a dict mapping builder name to the image-key_list tuple |
| |
| — **def [init](/recipes/recipe_modules/windows_scripts_executor/api.py#47)(self, try_job=False):** |
| |
| init initializes all the dirs and sub modules required. |
| |
| — **def [init\_customizations](/recipes/recipe_modules/windows_scripts_executor/api.py#56)(self, config):** |
| |
| init_customizations initializes the given config and returns |
| list of customizations |
| |
| Args: |
| * config: wib.Image proto config |
| |
| — **def [pin\_customizations](/recipes/recipe_modules/windows_scripts_executor/api.py#155)(self, customizations, ctx):** |
| |
| pin_customizations pins all the sources in the customizations |
| |
| Args: |
| * customizations: List of Customizations object from customizations.py |
| * ctx: dict containing the context for the customization |
| |
| — **def [process\_customizations](/recipes/recipe_modules/windows_scripts_executor/api.py#111)(self, custs, ctx, inputs=()):** |
| |
| process_customizations pins all the volatile srcs and generates |
| canonnical configs. |
| |
| Args: |
| * custs: List of customizations from customization.py |
| * ctx: dict containing the context for the customization |
| * inputs: List of inputs that are required |
| |
| Returns list of customizations in order that they were processed |
| |
| — **def [trim\_uploads](/recipes/recipe_modules/windows_scripts_executor/api.py#166)(self, customizations):** |
| |
| trim_uploads removes the user specified uploads from a config. |
| |
| |
| — **def [update\_context](/recipes/recipe_modules/windows_scripts_executor/api.py#172)(self, custs, ctx):** |
| |
| update_context returns an updated dict with all the contexts |
| updated |
| |
| Args: |
| * custs: List of customizations from customization.py |
| * ctx: Current context |
| |
| Returns updated context dict |
| ### *recipe_modules* / [windows\_sdk](/recipes/recipe_modules/windows_sdk) |
| |
| [DEPS](/recipes/recipe_modules/windows_sdk/__init__.py#7): [recipe\_engine/cipd][recipe_engine/recipe_modules/cipd], [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/step][recipe_engine/recipe_modules/step] |
| |
| |
| #### **class [WindowsSDKApi](/recipes/recipe_modules/windows_sdk/api.py#10)([RecipeApi][recipe_engine/wkt/RecipeApi]):** |
| |
| API for using Windows SDK distributed via CIPD. |
| |
|   **@contextmanager**<br>— **def [\_\_call\_\_](/recipes/recipe_modules/windows_sdk/api.py#18)(self, path=None, version=None, enabled=True):** |
| |
| Setups the SDK environment when enabled. |
| |
| Args: |
| path (path): Path to a directory where to install the SDK |
| (default is '[start_dir]/cipd/windows_sdk') |
| version (str): CIPD instance ID, tag or ref of the SDK |
| (default is set via $infra/windows_sdk.version property) |
| enabled (bool): Whether the SDK should be used or not. |
| |
| Raises: |
| StepFailure or InfraFailure. |
| ### *recipe_modules* / [zip](/recipes/recipe_modules/zip) |
| |
| [DEPS](/recipes/recipe_modules/zip/__init__.py#7): [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/raw\_io][recipe_engine/recipe_modules/raw_io], [recipe\_engine/step][recipe_engine/recipe_modules/step] |
| |
| |
| #### **class [ZipApi](/recipes/recipe_modules/zip/api.py#8)([RecipeApi][recipe_engine/wkt/RecipeApi]):** |
| |
| Provides steps to zip and unzip files. |
| |
| — **def [directory](/recipes/recipe_modules/zip/api.py#50)(self, step_name, directory, output, comment=None):** |
| |
| Step to compress a single directory. |
| |
| Args: |
| step_name: display name of the step. |
| directory: path to a directory to compress, it would become the root of |
| an archive, i.e. |directory|/file.txt would be named 'file.txt' in |
| the archive. |
| output: path to a zip file to create. |
| comment: the archive comment to set on the created ZIP file. |
| |
| — **def [get\_comment](/recipes/recipe_modules/zip/api.py#93)(self, step_name, zip_file):** |
| |
| Returns the archive comment from |zip_file|. |
| |
| Args: |
| step_name: display name of a step. |
| zip_file: path to a zip file to read, should exist. |
| |
| — **def [make\_package](/recipes/recipe_modules/zip/api.py#11)(self, root, output):** |
| |
| Returns ZipPackage object that can be used to compress a set of files. |
| |
| Usage: |
| pkg = api.zip.make_package(root, output) |
| pkg.add_file(root / 'file') |
| pkg.add_directory(root / 'directory') |
| yield pkg.zip('zipping step') |
| |
| Args: |
| root: a directory that would become root of a package, all files added to |
| an archive will have archive paths relative to this directory. |
| output: path to a zip file to create. |
| |
| Returns: |
| ZipPackage object. |
| |
| — **def [unzip](/recipes/recipe_modules/zip/api.py#67)(self, step_name, zip_file, output, quiet=False):** |
| |
| Step to uncompress |zip_file| into |output| directory. |
| |
| Zip package will be unpacked to |output| so that root of an archive is in |
| |output|, i.e. archive.zip/file.txt will become |output|/file.txt. |
| |
| Step will FAIL if |output| already exists. |
| |
| Args: |
| step_name: display name of a step. |
| zip_file: path to a zip file to uncompress, should exist. |
| output: path to a directory to unpack to, it should NOT exist. |
| quiet (bool): If True, print terse output instead of the name |
| of each unzipped file. |
| |
| — **def [update\_package](/recipes/recipe_modules/zip/api.py#30)(self, root, output):** |
| |
| Returns ZipPackage object that can be used to update an existing package. |
| |
| Usage: |
| pkg = api.zip.update_package(root, output) |
| pkg.add_file(root / 'file') |
| pkg.add_directory(root / 'directory') |
| yield pkg.zip('updating zip step') |
| |
| Args: |
| root: the root directory for adding new files/dirs to the package; all |
| files/dirs added to an archive will have archive paths relative to |
| this directory. |
| output: path to a zip file to update. |
| |
| Returns: |
| ZipPackage object. |
| ## Recipes |
| |
| ### *recipes* / [3pp](/recipes/recipes/3pp.py) |
| |
| [DEPS](/recipes/recipes/3pp.py#18): [depot\_tools/git][depot_tools/recipe_modules/git], [depot\_tools/tryserver][depot_tools/recipe_modules/tryserver], [support\_3pp](#recipe_modules-support_3pp), [recipe\_engine/bcid\_reporter][recipe_engine/recipe_modules/bcid_reporter], [recipe\_engine/buildbucket][recipe_engine/recipe_modules/buildbucket], [recipe\_engine/cipd][recipe_engine/recipe_modules/cipd], [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/raw\_io][recipe_engine/recipe_modules/raw_io], [recipe\_engine/runtime][recipe_engine/recipe_modules/runtime], [recipe\_engine/step][recipe_engine/recipe_modules/step] |
| |
| |
| This recipe builds and packages third party software, such as Git. |
| |
| — **def [RunSteps](/recipes/recipes/3pp.py#98)(api, package_locations, to_build, platform, force_build, package_prefix, source_cache_prefix, use_pkgbuild):** |
| ### *recipes* / [build\_from\_tarball](/recipes/recipes/build_from_tarball.py) |
| |
| [DEPS](/recipes/recipes/build_from_tarball.py#9): [depot\_tools/gsutil][depot_tools/recipe_modules/gsutil], [recipe\_engine/cipd][recipe_engine/recipe_modules/cipd], [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/step][recipe_engine/recipe_modules/step] |
| |
| |
| — **def [RunSteps](/recipes/recipes/build_from_tarball.py#21)(api):** |
| ### *recipes* / [build\_wheels](/recipes/recipes/build_wheels.py) |
| |
| [DEPS](/recipes/recipes/build_wheels.py#17): [depot\_tools/gclient][depot_tools/recipe_modules/gclient], [depot\_tools/git][depot_tools/recipe_modules/git], [depot\_tools/osx\_sdk][depot_tools/recipe_modules/osx_sdk], [depot\_tools/tryserver][depot_tools/recipe_modules/tryserver], [depot\_tools/windows\_sdk][depot_tools/recipe_modules/windows_sdk], [recipe\_engine/buildbucket][recipe_engine/recipe_modules/buildbucket], [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/raw\_io][recipe_engine/recipe_modules/raw_io], [recipe\_engine/step][recipe_engine/recipe_modules/step] |
| |
| |
|   **@contextmanager**<br>— **def [PlatformSdk](/recipes/recipes/build_wheels.py#176)(api, platforms):** |
| |
| — **def [RunSteps](/recipes/recipes/build_wheels.py#60)(api, platforms, dry_run, rebuild):** |
| ### *recipes* / [buildenv:examples/simple](/recipes/recipe_modules/buildenv/examples/simple.py) |
| |
| [DEPS](/recipes/recipe_modules/buildenv/examples/simple.py#7): [buildenv](#recipe_modules-buildenv), [recipe\_engine/path][recipe_engine/recipe_modules/path], [recipe\_engine/step][recipe_engine/recipe_modules/step] |
| |
| |
| — **def [RunSteps](/recipes/recipe_modules/buildenv/examples/simple.py#14)(api):** |
| ### *recipes* / [chromium\_bootstrap/test](/recipes/recipes/chromium_bootstrap/test.py) |
| |
| |
| This recipe verifies importing of chromium bootstrap protos. |
| |
| The protos are exported via a symlink in |
| //recipe/recipe_proto/infra/chromium. |
| |
| — **def [RunSteps](/recipes/recipes/chromium_bootstrap/test.py#16)(api):** |
| ### *recipes* / [cloudbuildhelper:examples/discover](/recipes/recipe_modules/cloudbuildhelper/examples/discover.py) |
| |
| [DEPS](/recipes/recipe_modules/cloudbuildhelper/examples/discover.py#7): [cloudbuildhelper](#recipe_modules-cloudbuildhelper), [recipe\_engine/path][recipe_engine/recipe_modules/path] |
| |
| |
| — **def [RunSteps](/recipes/recipe_modules/cloudbuildhelper/examples/discover.py#13)(api):** |
| ### *recipes* / [cloudbuildhelper:examples/full](/recipes/recipe_modules/cloudbuildhelper/examples/full.py) |
| |
| [DEPS](/recipes/recipe_modules/cloudbuildhelper/examples/full.py#7): [cloudbuildhelper](#recipe_modules-cloudbuildhelper), [recipe\_engine/json][recipe_engine/recipe_modules/json], [recipe\_engine/path][recipe_engine/recipe_modules/path], [recipe\_engine/step][recipe_engine/recipe_modules/step] |
| |
| |
| — **def [RunSteps](/recipes/recipe_modules/cloudbuildhelper/examples/full.py#15)(api):** |
| |
| — **def [build](/recipes/recipe_modules/cloudbuildhelper/examples/full.py#60)(api):** |
| |
| — **def [repo\_checkout\_metadata](/recipes/recipe_modules/cloudbuildhelper/examples/full.py#40)(api):** |
| |
| — **def [restrictions](/recipes/recipe_modules/cloudbuildhelper/examples/full.py#29)(api):** |
| |
| — **def [upload](/recipes/recipe_modules/cloudbuildhelper/examples/full.py#142)(api):** |
| ### *recipes* / [cloudbuildhelper:examples/roll](/recipes/recipe_modules/cloudbuildhelper/examples/roll.py) |
| |
| [DEPS](/recipes/recipe_modules/cloudbuildhelper/examples/roll.py#9): [cloudbuildhelper](#recipe_modules-cloudbuildhelper), [recipe\_engine/path][recipe_engine/recipe_modules/path], [recipe\_engine/properties][recipe_engine/recipe_modules/properties] |
| |
| |
| — **def [RunSteps](/recipes/recipe_modules/cloudbuildhelper/examples/roll.py#21)(api, commit):** |
| ### *recipes* / [cloudbuildhelper:examples/version\_label](/recipes/recipe_modules/cloudbuildhelper/examples/version_label.py) |
| |
| [DEPS](/recipes/recipe_modules/cloudbuildhelper/examples/version_label.py#7): [cloudbuildhelper](#recipe_modules-cloudbuildhelper), [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/cloudbuildhelper/examples/version_label.py#23)(api, commit_position):** |
| ### *recipes* / [cloudkms:examples/usage](/recipes/recipe_modules/cloudkms/examples/usage.py) |
| |
| [DEPS](/recipes/recipe_modules/cloudkms/examples/usage.py#7): [cloudkms](#recipe_modules-cloudkms), [recipe\_engine/path][recipe_engine/recipe_modules/path] |
| |
| |
| — **def [RunSteps](/recipes/recipe_modules/cloudkms/examples/usage.py#13)(api):** |
| ### *recipes* / [codesearch:examples/full](/recipes/recipe_modules/codesearch/examples/full.py) |
| |
| [DEPS](/recipes/recipe_modules/codesearch/examples/full.py#7): [depot\_tools/bot\_update][depot_tools/recipe_modules/bot_update], [depot\_tools/gclient][depot_tools/recipe_modules/gclient], [codesearch](#recipe_modules-codesearch), [recipe\_engine/buildbucket][recipe_engine/recipe_modules/buildbucket], [recipe\_engine/file][recipe_engine/recipe_modules/file], [recipe\_engine/path][recipe_engine/recipe_modules/path], [recipe\_engine/runtime][recipe_engine/recipe_modules/runtime], [recipe\_engine/step][recipe_engine/recipe_modules/step] |
| |
| |
| — **def [RunSteps](/recipes/recipe_modules/codesearch/examples/full.py#47)(api):** |
| ### *recipes* / [codesearch:tests/checkout\_generated\_files\_repo\_and\_sync](/recipes/recipe_modules/codesearch/tests/checkout_generated_files_repo_and_sync.py) |
| |
| [DEPS](/recipes/recipe_modules/codesearch/tests/checkout_generated_files_repo_and_sync.py#9): [depot\_tools/bot\_update][depot_tools/recipe_modules/bot_update], [depot\_tools/gclient][depot_tools/recipe_modules/gclient], [codesearch](#recipe_modules-codesearch), [recipe\_engine/properties][recipe_engine/recipe_modules/properties] |
| |
| |
| — **def [RunSteps](/recipes/recipe_modules/codesearch/tests/checkout_generated_files_repo_and_sync.py#17)(api):** |
| ### *recipes* / [codesearch:tests/clone\_and\_run\_clang\_tool](/recipes/recipe_modules/codesearch/tests/clone_and_run_clang_tool.py) |
| |
| [DEPS](/recipes/recipe_modules/codesearch/tests/clone_and_run_clang_tool.py#11): [codesearch](#recipe_modules-codesearch), [recipe\_engine/path][recipe_engine/recipe_modules/path], [recipe\_engine/properties][recipe_engine/recipe_modules/properties] |
| |
| |
| — **def [RunSteps](/recipes/recipe_modules/codesearch/tests/clone_and_run_clang_tool.py#20)(api, properties):** |
| ### *recipes* / [codesearch:tests/configs](/recipes/recipe_modules/codesearch/tests/configs.py) |
| |
| [DEPS](/recipes/recipe_modules/codesearch/tests/configs.py#7): [codesearch](#recipe_modules-codesearch), [recipe\_engine/properties][recipe_engine/recipe_modules/properties] |
| |
| |
| — **def [RunSteps](/recipes/recipe_modules/codesearch/tests/configs.py#13)(api):** |
| ### *recipes* / [codesearch:tests/create\_and\_upload\_kythe\_index\_pack](/recipes/recipe_modules/codesearch/tests/create_and_upload_kythe_index_pack.py) |
| |
| [DEPS](/recipes/recipe_modules/codesearch/tests/create_and_upload_kythe_index_pack.py#10): [depot\_tools/bot\_update][depot_tools/recipe_modules/bot_update], [depot\_tools/gclient][depot_tools/recipe_modules/gclient], [codesearch](#recipe_modules-codesearch), [recipe\_engine/properties][recipe_engine/recipe_modules/properties] |
| |
| |
| — **def [RunSteps](/recipes/recipe_modules/codesearch/tests/create_and_upload_kythe_index_pack.py#18)(api):** |
| ### *recipes* / [cv\_testing/tryjob](/recipes/recipes/cv_testing/tryjob.py) |
| |
| [DEPS](/recipes/recipes/cv_testing/tryjob.py#11): [recipe\_engine/cv][recipe_engine/recipe_modules/cv], [recipe\_engine/properties][recipe_engine/recipe_modules/properties], [recipe\_engine/step][recipe_engine/recipe_modules/step] |
| |
| |
| Recipe to test LUCI CQ/CV itself. |
| |
| — **def [RunSteps](/recipes/recipes/cv_testing/tryjob.py#20)(api, properties):** |
| ### *recipes* / [depot\_tools\_builder](/recipes/recipes/depot_tools_builder.py) |
| |
| [DEPS](/recipes/recipes/depot_tools_builder.py#9): [depot\_tools/git][depot_tools/recipe_modules/git], [depot\_tools/gsutil][depot_tools/recipe_modules/gsutil], [zip](#recipe_modules-zip), [recipe\_engine/buildbucket][recipe_engine/recipe_modules/buildbucket], [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 to build windows depot_tools bootstrap zipfile. |
| |
| — **def [RunSteps](/recipes/recipes/depot_tools_builder.py#27)(api):** |
| ### *recipes* / [docker:examples/full](/recipes/recipe_modules/docker/examples/full.py) |
| |
| [DEPS](/recipes/recipe_modules/docker/examples/full.py#10): [docker](#recipe_modules-docker), [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] |
| |
| |
| — **def [RunSteps](/recipes/recipe_modules/docker/examples/full.py#18)(api):** |
| ### *recipes* / [docker\_image\_builder](/recipes/recipes/docker_image_builder.py) |
| |
| [DEPS](/recipes/recipes/docker_image_builder.py#10): [depot\_tools/bot\_update][depot_tools/recipe_modules/bot_update], [depot\_tools/gclient][depot_tools/recipe_modules/gclient], [docker](#recipe_modules-docker), [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/raw\_io][recipe_engine/recipe_modules/raw_io], [recipe\_engine/service\_account][recipe_engine/recipe_modules/service_account], [recipe\_engine/step][recipe_engine/recipe_modules/step], [recipe\_engine/time][recipe_engine/recipe_modules/time] |
| |
| |
| — **def [RunSteps](/recipes/recipes/docker_image_builder.py#36)(api, arch_type):** |
| ### *recipes* / [fleet\_systems/dhcp](/recipes/recipes/fleet_systems/dhcp.py) |
| |
| [DEPS](/recipes/recipes/fleet_systems/dhcp.py#10): [depot\_tools/bot\_update][depot_tools/recipe_modules/bot_update], [depot\_tools/gclient][depot_tools/recipe_modules/gclient], [depot\_tools/tryserver][depot_tools/recipe_modules/tryserver], [docker](#recipe_modules-docker), [recipe\_engine/buildbucket][recipe_engine/recipe_modules/buildbucket], [recipe\_engine/cipd][recipe_engine/recipe_modules/cipd], [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] |
| |
| |
| Test chrome-golo repo DHCP configs using dhcpd binaries via docker. |
| |
| — **def [RunSteps](/recipes/recipes/fleet_systems/dhcp.py#153)(api):** |
| ### *recipes* / [gae\_tarball\_uploader](/recipes/recipes/gae_tarball_uploader.py) |
| |
| [DEPS](/recipes/recipes/gae_tarball_uploader.py#16): [depot\_tools/git][depot_tools/recipe_modules/git], [buildenv](#recipe_modules-buildenv), [cloudbuildhelper](#recipe_modules-cloudbuildhelper), [infra\_checkout](#recipe_modules-infra_checkout), [recipe\_engine/buildbucket][recipe_engine/recipe_modules/buildbucket], [recipe\_engine/context][recipe_engine/recipe_modules/context], [recipe\_engine/file][recipe_engine/recipe_modules/file], [recipe\_engine/futures][recipe_engine/recipe_modules/futures], [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] |
| |
| |
| — **def [RunSteps](/recipes/recipes/gae_tarball_uploader.py#45)(api, properties):** |
| ### *recipes* / [gerrit\_hello\_world](/recipes/recipes/gerrit_hello_world.py) |
| |
| [DEPS](/recipes/recipes/gerrit_hello_world.py#11): [recipe\_engine/buildbucket][recipe_engine/recipe_modules/buildbucket], [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/step][recipe_engine/recipe_modules/step], [recipe\_engine/time][recipe_engine/recipe_modules/time] |
| |
| |
| Pushes a trivial CL to Gerrit to verify git authentication works on LUCI. |
| |
| — **def [RunSteps](/recipes/recipes/gerrit_hello_world.py#26)(api):** |
| ### *recipes* / [gerrit\_plugins](/recipes/recipes/gerrit_plugins.py) |
| |
| [DEPS](/recipes/recipes/gerrit_plugins.py#5): [depot\_tools/bot\_update][depot_tools/recipe_modules/bot_update], [depot\_tools/gclient][depot_tools/recipe_modules/gclient], [depot\_tools/gsutil][depot_tools/recipe_modules/gsutil], [zip](#recipe_modules-zip), [recipe\_engine/buildbucket][recipe_engine/recipe_modules/buildbucket], [recipe\_engine/cipd][recipe_engine/recipe_modules/cipd], [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/step][recipe_engine/recipe_modules/step] |
| |
| |
| — **def [RunSteps](/recipes/recipes/gerrit_plugins.py#58)(api):** |
| ### *recipes* / [git\_cache\_updater](/recipes/recipes/git_cache_updater.py) |
| |
| [DEPS](/recipes/recipes/git_cache_updater.py#18): [depot\_tools/depot\_tools][depot_tools/recipe_modules/depot_tools], [depot\_tools/git][depot_tools/recipe_modules/git], [recipe\_engine/buildbucket][recipe_engine/recipe_modules/buildbucket], [recipe\_engine/context][recipe_engine/recipe_modules/context], [recipe\_engine/file][recipe_engine/recipe_modules/file], [recipe\_engine/futures][recipe_engine/recipe_modules/futures], [recipe\_engine/path][recipe_engine/recipe_modules/path], [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], [recipe\_engine/url][recipe_engine/recipe_modules/url] |
| |
| |
| Updates the Git Cache zip files. |
| |
| — **def [RunSteps](/recipes/recipes/git_cache_updater.py#164)(api, inputs):** |
| ### *recipes* / [gsutil\_hello\_world](/recipes/recipes/gsutil_hello_world.py) |
| |
| [DEPS](/recipes/recipes/gsutil_hello_world.py#9): [depot\_tools/depot\_tools][depot_tools/recipe_modules/depot_tools], [depot\_tools/gsutil][depot_tools/recipe_modules/gsutil], [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/step][recipe_engine/recipe_modules/step], [recipe\_engine/time][recipe_engine/recipe_modules/time] |
| |
| |
| Pushes a trivial CL to Gerrit to verify git authentication works on LUCI. |
| |
| — **def [RunSteps](/recipes/recipes/gsutil_hello_world.py#20)(api):** |
| ### *recipes* / [images\_builder](/recipes/recipes/images_builder.py) |
| |
| [DEPS](/recipes/recipes/images_builder.py#12): [depot\_tools/gerrit][depot_tools/recipe_modules/gerrit], [depot\_tools/git][depot_tools/recipe_modules/git], [buildenv](#recipe_modules-buildenv), [cloudbuildhelper](#recipe_modules-cloudbuildhelper), [infra\_checkout](#recipe_modules-infra_checkout), [recipe\_engine/buildbucket][recipe_engine/recipe_modules/buildbucket], [recipe\_engine/futures][recipe_engine/recipe_modules/futures], [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] |
| |
| |
| — **def [RunSteps](/recipes/recipes/images_builder.py#44)(api, properties):** |
| ### *recipes* / [images\_pins\_roller](/recipes/recipes/images_pins_roller.py) |
| |
| [DEPS](/recipes/recipes/images_pins_roller.py#9): [depot\_tools/git][depot_tools/recipe_modules/git], [depot\_tools/git\_cl][depot_tools/recipe_modules/git_cl], [cloudbuildhelper](#recipe_modules-cloudbuildhelper), [infra\_checkout](#recipe_modules-infra_checkout), [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] |
| |
| |
| — **def [RunSteps](/recipes/recipes/images_pins_roller.py#26)(api, properties):** |
| ### *recipes* / [infra\_checkout:examples/ci](/recipes/recipe_modules/infra_checkout/examples/ci.py) |
| |
| [DEPS](/recipes/recipe_modules/infra_checkout/examples/ci.py#7): [infra\_checkout](#recipe_modules-infra_checkout), [recipe\_engine/buildbucket][recipe_engine/recipe_modules/buildbucket], [recipe\_engine/context][recipe_engine/recipe_modules/context], [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_checkout/examples/ci.py#18)(api):** |
| ### *recipes* / [infra\_checkout:examples/try](/recipes/recipe_modules/infra_checkout/examples/try.py) |
| |
| [DEPS](/recipes/recipe_modules/infra_checkout/examples/try.py#13): [depot\_tools/gerrit][depot_tools/recipe_modules/gerrit], [infra\_checkout](#recipe_modules-infra_checkout), [recipe\_engine/buildbucket][recipe_engine/recipe_modules/buildbucket], [recipe\_engine/file][recipe_engine/recipe_modules/file], [recipe\_engine/platform][recipe_engine/recipe_modules/platform], [recipe\_engine/raw\_io][recipe_engine/recipe_modules/raw_io] |
| |
| |
| — **def [RunSteps](/recipes/recipe_modules/infra_checkout/examples/try.py#22)(api):** |
| ### *recipes* / [infra\_cipd:examples/usage](/recipes/recipe_modules/infra_cipd/examples/usage.py) |
| |
| [DEPS](/recipes/recipe_modules/infra_cipd/examples/usage.py#11): [infra\_cipd](#recipe_modules-infra_cipd), [recipe\_engine/assertions][recipe_engine/recipe_modules/assertions], [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/step][recipe_engine/recipe_modules/step] |
| |
| |
| — **def [RunSteps](/recipes/recipe_modules/infra_cipd/examples/usage.py#24)(api):** |
| ### *recipes* / [infra\_continuous](/recipes/recipes/infra_continuous.py) |
| |
| [DEPS](/recipes/recipes/infra_continuous.py#10): [depot\_tools/bot\_update][depot_tools/recipe_modules/bot_update], [depot\_tools/depot\_tools][depot_tools/recipe_modules/depot_tools], [depot\_tools/gclient][depot_tools/recipe_modules/gclient], [depot\_tools/osx\_sdk][depot_tools/recipe_modules/osx_sdk], [infra\_checkout](#recipe_modules-infra_checkout), [infra\_cipd](#recipe_modules-infra_cipd), [recipe\_engine/buildbucket][recipe_engine/recipe_modules/buildbucket], [recipe\_engine/context][recipe_engine/recipe_modules/context], [recipe\_engine/defer][recipe_engine/recipe_modules/defer], [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/resultdb][recipe_engine/recipe_modules/resultdb], [recipe\_engine/runtime][recipe_engine/recipe_modules/runtime], [recipe\_engine/step][recipe_engine/recipe_modules/step] |
| |
| |
| — **def [RunSteps](/recipes/recipes/infra_continuous.py#185)(api):** |
| |
| — **def [build\_main](/recipes/recipes/infra_continuous.py#229)(api, checkout, buildername, project_name, repo_url, rev):** |
| |
| — **def [run\_python\_tests](/recipes/recipes/infra_continuous.py#296)(api, checkout, project_name):** |
| |
| — **def [should\_run\_python\_tests](/recipes/recipes/infra_continuous.py#177)(api, builder_name):** |
| ### *recipes* / [infra\_frontend\_tester](/recipes/recipes/infra_frontend_tester.py) |
| |
| [DEPS](/recipes/recipes/infra_frontend_tester.py#9): [depot\_tools/bot\_update][depot_tools/recipe_modules/bot_update], [depot\_tools/gclient][depot_tools/recipe_modules/gclient], [infra\_checkout](#recipe_modules-infra_checkout), [recipe\_engine/buildbucket][recipe_engine/recipe_modules/buildbucket], [recipe\_engine/cipd][recipe_engine/recipe_modules/cipd], [recipe\_engine/context][recipe_engine/recipe_modules/context], [recipe\_engine/file][recipe_engine/recipe_modules/file], [recipe\_engine/nodejs][recipe_engine/recipe_modules/nodejs], [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 [RunFrontendTests](/recipes/recipes/infra_frontend_tester.py#107)(api, cwd, app_name):** |
| |
| — **def [RunInfraFrontendTests](/recipes/recipes/infra_frontend_tester.py#80)(api, root_path):** |
| |
| This function runs the UI tests in `infra` project. |
| |
| |
| — **def [RunInfraInternalFrontendTests](/recipes/recipes/infra_frontend_tester.py#62)(api, root_path):** |
| |
| This function runs UI tests in `infra_internal` project. |
| |
| |
| — **def [RunLuciGoTests](/recipes/recipes/infra_frontend_tester.py#96)(api, root_path):** |
| |
| This function runs UI tests in the `luci-go` project. |
| |
| |
| — **def [RunSteps](/recipes/recipes/infra_frontend_tester.py#24)(api):** |
| ### *recipes* / [infra\_repo\_trybot](/recipes/recipes/infra_repo_trybot.py) |
| |
| [DEPS](/recipes/recipes/infra_repo_trybot.py#11): [depot\_tools/depot\_tools][depot_tools/recipe_modules/depot_tools], [depot\_tools/osx\_sdk][depot_tools/recipe_modules/osx_sdk], [infra\_checkout](#recipe_modules-infra_checkout), [recipe\_engine/buildbucket][recipe_engine/recipe_modules/buildbucket], [recipe\_engine/context][recipe_engine/recipe_modules/context], [recipe\_engine/defer][recipe_engine/recipe_modules/defer], [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/raw\_io][recipe_engine/recipe_modules/raw_io], [recipe\_engine/resultdb][recipe_engine/recipe_modules/resultdb], [recipe\_engine/runtime][recipe_engine/recipe_modules/runtime], [recipe\_engine/step][recipe_engine/recipe_modules/step] |
| |
| |
| — **def [RunSteps](/recipes/recipes/infra_repo_trybot.py#50)(api, go_version_variant, run_lint, skip_python_tests):** |
| |
| — **def [should\_run\_python\_tests](/recipes/recipes/infra_repo_trybot.py#46)(api):** |
| ### *recipes* / [luci\_go](/recipes/recipes/luci_go.py) |
| |
| [DEPS](/recipes/recipes/luci_go.py#11): [depot\_tools/osx\_sdk][depot_tools/recipe_modules/osx_sdk], [infra\_checkout](#recipe_modules-infra_checkout), [recipe\_engine/buildbucket][recipe_engine/recipe_modules/buildbucket], [recipe\_engine/cipd][recipe_engine/recipe_modules/cipd], [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/raw\_io][recipe_engine/recipe_modules/raw_io], [recipe\_engine/resultdb][recipe_engine/recipe_modules/resultdb], [recipe\_engine/step][recipe_engine/recipe_modules/step], [recipe\_engine/tricium][recipe_engine/recipe_modules/tricium] |
| |
| |
| — **def [RunSteps](/recipes/recipes/luci_go.py#49)(api, GOARCH, go_version_variant, run_integration_tests, run_lint):** |
| ### *recipes* / [luci\_py](/recipes/recipes/luci_py.py) |
| |
| [DEPS](/recipes/recipes/luci_py.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], [infra\_checkout](#recipe_modules-infra_checkout), [recipe\_engine/buildbucket][recipe_engine/recipe_modules/buildbucket], [recipe\_engine/cipd][recipe_engine/recipe_modules/cipd], [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/raw\_io][recipe_engine/recipe_modules/raw_io], [recipe\_engine/step][recipe_engine/recipe_modules/step] |
| |
| |
| — **def [RunSteps](/recipes/recipes/luci_py.py#27)(api):** |
| ### *recipes* / [powershell:examples/test](/recipes/recipe_modules/powershell/examples/test.py) |
| |
| [DEPS](/recipes/recipe_modules/powershell/examples/test.py#7): [powershell](#recipe_modules-powershell), [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] |
| |
| |
| — **def [RunSteps](/recipes/recipe_modules/powershell/examples/test.py#16)(api):** |
| ### *recipes* / [qemu:examples/basic](/recipes/recipe_modules/qemu/examples/basic.py) |
| |
| [DEPS](/recipes/recipe_modules/qemu/examples/basic.py#7): [qemu](#recipe_modules-qemu), [recipe\_engine/path][recipe_engine/recipe_modules/path] |
| |
| |
| — **def [RunSteps](/recipes/recipe_modules/qemu/examples/basic.py#12)(api):** |
| ### *recipes* / [qemu:examples/create\_disk](/recipes/recipe_modules/qemu/examples/create_disk.py) |
| |
| [DEPS](/recipes/recipe_modules/qemu/examples/create_disk.py#10): [qemu](#recipe_modules-qemu), [recipe\_engine/path][recipe_engine/recipe_modules/path], [recipe\_engine/raw\_io][recipe_engine/recipe_modules/raw_io] |
| |
| |
| — **def [RunSteps](/recipes/recipe_modules/qemu/examples/create_disk.py#15)(api):** |
| ### *recipes* / [qemu:examples/mount\_disk\_image](/recipes/recipe_modules/qemu/examples/mount_disk_image.py) |
| |
| [DEPS](/recipes/recipe_modules/qemu/examples/mount_disk_image.py#8): [qemu](#recipe_modules-qemu), [recipe\_engine/path][recipe_engine/recipe_modules/path], [recipe\_engine/properties][recipe_engine/recipe_modules/properties], [recipe\_engine/raw\_io][recipe_engine/recipe_modules/raw_io] |
| |
| |
| — **def [RunSteps](/recipes/recipe_modules/qemu/examples/mount_disk_image.py#19)(api, inputs):** |
| ### *recipes* / [qemu:examples/powerdown\_vm](/recipes/recipe_modules/qemu/examples/powerdown_vm.py) |
| |
| [DEPS](/recipes/recipe_modules/qemu/examples/powerdown_vm.py#8): [qemu](#recipe_modules-qemu), [recipe\_engine/json][recipe_engine/recipe_modules/json], [recipe\_engine/path][recipe_engine/recipe_modules/path], [recipe\_engine/raw\_io][recipe_engine/recipe_modules/raw_io] |
| |
| |
| — **def [RunSteps](/recipes/recipe_modules/qemu/examples/powerdown_vm.py#15)(api):** |
| ### *recipes* / [qemu:examples/quit\_vm](/recipes/recipe_modules/qemu/examples/quit_vm.py) |
| |
| [DEPS](/recipes/recipe_modules/qemu/examples/quit_vm.py#8): [qemu](#recipe_modules-qemu), [recipe\_engine/json][recipe_engine/recipe_modules/json], [recipe\_engine/path][recipe_engine/recipe_modules/path], [recipe\_engine/raw\_io][recipe_engine/recipe_modules/raw_io] |
| |
| |
| — **def [RunSteps](/recipes/recipe_modules/qemu/examples/quit_vm.py#15)(api):** |
| ### *recipes* / [qemu:examples/start\_vm](/recipes/recipe_modules/qemu/examples/start_vm.py) |
| |
| [DEPS](/recipes/recipe_modules/qemu/examples/start_vm.py#12): [qemu](#recipe_modules-qemu), [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] |
| |
| |
| — **def [RunSteps](/recipes/recipe_modules/qemu/examples/start_vm.py#22)(api, qemu_vm):** |
| ### *recipes* / [qemu:examples/status\_vm](/recipes/recipe_modules/qemu/examples/status_vm.py) |
| |
| [DEPS](/recipes/recipe_modules/qemu/examples/status_vm.py#9): [qemu](#recipe_modules-qemu), [recipe\_engine/json][recipe_engine/recipe_modules/json], [recipe\_engine/path][recipe_engine/recipe_modules/path], [recipe\_engine/raw\_io][recipe_engine/recipe_modules/raw_io] |
| |
| |
| — **def [RunSteps](/recipes/recipe_modules/qemu/examples/status_vm.py#16)(api):** |
| ### *recipes* / [recipe\_autoroller](/recipes/recipes/recipe_autoroller.py) |
| |
| [DEPS](/recipes/recipes/recipe_autoroller.py#9): [recipe\_autoroller](#recipe_modules-recipe_autoroller), [recipe\_engine/buildbucket][recipe_engine/recipe_modules/buildbucket], [recipe\_engine/json][recipe_engine/recipe_modules/json], [recipe\_engine/properties][recipe_engine/recipe_modules/properties], [recipe\_engine/proto][recipe_engine/recipe_modules/proto], [recipe\_engine/time][recipe_engine/recipe_modules/time] |
| |
| |
| Rolls recipes.cfg dependencies for public projects. |
| |
| — **def [RunSteps](/recipes/recipes/recipe_autoroller.py#26)(api, projects):** |
| ### *recipes* / [recipe\_autoroller:examples/full](/recipes/recipe_modules/recipe_autoroller/examples/full.py) |
| |
| [DEPS](/recipes/recipe_modules/recipe_autoroller/examples/full.py#9): [recipe\_autoroller](#recipe_modules-recipe_autoroller), [recipe\_engine/buildbucket][recipe_engine/recipe_modules/buildbucket], [recipe\_engine/json][recipe_engine/recipe_modules/json], [recipe\_engine/properties][recipe_engine/recipe_modules/properties], [recipe\_engine/proto][recipe_engine/recipe_modules/proto], [recipe\_engine/time][recipe_engine/recipe_modules/time] |
| |
| |
| — **def [RunSteps](/recipes/recipe_modules/recipe_autoroller/examples/full.py#30)(api, projects):** |
| ### *recipes* / [recipe\_bundler](/recipes/recipes/recipe_bundler.py) |
| |
| [DEPS](/recipes/recipes/recipe_bundler.py#10): [recipe\_engine/cipd][recipe_engine/recipe_modules/cipd], [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/recipes/recipe_bundler.py#49)(api, recipe_bundler_pkg, recipe_bundler_vers, repo_specs, repo_specs_optional, package_name_prefix, package_name_internal_prefix):** |
| ### *recipes* / [recipe\_roll\_tryjob](/recipes/recipes/recipe_roll_tryjob.py) |
| |
| [DEPS](/recipes/recipes/recipe_roll_tryjob.py#15): [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/buildbucket][recipe_engine/recipe_modules/buildbucket], [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/raw\_io][recipe_engine/recipe_modules/raw_io], [recipe\_engine/step][recipe_engine/recipe_modules/step] |
| |
| |
| — **def [RunSteps](/recipes/recipes/recipe_roll_tryjob.py#413)(api, upstream_id, upstream_url, downstream_id, downstream_url):** |
| ### *recipes* / [recipe\_simulation](/recipes/recipes/recipe_simulation.py) |
| |
| [DEPS](/recipes/recipes/recipe_simulation.py#13): [depot\_tools/bot\_update][depot_tools/recipe_modules/bot_update], [depot\_tools/gclient][depot_tools/recipe_modules/gclient], [recipe\_engine/buildbucket][recipe_engine/recipe_modules/buildbucket], [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/raw\_io][recipe_engine/recipe_modules/raw_io], [recipe\_engine/step][recipe_engine/recipe_modules/step] |
| |
| |
| A continuous builder which runs recipe tests. |
| |
| — **def [RunSteps](/recipes/recipes/recipe_simulation.py#40)(api, git_repo):** |
| ### *recipes* / [recipes\_py\_continuous](/recipes/recipes/recipes_py_continuous.py) |
| |
| [DEPS](/recipes/recipes/recipes_py_continuous.py#9): [depot\_tools/bot\_update][depot_tools/recipe_modules/bot_update], [depot\_tools/gclient][depot_tools/recipe_modules/gclient], [recipe\_engine/buildbucket][recipe_engine/recipe_modules/buildbucket], [recipe\_engine/cipd][recipe_engine/recipe_modules/cipd], [recipe\_engine/path][recipe_engine/recipe_modules/path], [recipe\_engine/properties][recipe_engine/recipe_modules/properties] |
| |
| |
| — **def [RunSteps](/recipes/recipes/recipes_py_continuous.py#19)(api):** |
| ### *recipes* / [support\_3pp:tests/full](/recipes/recipe_modules/support_3pp/tests/full.py) |
| |
| [DEPS](/recipes/recipe_modules/support_3pp/tests/full.py#16): [depot\_tools/tryserver][depot_tools/recipe_modules/tryserver], [support\_3pp](#recipe_modules-support_3pp), [recipe\_engine/buildbucket][recipe_engine/recipe_modules/buildbucket], [recipe\_engine/cipd][recipe_engine/recipe_modules/cipd], [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] |
| |
| |
| — **def [RunSteps](/recipes/recipe_modules/support_3pp/tests/full.py#47)(api, GOOS, GOARCH, experimental, load_dupe, package_prefix, source_cache_prefix, to_build, tryserver_affected_files, use_pkgbuild):** |
| ### *recipes* / [tricium\_infra](/recipes/recipes/tricium_infra.py) |
| |
| [DEPS](/recipes/recipes/tricium_infra.py#11): [depot\_tools/bot\_update][depot_tools/recipe_modules/bot_update], [depot\_tools/gclient][depot_tools/recipe_modules/gclient], [depot\_tools/gerrit][depot_tools/recipe_modules/gerrit], [depot\_tools/tryserver][depot_tools/recipe_modules/tryserver], [infra\_checkout](#recipe_modules-infra_checkout), [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/step][recipe_engine/recipe_modules/step], [recipe\_engine/tricium][recipe_engine/recipe_modules/tricium] |
| |
| |
| — **def [RunSteps](/recipes/recipes/tricium_infra.py#29)(api, inputs):** |
| |
| This recipe runs legacy analyzers for the infra repo. |
| ### *recipes* / [update\_submodules\_mirror](/recipes/recipes/update_submodules_mirror.py) |
| |
| [DEPS](/recipes/recipes/update_submodules_mirror.py#12): [depot\_tools/gclient][depot_tools/recipe_modules/gclient], [depot\_tools/git][depot_tools/recipe_modules/git], [depot\_tools/gitiles][depot_tools/recipe_modules/gitiles], [recipe\_engine/buildbucket][recipe_engine/recipe_modules/buildbucket], [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/raw\_io][recipe_engine/recipe_modules/raw_io], [recipe\_engine/step][recipe_engine/recipe_modules/step] |
| |
| |
| — **def [GetSubmodules](/recipes/recipes/update_submodules_mirror.py#274)(api, deps, source_checkout_name, overlays):** |
| |
| — **def [RefToRemoteRef](/recipes/recipes/update_submodules_mirror.py#268)(ref):** |
| |
| — **def [RunSteps](/recipes/recipes/update_submodules_mirror.py#84)(api, source_repo, target_repo, extra_submodules, cache_name, overlays, internal, with_tags, ref_patterns, refs_to_skip, push_to_refs_cs):** |
| ### *recipes* / [windows\_adk:examples/ensure](/recipes/recipe_modules/windows_adk/examples/ensure.py) |
| |
| [DEPS](/recipes/recipe_modules/windows_adk/examples/ensure.py#7): [windows\_adk](#recipe_modules-windows_adk), [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] |
| |
| |
| — **def [RunSteps](/recipes/recipe_modules/windows_adk/examples/ensure.py#16)(api):** |
| ### *recipes* / [windows\_image\_builder/offline](/recipes/recipes/windows_image_builder/offline.py) |
| |
| [DEPS](/recipes/recipes/windows_image_builder/offline.py#34): [depot\_tools/bot\_update][depot_tools/recipe_modules/bot_update], [depot\_tools/gclient][depot_tools/recipe_modules/gclient], [depot\_tools/gitiles][depot_tools/recipe_modules/gitiles], [depot\_tools/tryserver][depot_tools/recipe_modules/tryserver], [windows\_adk](#recipe_modules-windows_adk), [windows\_scripts\_executor](#recipe_modules-windows_scripts_executor), [recipe\_engine/buildbucket][recipe_engine/recipe_modules/buildbucket], [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/proto][recipe_engine/recipe_modules/proto], [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/recipes/windows_image_builder/offline.py#204)(api, inputs):** |
| |
| This recipe runs image builder for a given user config. |
| |
| — **def [mock\_lsdir](/recipes/recipes/windows_image_builder/offline.py#186)(path):** |
| |
| — **def [mock\_tests](/recipes/recipes/windows_image_builder/offline.py#180)(config):** |
| |
| — **def [url\_title](/recipes/recipes/windows_image_builder/offline.py#195)(build):** |
| |
| url_title is a helper function to display the customization |
| name over the build link in schedule process. |
| Returns string formatted with builder name and customization |
| ### *recipes* / [windows\_image\_builder/online\_windows\_customization](/recipes/recipes/windows_image_builder/online_windows_customization.py) |
| |
| [DEPS](/recipes/recipes/windows_image_builder/online_windows_customization.py#20): [depot\_tools/gitiles][depot_tools/recipe_modules/gitiles], [depot\_tools/tryserver][depot_tools/recipe_modules/tryserver], [windows\_adk](#recipe_modules-windows_adk), [windows\_scripts\_executor](#recipe_modules-windows_scripts_executor), [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/raw\_io][recipe_engine/recipe_modules/raw_io] |
| |
| |
| — **def [RunSteps](/recipes/recipes/windows_image_builder/online_windows_customization.py#36)(api, image):** |
| |
| This recipe executes offline_winpe_customization. |
| ### *recipes* / [windows\_image\_builder/winpe\_customization](/recipes/recipes/windows_image_builder/winpe_customization.py) |
| |
| [DEPS](/recipes/recipes/windows_image_builder/winpe_customization.py#16): [depot\_tools/gitiles][depot_tools/recipe_modules/gitiles], [depot\_tools/tryserver][depot_tools/recipe_modules/tryserver], [windows\_adk](#recipe_modules-windows_adk), [windows\_scripts\_executor](#recipe_modules-windows_scripts_executor), [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/raw\_io][recipe_engine/recipe_modules/raw_io] |
| |
| |
| — **def [RunSteps](/recipes/recipes/windows_image_builder/winpe_customization.py#32)(api, image):** |
| |
| This recipe executes offline_winpe_customization. |
| ### *recipes* / [windows\_scripts\_executor:examples/add\_windows\_driver](/recipes/recipe_modules/windows_scripts_executor/examples/add_windows_driver.py) |
| |
| [DEPS](/recipes/recipe_modules/windows_scripts_executor/examples/add_windows_driver.py#15): [windows\_scripts\_executor](#recipe_modules-windows_scripts_executor), [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] |
| |
| |
| — **def [RunSteps](/recipes/recipe_modules/windows_scripts_executor/examples/add_windows_driver.py#33)(api, config):** |
| ### *recipes* / [windows\_scripts\_executor:examples/add\_windows\_package](/recipes/recipe_modules/windows_scripts_executor/examples/add_windows_package.py) |
| |
| [DEPS](/recipes/recipe_modules/windows_scripts_executor/examples/add_windows_package.py#15): [windows\_scripts\_executor](#recipe_modules-windows_scripts_executor), [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] |
| |
| |
| — **def [RunSteps](/recipes/recipe_modules/windows_scripts_executor/examples/add_windows_package.py#33)(api, config):** |
| ### *recipes* / [windows\_scripts\_executor:examples/cipd\_test](/recipes/recipe_modules/windows_scripts_executor/examples/cipd_test.py) |
| |
| [DEPS](/recipes/recipe_modules/windows_scripts_executor/examples/cipd_test.py#16): [windows\_scripts\_executor](#recipe_modules-windows_scripts_executor), [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] |
| |
| |
| — **def [RunSteps](/recipes/recipe_modules/windows_scripts_executor/examples/cipd_test.py#34)(api, config):** |
| ### *recipes* / [windows\_scripts\_executor:examples/customization\_mode](/recipes/recipe_modules/windows_scripts_executor/examples/customization_mode.py) |
| |
| [DEPS](/recipes/recipe_modules/windows_scripts_executor/examples/customization_mode.py#10): [depot\_tools/gsutil][depot_tools/recipe_modules/gsutil], [windows\_scripts\_executor](#recipe_modules-windows_scripts_executor), [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] |
| |
| |
| — **def [RunSteps](/recipes/recipe_modules/windows_scripts_executor/examples/customization_mode.py#30)(api, config):** |
| ### *recipes* / [windows\_scripts\_executor:examples/edit\_offline\_registry\_test](/recipes/recipe_modules/windows_scripts_executor/examples/edit_offline_registry_test.py) |
| |
| [DEPS](/recipes/recipe_modules/windows_scripts_executor/examples/edit_offline_registry_test.py#12): [windows\_scripts\_executor](#recipe_modules-windows_scripts_executor), [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] |
| |
| |
| — **def [RunSteps](/recipes/recipe_modules/windows_scripts_executor/examples/edit_offline_registry_test.py#31)(api, config):** |
| ### *recipes* / [windows\_scripts\_executor:examples/execute\_online\_customization](/recipes/recipe_modules/windows_scripts_executor/examples/execute_online_customization.py) |
| |
| [DEPS](/recipes/recipe_modules/windows_scripts_executor/examples/execute_online_customization.py#19): [depot\_tools/gsutil][depot_tools/recipe_modules/gsutil], [windows\_scripts\_executor](#recipe_modules-windows_scripts_executor), [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] |
| |
| |
| — **def [RunSteps](/recipes/recipe_modules/windows_scripts_executor/examples/execute_online_customization.py#34)(api, config):** |
| ### *recipes* / [windows\_scripts\_executor:examples/gcs\_test](/recipes/recipe_modules/windows_scripts_executor/examples/gcs_test.py) |
| |
| [DEPS](/recipes/recipe_modules/windows_scripts_executor/examples/gcs_test.py#17): [depot\_tools/gsutil][depot_tools/recipe_modules/gsutil], [windows\_scripts\_executor](#recipe_modules-windows_scripts_executor), [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] |
| |
| |
| — **def [RunSteps](/recipes/recipe_modules/windows_scripts_executor/examples/gcs_test.py#36)(api, config):** |
| ### *recipes* / [windows\_scripts\_executor:examples/get\_executable\_configs](/recipes/recipe_modules/windows_scripts_executor/examples/get_executable_configs.py) |
| |
| [DEPS](/recipes/recipe_modules/windows_scripts_executor/examples/get_executable_configs.py#27): [depot\_tools/bot\_update][depot_tools/recipe_modules/bot_update], [depot\_tools/gclient][depot_tools/recipe_modules/gclient], [windows\_adk](#recipe_modules-windows_adk), [windows\_scripts\_executor](#recipe_modules-windows_scripts_executor), [recipe\_engine/buildbucket][recipe_engine/recipe_modules/buildbucket], [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/proto][recipe_engine/recipe_modules/proto], [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/windows_scripts_executor/examples/get_executable_configs.py#201)(api, config):** |
| |
| — **def [lsdir](/recipes/recipe_modules/windows_scripts_executor/examples/get_executable_configs.py#194)(path):** |
| |
| — **def [tests](/recipes/recipe_modules/windows_scripts_executor/examples/get_executable_configs.py#190)(config):** |
| ### *recipes* / [windows\_scripts\_executor:examples/git\_test](/recipes/recipe_modules/windows_scripts_executor/examples/git_test.py) |
| |
| [DEPS](/recipes/recipe_modules/windows_scripts_executor/examples/git_test.py#16): [depot\_tools/gitiles][depot_tools/recipe_modules/gitiles], [windows\_scripts\_executor](#recipe_modules-windows_scripts_executor), [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] |
| |
| |
| — **def [RunSteps](/recipes/recipe_modules/windows_scripts_executor/examples/git_test.py#36)(api, config):** |
| ### *recipes* / [windows\_scripts\_executor:examples/online\_windows\_customization](/recipes/recipe_modules/windows_scripts_executor/examples/online_windows_customization.py) |
| |
| [DEPS](/recipes/recipe_modules/windows_scripts_executor/examples/online_windows_customization.py#16): [depot\_tools/gitiles][depot_tools/recipe_modules/gitiles], [windows\_scripts\_executor](#recipe_modules-windows_scripts_executor), [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] |
| |
| |
| — **def [RunSteps](/recipes/recipe_modules/windows_scripts_executor/examples/online_windows_customization.py#31)(api, config):** |
| ### *recipes* / [windows\_scripts\_executor:examples/powershell\_expression](/recipes/recipe_modules/windows_scripts_executor/examples/powershell_expression.py) |
| |
| [DEPS](/recipes/recipe_modules/windows_scripts_executor/examples/powershell_expression.py#19): [depot\_tools/gsutil][depot_tools/recipe_modules/gsutil], [windows\_scripts\_executor](#recipe_modules-windows_scripts_executor), [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] |
| |
| |
| — **def [RunSteps](/recipes/recipe_modules/windows_scripts_executor/examples/powershell_expression.py#34)(api, config):** |
| ### *recipes* / [windows\_scripts\_executor:examples/process\_customizations](/recipes/recipe_modules/windows_scripts_executor/examples/process_customizations.py) |
| |
| [DEPS](/recipes/recipe_modules/windows_scripts_executor/examples/process_customizations.py#13): [windows\_scripts\_executor](#recipe_modules-windows_scripts_executor), [recipe\_engine/platform][recipe_engine/recipe_modules/platform], [recipe\_engine/properties][recipe_engine/recipe_modules/properties] |
| |
| |
| — **def [RunSteps](/recipes/recipe_modules/windows_scripts_executor/examples/process_customizations.py#23)(api, config):** |
| ### *recipes* / [windows\_scripts\_executor:examples/shutdown\_vm](/recipes/recipe_modules/windows_scripts_executor/examples/shutdown_vm.py) |
| |
| [DEPS](/recipes/recipe_modules/windows_scripts_executor/examples/shutdown_vm.py#19): [depot\_tools/gsutil][depot_tools/recipe_modules/gsutil], [windows\_scripts\_executor](#recipe_modules-windows_scripts_executor), [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] |
| |
| |
| — **def [RunSteps](/recipes/recipe_modules/windows_scripts_executor/examples/shutdown_vm.py#34)(api, config):** |
| ### *recipes* / [windows\_scripts\_executor:examples/test](/recipes/recipe_modules/windows_scripts_executor/examples/test.py) |
| |
| [DEPS](/recipes/recipe_modules/windows_scripts_executor/examples/test.py#16): [depot\_tools/gitiles][depot_tools/recipe_modules/gitiles], [windows\_scripts\_executor](#recipe_modules-windows_scripts_executor), [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] |
| |
| |
| — **def [RunSteps](/recipes/recipe_modules/windows_scripts_executor/examples/test.py#37)(api, config):** |
| ### *recipes* / [windows\_scripts\_executor:examples/trim\_uploads](/recipes/recipe_modules/windows_scripts_executor/examples/trim_uploads.py) |
| |
| [DEPS](/recipes/recipe_modules/windows_scripts_executor/examples/trim_uploads.py#13): [windows\_scripts\_executor](#recipe_modules-windows_scripts_executor), [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] |
| |
| |
| — **def [RunSteps](/recipes/recipe_modules/windows_scripts_executor/examples/trim_uploads.py#24)(api, config):** |
| ### *recipes* / [windows\_scripts\_executor:examples/windows\_iso](/recipes/recipe_modules/windows_scripts_executor/examples/windows_iso.py) |
| |
| [DEPS](/recipes/recipe_modules/windows_scripts_executor/examples/windows_iso.py#19): [depot\_tools/gsutil][depot_tools/recipe_modules/gsutil], [windows\_scripts\_executor](#recipe_modules-windows_scripts_executor), [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] |
| |
| |
| — **def [RunSteps](/recipes/recipe_modules/windows_scripts_executor/examples/windows_iso.py#34)(api, config):** |
| ### *recipes* / [windows\_sdk:examples/full](/recipes/recipe_modules/windows_sdk/examples/full.py) |
| |
| [DEPS](/recipes/recipe_modules/windows_sdk/examples/full.py#7): [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#15)(api):** |
| ### *recipes* / [zip:examples/full](/recipes/recipe_modules/zip/examples/full.py) |
| |
| [DEPS](/recipes/recipe_modules/zip/examples/full.py#7): [zip](#recipe_modules-zip), [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/step][recipe_engine/recipe_modules/step] |
| |
| |
| — **def [RunSteps](/recipes/recipe_modules/zip/examples/full.py#17)(api):** |
| |
| [depot_tools/recipe_modules/bot_update]: https://chromium.googlesource.com/chromium/tools/depot_tools.git/+/66df2a3ec70d0628d47df1fdba69838a870a1303/recipes/README.recipes.md#recipe_modules-bot_update |
| [depot_tools/recipe_modules/depot_tools]: https://chromium.googlesource.com/chromium/tools/depot_tools.git/+/66df2a3ec70d0628d47df1fdba69838a870a1303/recipes/README.recipes.md#recipe_modules-depot_tools |
| [depot_tools/recipe_modules/gclient]: https://chromium.googlesource.com/chromium/tools/depot_tools.git/+/66df2a3ec70d0628d47df1fdba69838a870a1303/recipes/README.recipes.md#recipe_modules-gclient |
| [depot_tools/recipe_modules/gerrit]: https://chromium.googlesource.com/chromium/tools/depot_tools.git/+/66df2a3ec70d0628d47df1fdba69838a870a1303/recipes/README.recipes.md#recipe_modules-gerrit |
| [depot_tools/recipe_modules/git]: https://chromium.googlesource.com/chromium/tools/depot_tools.git/+/66df2a3ec70d0628d47df1fdba69838a870a1303/recipes/README.recipes.md#recipe_modules-git |
| [depot_tools/recipe_modules/git_cl]: https://chromium.googlesource.com/chromium/tools/depot_tools.git/+/66df2a3ec70d0628d47df1fdba69838a870a1303/recipes/README.recipes.md#recipe_modules-git_cl |
| [depot_tools/recipe_modules/gitiles]: https://chromium.googlesource.com/chromium/tools/depot_tools.git/+/66df2a3ec70d0628d47df1fdba69838a870a1303/recipes/README.recipes.md#recipe_modules-gitiles |
| [depot_tools/recipe_modules/gsutil]: https://chromium.googlesource.com/chromium/tools/depot_tools.git/+/66df2a3ec70d0628d47df1fdba69838a870a1303/recipes/README.recipes.md#recipe_modules-gsutil |
| [depot_tools/recipe_modules/osx_sdk]: https://chromium.googlesource.com/chromium/tools/depot_tools.git/+/66df2a3ec70d0628d47df1fdba69838a870a1303/recipes/README.recipes.md#recipe_modules-osx_sdk |
| [depot_tools/recipe_modules/presubmit]: https://chromium.googlesource.com/chromium/tools/depot_tools.git/+/66df2a3ec70d0628d47df1fdba69838a870a1303/recipes/README.recipes.md#recipe_modules-presubmit |
| [depot_tools/recipe_modules/tryserver]: https://chromium.googlesource.com/chromium/tools/depot_tools.git/+/66df2a3ec70d0628d47df1fdba69838a870a1303/recipes/README.recipes.md#recipe_modules-tryserver |
| [depot_tools/recipe_modules/windows_sdk]: https://chromium.googlesource.com/chromium/tools/depot_tools.git/+/66df2a3ec70d0628d47df1fdba69838a870a1303/recipes/README.recipes.md#recipe_modules-windows_sdk |
| [recipe_engine/recipe_modules/archive]: https://chromium.googlesource.com/infra/luci/recipes-py.git/+/e22ed0d40a479510c01a22a82790fa4eabe83c6f/README.recipes.md#recipe_modules-archive |
| [recipe_engine/recipe_modules/assertions]: https://chromium.googlesource.com/infra/luci/recipes-py.git/+/e22ed0d40a479510c01a22a82790fa4eabe83c6f/README.recipes.md#recipe_modules-assertions |
| [recipe_engine/recipe_modules/bcid_reporter]: https://chromium.googlesource.com/infra/luci/recipes-py.git/+/e22ed0d40a479510c01a22a82790fa4eabe83c6f/README.recipes.md#recipe_modules-bcid_reporter |
| [recipe_engine/recipe_modules/buildbucket]: https://chromium.googlesource.com/infra/luci/recipes-py.git/+/e22ed0d40a479510c01a22a82790fa4eabe83c6f/README.recipes.md#recipe_modules-buildbucket |
| [recipe_engine/recipe_modules/cipd]: https://chromium.googlesource.com/infra/luci/recipes-py.git/+/e22ed0d40a479510c01a22a82790fa4eabe83c6f/README.recipes.md#recipe_modules-cipd |
| [recipe_engine/recipe_modules/commit_position]: https://chromium.googlesource.com/infra/luci/recipes-py.git/+/e22ed0d40a479510c01a22a82790fa4eabe83c6f/README.recipes.md#recipe_modules-commit_position |
| [recipe_engine/recipe_modules/context]: https://chromium.googlesource.com/infra/luci/recipes-py.git/+/e22ed0d40a479510c01a22a82790fa4eabe83c6f/README.recipes.md#recipe_modules-context |
| [recipe_engine/recipe_modules/cv]: https://chromium.googlesource.com/infra/luci/recipes-py.git/+/e22ed0d40a479510c01a22a82790fa4eabe83c6f/README.recipes.md#recipe_modules-cv |
| [recipe_engine/recipe_modules/defer]: https://chromium.googlesource.com/infra/luci/recipes-py.git/+/e22ed0d40a479510c01a22a82790fa4eabe83c6f/README.recipes.md#recipe_modules-defer |
| [recipe_engine/recipe_modules/file]: https://chromium.googlesource.com/infra/luci/recipes-py.git/+/e22ed0d40a479510c01a22a82790fa4eabe83c6f/README.recipes.md#recipe_modules-file |
| [recipe_engine/recipe_modules/futures]: https://chromium.googlesource.com/infra/luci/recipes-py.git/+/e22ed0d40a479510c01a22a82790fa4eabe83c6f/README.recipes.md#recipe_modules-futures |
| [recipe_engine/recipe_modules/golang]: https://chromium.googlesource.com/infra/luci/recipes-py.git/+/e22ed0d40a479510c01a22a82790fa4eabe83c6f/README.recipes.md#recipe_modules-golang |
| [recipe_engine/recipe_modules/json]: https://chromium.googlesource.com/infra/luci/recipes-py.git/+/e22ed0d40a479510c01a22a82790fa4eabe83c6f/README.recipes.md#recipe_modules-json |
| [recipe_engine/recipe_modules/led]: https://chromium.googlesource.com/infra/luci/recipes-py.git/+/e22ed0d40a479510c01a22a82790fa4eabe83c6f/README.recipes.md#recipe_modules-led |
| [recipe_engine/recipe_modules/nodejs]: https://chromium.googlesource.com/infra/luci/recipes-py.git/+/e22ed0d40a479510c01a22a82790fa4eabe83c6f/README.recipes.md#recipe_modules-nodejs |
| [recipe_engine/recipe_modules/path]: https://chromium.googlesource.com/infra/luci/recipes-py.git/+/e22ed0d40a479510c01a22a82790fa4eabe83c6f/README.recipes.md#recipe_modules-path |
| [recipe_engine/recipe_modules/platform]: https://chromium.googlesource.com/infra/luci/recipes-py.git/+/e22ed0d40a479510c01a22a82790fa4eabe83c6f/README.recipes.md#recipe_modules-platform |
| [recipe_engine/recipe_modules/properties]: https://chromium.googlesource.com/infra/luci/recipes-py.git/+/e22ed0d40a479510c01a22a82790fa4eabe83c6f/README.recipes.md#recipe_modules-properties |
| [recipe_engine/recipe_modules/proto]: https://chromium.googlesource.com/infra/luci/recipes-py.git/+/e22ed0d40a479510c01a22a82790fa4eabe83c6f/README.recipes.md#recipe_modules-proto |
| [recipe_engine/recipe_modules/random]: https://chromium.googlesource.com/infra/luci/recipes-py.git/+/e22ed0d40a479510c01a22a82790fa4eabe83c6f/README.recipes.md#recipe_modules-random |
| [recipe_engine/recipe_modules/raw_io]: https://chromium.googlesource.com/infra/luci/recipes-py.git/+/e22ed0d40a479510c01a22a82790fa4eabe83c6f/README.recipes.md#recipe_modules-raw_io |
| [recipe_engine/recipe_modules/resultdb]: https://chromium.googlesource.com/infra/luci/recipes-py.git/+/e22ed0d40a479510c01a22a82790fa4eabe83c6f/README.recipes.md#recipe_modules-resultdb |
| [recipe_engine/recipe_modules/runtime]: https://chromium.googlesource.com/infra/luci/recipes-py.git/+/e22ed0d40a479510c01a22a82790fa4eabe83c6f/README.recipes.md#recipe_modules-runtime |
| [recipe_engine/recipe_modules/service_account]: https://chromium.googlesource.com/infra/luci/recipes-py.git/+/e22ed0d40a479510c01a22a82790fa4eabe83c6f/README.recipes.md#recipe_modules-service_account |
| [recipe_engine/recipe_modules/step]: https://chromium.googlesource.com/infra/luci/recipes-py.git/+/e22ed0d40a479510c01a22a82790fa4eabe83c6f/README.recipes.md#recipe_modules-step |
| [recipe_engine/recipe_modules/time]: https://chromium.googlesource.com/infra/luci/recipes-py.git/+/e22ed0d40a479510c01a22a82790fa4eabe83c6f/README.recipes.md#recipe_modules-time |
| [recipe_engine/recipe_modules/tricium]: https://chromium.googlesource.com/infra/luci/recipes-py.git/+/e22ed0d40a479510c01a22a82790fa4eabe83c6f/README.recipes.md#recipe_modules-tricium |
| [recipe_engine/recipe_modules/url]: https://chromium.googlesource.com/infra/luci/recipes-py.git/+/e22ed0d40a479510c01a22a82790fa4eabe83c6f/README.recipes.md#recipe_modules-url |
| [recipe_engine/wkt/RecipeApi]: https://chromium.googlesource.com/infra/luci/recipes-py.git/+/e22ed0d40a479510c01a22a82790fa4eabe83c6f/recipe_engine/recipe_api.py#433 |