actions
Module providing functions to create actions. Access this module usingctx.actions
.
Members
args
Args actions.args()Returns an Args object that can be used to build memory-efficient command lines.
declare_directory
File actions.declare_directory(filename, *, sibling=None)Declares that the rule or aspect creates a directory with the given name, in the current package. You must create an action that generates the directory. The contents of the directory are not directly accessible from Starlark, but can be expanded in an action command with
Args.add_all()
.
Parameters
Parameter | Description |
---|---|
filename
|
required If no 'sibling' provided, path of the new directory, relative to the current package. Otherwise a base name for a file ('sibling' defines a directory). |
sibling
|
File; or None ;
default = NoneA file that lives in the same directory as the newly declared directory. The file must be in the current package. |
declare_file
File actions.declare_file(filename, *, sibling=None)Declares that the rule or aspect creates a file with the given filename. If
sibling
is not specified, the file name is relative to the package directory, otherwise the file is in the same directory as sibling
. Files cannot be created outside of the current package.Remember that in addition to declaring a file, you must separately create an action that emits the file. Creating that action will require passing the returned File
object to the action's construction function.
Note that predeclared output files do not need to be (and cannot be) declared using this function. You can obtain their File
objects from ctx.outputs
instead. See example of use.
Parameters
Parameter | Description |
---|---|
filename
|
required If no 'sibling' provided, path of the new file, relative to the current package. Otherwise a base name for a file ('sibling' determines a directory). |
sibling
|
File; or None ;
default = NoneA file that lives in the same directory as the newly created file. The file must be in the current package. |
declare_symlink
File actions.declare_symlink(filename, *, sibling=None)
Experimental. This parameter is experimental and may change at any time. Please do not depend on it. It may be enabled on an experimental basis by setting --experimental_allow_unresolved_symlinks
Declares that the rule or aspect creates a symlink with the given name in the current package. You must create an action that generates this symlink. Bazel will never dereference this symlink and will transfer it verbatim to sandboxes or remote executors.
Parameters
Parameter | Description |
---|---|
filename
|
required If no 'sibling' provided, path of the new symlink, relative to the current package. Otherwise a base name for a file ('sibling' defines a directory). |
sibling
|
File; or None ;
default = NoneA file that lives in the same directory as the newly declared symlink. |
do_nothing
None actions.do_nothing(mnemonic, inputs=[])Creates an empty action that neither executes a command nor produces any output, but that is useful for inserting 'extra actions'.
Parameters
Parameter | Description |
---|---|
mnemonic
|
required A one-word description of the action, for example, CppCompile or GoLink. |
inputs
|
sequence of Files; or depset ;
default = []List of the input files of the action. |
expand_template
None actions.expand_template(template, output, substitutions, is_executable=False)Creates a template expansion action. When the action is executed, it will generate a file based on a template. Parts of the template will be replaced using the
substitutions
dictionary, in the order the substitutions are specified. Whenever a key of the dictionary appears in the template (or a result of a previous substitution), it is replaced with the associated value. There is no special syntax for the keys. You may, for example, use curly braces to avoid conflicts (for example, {KEY}
). See example of use.
Parameters
Parameter | Description |
---|---|
template
|
required The template file, which is a UTF-8 encoded text file. |
output
|
required The output file, which is a UTF-8 encoded text file. |
substitutions
|
required Substitutions to make when expanding the template. |
is_executable
|
default = False Whether the output file should be executable. |
run
None actions.run(outputs, inputs=[], unused_inputs_list=None, executable, tools=unbound, arguments=[], mnemonic=None, progress_message=None, use_default_shell_env=False, env=None, execution_requirements=None, input_manifests=None, exec_group=None, shadowed_action=None, resource_set=None, toolchain=None)Creates an action that runs an executable. See example of use.
Parameters
Parameter | Description |
---|---|
outputs
|
sequence of Files ;
requiredList of the output files of the action. |
inputs
|
sequence of Files; or depset ;
default = []List or depset of the input files of the action. |
unused_inputs_list
|
File; or None ;
default = NoneFile containing list of inputs unused by the action. The content of this file (generally one of the outputs of the action) corresponds to the list of input files that were not used during the whole action execution. Any change in those files must not affect in any way the outputs of the action. |
executable
|
File; or string; or FilesToRunProvider ;
requiredThe executable file to be called by the action. |
tools
|
sequence; or depset ;
default = unboundList or depset of any tools needed by the action. Tools are inputs with additional runfiles that are automatically made available to the action. |
arguments
|
sequence ;
default = []Command line arguments of the action. Must be a list of strings or actions.args() objects.
|
mnemonic
|
string; or None ;
default = NoneA one-word description of the action, for example, CppCompile or GoLink. |
progress_message
|
string; or None ;
default = NoneProgress message to show to the user during the build, for example, "Compiling foo.cc to create foo.o". The message may contain %{label} , %{input} , or %{output} patterns, which are substituted with label string, first input, or output's path, respectively. Prefer to use patterns instead of static strings, because the former are more efficient.
|
use_default_shell_env
|
default = False Whether the action should use the built in shell environment or not. |
env
|
dict; or None ;
default = NoneSets the dictionary of environment variables. |
execution_requirements
|
dict; or None ;
default = NoneInformation for scheduling the action. See tags for useful keys. |
input_manifests
|
sequence; or None ;
default = None(Experimental) sets the input runfiles metadata; they are typically generated by resolve_command. |
exec_group
|
string; or None ;
default = NoneRuns the action on the given exec group's execution platform. If none, uses the target's default execution platform. |
shadowed_action
|
Action ;
default = NoneRuns the action using the given shadowed action's inputs and environment added to the action's inputs list and environment. The action environment can overwrite any of the shadowed action's environment variables. If none, uses only the action's inputs and given environment. |
resource_set
|
callable; or None ;
default = NoneA callback function that returns a resource set dictionary, used to estimate resource usage at execution time if this action is run locally. The function accepts two positional arguments: a string representing an OS name (e.g. "osx"), and an integer representing the number of inputs to the action. The returned dictionary may contain the following entries, each of which may be a float or an int:
If this parameter is set to The callback must be top-level (lambda and nested functions aren't allowed). |
toolchain
|
Label; or string; or None ;
default = NoneToolchain type of the executable or tools used in this action. The parameter must be set, so that, the action executes on the correct execution platform. It's a no-op right now, but we recommend to set it when a toolchain is used, because it will be required in the future Bazel releases. Note that the rule which creates this action needs to define this toolchain inside its 'rule()' function. When `toolchain` and `exec_group` parameters are both set, `exec_group` will be used. An error is raised in case the `exec_group` doesn't specify the same. |
run_shell
None actions.run_shell(outputs, inputs=[], tools=unbound, arguments=[], mnemonic=None, command, progress_message=None, use_default_shell_env=False, env=None, execution_requirements=None, input_manifests=None, exec_group=None, shadowed_action=None, resource_set=None, toolchain=None)Creates an action that runs a shell command. See example of use.
Parameters
Parameter | Description |
---|---|
outputs
|
sequence of Files ;
requiredList of the output files of the action. |
inputs
|
sequence of Files; or depset ;
default = []List or depset of the input files of the action. |
tools
|
sequence of Files; or depset ;
default = unboundList or depset of any tools needed by the action. Tools are inputs with additional runfiles that are automatically made available to the action. The list can contain Files or FilesToRunProvider instances. |
arguments
|
sequence ;
default = []Command line arguments of the action. Must be a list of strings or actions.args() objects.Bazel passes the elements in this attribute as arguments to the command.The command can access these arguments using shell variable substitutions such as In the case where |
mnemonic
|
string; or None ;
default = NoneA one-word description of the action, for example, CppCompile or GoLink. |
command
|
string; or sequence of strings ;
requiredShell command to execute. This may either be a string (preferred) or a sequence of strings (deprecated). If (Deprecated) If Bazel uses the same shell to execute the command as it does for genrules. |
progress_message
|
string; or None ;
default = NoneProgress message to show to the user during the build, for example, "Compiling foo.cc to create foo.o". The message may contain %{label} , %{input} , or %{output} patterns, which are substituted with label string, first input, or output's path, respectively. Prefer to use patterns instead of static strings, because the former are more efficient.
|
use_default_shell_env
|
default = False Whether the action should use the built in shell environment or not. |
env
|
dict; or None ;
default = NoneSets the dictionary of environment variables. |
execution_requirements
|
dict; or None ;
default = NoneInformation for scheduling the action. See tags for useful keys. |
input_manifests
|
sequence; or None ;
default = None(Experimental) sets the input runfiles metadata; they are typically generated by resolve_command. |
exec_group
|
string; or None ;
default = NoneRuns the action on the given exec group's execution platform. If none, uses the target's default execution platform. |
shadowed_action
|
Action ;
default = NoneRuns the action using the given shadowed action's discovered inputs added to the action's inputs list. If none, uses only the action's inputs. |
resource_set
|
callable; or None ;
default = NoneA callback function for estimating resource usage if run locally. See ctx.actions.run() .
|
toolchain
|
Label; or string; or None ;
default = NoneToolchain type of the executable or tools used in this action. The parameter must be set, so that, the action executes on the correct execution platform. It's a no-op right now, but we recommend to set it when a toolchain is used, because it will be required in the future Bazel releases. Note that the rule which creates this action needs to define this toolchain inside its 'rule()' function. When `toolchain` and `exec_group` parameters are both set, `exec_group` will be used. An error is raised in case the `exec_group` doesn't specify the same. toolchain. |
symlink
None actions.symlink(output, target_file=None, target_path=None, is_executable=False, progress_message=None)Creates an action that writes a symlink in the file system.
This function must be called with exactly one of target_file
and target_path
specified.
If target_file
is used, then output
must be declared as a regular file (such as by using declare_file()
). It will actually be created as a symlink that points to the path of target_file
.
If target_path
is used instead, then output
must be declared as a symlink (such as by using declare_symlink()
). In this case, the symlink will point to whatever the content of target_path
is. This can be used to create a dangling symlink.
Parameters
Parameter | Description |
---|---|
output
|
required The output of this action. |
target_file
|
File; or None ;
default = NoneThe File that the output symlink will point to. |
target_path
|
string; or None ;
default = None(Experimental) The exact path that the output symlink will point to. No normalization or other processing is applied. Access to this feature requires setting --experimental_allow_unresolved_symlinks .
|
is_executable
|
default = False May only be used with target_file , not target_path . If true, when the action is executed, the target_file 's path is checked to confirm that it is executable, and an error is reported if it is not. Setting is_executable to False does not mean the target is not executable, just that no verification is done.This feature does not make sense for |
progress_message
|
string; or None ;
default = NoneProgress message to show to the user during the build. |
write
None actions.write(output, content, is_executable=False)Creates a file write action. When the action is executed, it will write the given content to a file. This is used to generate files using information available in the analysis phase. If the file is large and with a lot of static content, consider using
expand_template
.
Parameters
Parameter | Description |
---|---|
output
|
required The output file. |
content
|
string; or Args ;
requiredthe contents of the file. May be a either a string or an actions.args() object.
|
is_executable
|
default = False Whether the output file should be executable. |