module_ctx

Report an issue View source

The context of the module extension containing helper functions and information about pertinent tags across the dependency graph. You get a module_ctx object as an argument to the implementation function when you create a module extension.

Members

download

unknown module_ctx.download(url, output='', sha256='', executable=False, allow_fail=False, canonical_id='', auth={}, headers={}, *, integrity='', block=True)

Downloads a file to the output path for the provided url and returns a struct containing success, a flag which is true if the download completed successfully, and if successful, a hash of the file with the fields sha256 and integrity.

Parameters

Parameter Description
url string; or Iterable of strings; required
List of mirror URLs referencing the same file.
output string; or Label; or path; default is ''
path to the output file, relative to the repository directory.
sha256 string; default is ''
the expected SHA-256 hash of the file downloaded. This must match the SHA-256 hash of the file downloaded. It is a security risk to omit the SHA-256 as remote files can change. At best omitting this field will make your build non-hermetic. It is optional to make development easier but should be set before shipping.
executable bool; default is False
set the executable flag on the created file, false by default.
allow_fail bool; default is False
If set, indicate the error in the return value instead of raising an error for failed downloads
canonical_id string; default is ''
If set, restrict cache hits to those cases where the file was added to the cache with the same canonical id
auth dict; default is {}
An optional dict specifying authentication information for some of the URLs.
headers dict; default is {}
An optional dict specifying http headers for all URLs.
integrity string; default is ''
Expected checksum of the file downloaded, in Subresource Integrity format. This must match the checksum of the file downloaded. It is a security risk to omit the checksum as remote files can change. At best omitting this field will make your build non-hermetic. It is optional to make development easier but should be set before shipping.
block bool; default is True
If set to false, the call returns immediately and instead of the regular return value, it returns a token with one single method, wait(), which blocks until the download is finished and returns the usual return value or throws as usual.

download_and_extract

struct module_ctx.download_and_extract(url, output='', sha256='', type='', stripPrefix='', allow_fail=False, canonical_id='', auth={}, headers={}, *, integrity='', rename_files={})

Downloads a file to the output path for the provided url, extracts it, and returns a struct containing success, a flag which is true if the download completed successfully, and if successful, a hash of the file with the fields sha256 and integrity.

Parameters

Parameter Description
url string; or Iterable of strings; required
List of mirror URLs referencing the same file.
output string; or Label; or path; default is ''
path to the directory where the archive will be unpacked, relative to the repository directory.
sha256 string; default is ''
the expected SHA-256 hash of the file downloaded. This must match the SHA-256 hash of the file downloaded. It is a security risk to omit the SHA-256 as remote files can change. At best omitting this field will make your build non-hermetic. It is optional to make development easier but should be set before shipping. If provided, the repository cache will first be checked for a file with the given hash; a download will only be attempted if the file was not found in the cache. After a successful download, the file will be added to the cache.
type string; default is ''
the archive type of the downloaded file. By default, the archive type is determined from the file extension of the URL. If the file has no extension, you can explicitly specify either "zip", "jar", "war", "aar", "tar", "tar.gz", "tgz", "tar.xz", "txz", ".tar.zst", ".tzst", "tar.bz2", ".tbz", ".ar", or ".deb" here.
stripPrefix string; default is ''
a directory prefix to strip from the extracted files. Many archives contain a top-level directory that contains all files in the archive. Instead of needing to specify this prefix over and over in the build_file, this field can be used to strip it from extracted files.
allow_fail bool; default is False
If set, indicate the error in the return value instead of raising an error for failed downloads
canonical_id string; default is ''
If set, restrict cache hits to those cases where the file was added to the cache with the same canonical id
auth dict; default is {}
An optional dict specifying authentication information for some of the URLs.
headers dict; default is {}
An optional dict specifying http headers for all URLs.
integrity string; default is ''
Expected checksum of the file downloaded, in Subresource Integrity format. This must match the checksum of the file downloaded. It is a security risk to omit the checksum as remote files can change. At best omitting this field will make your build non-hermetic. It is optional to make development easier but should be set before shipping.
rename_files dict; default is {}
An optional dict specifying files to rename during the extraction. Archive entries with names exactly matching a key will be renamed to the value, prior to any directory prefix adjustment. This can be used to extract archives that contain non-Unicode filenames, or which have files that would extract to the same path on case-insensitive filesystems.

execute

exec_result module_ctx.execute(arguments, timeout=600, environment={}, quiet=True, working_directory="")

Executes the command given by the list of arguments. The execution time of the command is limited by timeout (in seconds, default 600 seconds). This method returns an exec_result structure containing the output of the command. The environment map can be used to override some environment variables to be passed to the process.

Parameters

Parameter Description
arguments sequence; required
List of arguments, the first element should be the path to the program to execute.
timeout int; default is 600
maximum duration of the command in seconds (default is 600 seconds).
environment dict; default is {}
force some environment variables to be set to be passed to the process.
quiet bool; default is True
If stdout and stderr should be printed to the terminal.
working_directory string; default is ""
Working directory for command execution. Can be relative to the repository root or absolute. The default is the repository root.

extension_metadata

extension_metadata module_ctx.extension_metadata(root_module_direct_deps=None, root_module_direct_dev_deps=None, reproducible=False)

Constructs an opaque object that can be returned from the module extension's implementation function to provide metadata about the repositories generated by the extension to Bazel.

Parameters

Parameter Description
root_module_direct_deps sequence of strings; or string; or None; default is None
The names of the repositories that the extension considers to be direct dependencies of the root module. If the root module imports additional repositories or does not import all of these repositories via use_repo, Bazel will print a warning when the extension is evaluated, instructing the user to run bazel mod tidy to fix the use_repo calls automatically.

If one of root_module_direct_deps and will print a warning and a fixup command when the extension is evaluated.

If one of root_module_direct_deps and root_module_direct_dev_deps is specified, the other has to be as well. The lists specified by these two parameters must be disjoint.

Exactly one of root_module_direct_deps and root_module_direct_dev_deps can be set to the special value "all", which is treated as if a list with the names of all repositories generated by the extension was specified as the value.

root_module_direct_dev_deps sequence of strings; or string; or None; default is None
The names of the repositories that the extension considers to be direct dev dependencies of the root module. If the root module imports additional repositories or does not import all of these repositories via use_repo on an extension proxy created with use_extension(..., dev_dependency = True), Bazel will print a warning when the extension is evaluated, instructing the user to run bazel mod tidy to fix the use_repo calls automatically.

If one of root_module_direct_deps and root_module_direct_dev_deps is specified, the other has to be as well. The lists specified by these two parameters must be disjoint.

Exactly one of root_module_direct_deps and root_module_direct_dev_deps can be set to the special value "all", which is treated as if a list with the names of all repositories generated by the extension was specified as the value.

reproducible bool; default is False
States that this module extension ensures complete reproducibility, thereby it should not be stored in the lockfile.

file

None module_ctx.file(path, content='', executable=True, legacy_utf8=True)

Generates a file in the repository directory with the provided content.

Parameters

Parameter Description
path string; or Label; or path; required
path of the file to create, relative to the repository directory.
content string; default is ''
the content of the file to create, empty by default.
executable bool; default is True
set the executable flag on the created file, true by default.
legacy_utf8 bool; default is True
encode file content to UTF-8, true by default. Future versions will change the default and remove this parameter.

getenv

string module_ctx.getenv(name, default=None)

Returns the value of an environment variable name as a string if exists, or default if it doesn't.

When building incrementally, any change to the value of the variable named by name will cause this repository to be re-fetched.

Parameters

Parameter Description
name string; required
name of desired environment variable
default string; or None; default is None
Default value to return if `name` is not found
May return None.

is_dev_dependency

bool module_ctx.is_dev_dependency(tag)

Returns whether the given tag was specified on the result of a use_extension call with devDependency = True.

Parameters

Parameter Description
tag bazel_module_tag; required
A tag obtained from bazel_module.tags.

modules

list module_ctx.modules

A list of all the Bazel modules in the external dependency graph that use this module extension, each of which is a bazel_module object that exposes all the tags it specified for this extension. The iteration order of this dictionary is guaranteed to be the same as breadth-first search starting from the root module.

os

repository_os module_ctx.os

A struct to access information from the system.

path

path module_ctx.path(path)

Returns a path from a string, label or path. If the path is relative, it will resolve relative to the repository directory. If the path is a label, it will resolve to the path of the corresponding file. Note that remote repositories are executed during the analysis phase and thus cannot depends on a target result (the label should point to a non-generated file). If path is a path, it will return that path as is.

Parameters

Parameter Description
path string; or Label; or path; required
string, label or path from which to create a path from

read

string module_ctx.read(path, *, watch='auto')

Reads the content of a file on the filesystem.

Parameters

Parameter Description
path string; or Label; or path; required
path of the file to read from.
watch string; default is 'auto'
whether to watch the file. Can be the string 'yes', 'no', or 'auto'. Passing 'yes' is equivalent to immediately invoking the watch() method; passing 'no' does not attempt to watch the file; passing 'auto' will only attempt to watch the file when it is legal to do so (see watch() docs for more information.

report_progress

None module_ctx.report_progress(status='')

Updates the progress status for the fetching of this repository or module extension

Parameters

Parameter Description
status string; default is ''
string describing the current status of the fetch progress

root_module_has_non_dev_dependency

bool module_ctx.root_module_has_non_dev_dependency

Whether the root module uses this extension as a non-dev dependency.

watch

None module_ctx.watch(path)

Tells Bazel to watch for changes to the given path, whether or not it exists, or whether it's a file or a directory. Any changes to the file or directory will invalidate this repository or module extension, and cause it to be refetched or re-evaluated next time.

"Changes" include changes to the contents of the file (if the path is a file); if the path was a file but is now a directory, or vice versa; and if the path starts or stops existing. Notably, this does not include changes to any files under the directory if the path is a directory. For that, use path.readdir() instead.

Note that attempting to watch paths inside the repo currently being fetched, or inside the working directory of the current module extension, will result in an error. A module extension attempting to watch a path outside the current Bazel workspace will also result in an error.

Parameters

Parameter Description
path string; or Label; or path; required
path of the file to watch.

which

path module_ctx.which(program)

Returns the path of the corresponding program or None if there is no such program in the path.

Parameters

Parameter Description
program string; required
Program to find in the path.
May return None.