bazel-lib/docs/copy_to_bin.md

3.7 KiB

A rule that copies source files to the output tree.

This rule uses a Bash command (diff) on Linux/macOS/non-Windows, and a cmd.exe command (fc.exe) on Windows (no Bash is required).

Originally authored in rules_nodejs 8b5d27400d/internal/common/copy_to_bin.bzl

copy_file_to_bin_action

copy_file_to_bin_action(ctx, file)

Factory function that creates an action to copy a file to the output tree.

File are copied to the same workspace-relative path. The resulting files is returned.

If the file passed in is already in the output tree is then it is returned without a copy action.

To use copy_file_to_bin_action in your own rules, you need to include the toolchains it uses in your rule definition. For example:

load("@aspect_bazel_lib//lib:copy_to_bin.bzl", "COPY_FILE_TO_BIN_TOOLCHAINS")

my_rule = rule(
    ...,
    toolchains = COPY_FILE_TO_BIN_TOOLCHAINS,
)

Additionally, you must ensure that the coreutils toolchain is has been registered in your WORKSPACE if you are not using bzlmod:

load("@aspect_bazel_lib//lib:repositories.bzl", "register_coreutils_toolchains")

register_coreutils_toolchains()

PARAMETERS

Name Description Default Value
ctx The rule context. none
file The file to copy. none

RETURNS

A File in the output tree.

copy_files_to_bin_actions

copy_files_to_bin_actions(ctx, files)

Factory function that creates actions to copy files to the output tree.

Files are copied to the same workspace-relative path. The resulting list of files is returned.

If a file passed in is already in the output tree is then it is added directly to the result without a copy action.

PARAMETERS

Name Description Default Value
ctx The rule context. none
files List of File objects. none

RETURNS

List of File objects in the output tree.

copy_to_bin

copy_to_bin(name, srcs, kwargs)

Copies a source file to output tree at the same workspace-relative path.

e.g. <execroot>/path/to/file -> <execroot>/bazel-out/<platform>/bin/path/to/file

If a file passed in is already in the output tree is then it is added directly to the DefaultInfo provided by the rule without a copy.

This is useful to populate the output folder with all files needed at runtime, even those which aren't outputs of a Bazel rule.

This way you can run a binary in the output folder (execroot or runfiles_root) without that program needing to rely on a runfiles helper library or be aware that files are divided between the source tree and the output tree.

PARAMETERS

Name Description Default Value
name Name of the rule. none
srcs A list of labels. File(s) to copy. none
kwargs further keyword arguments, e.g. visibility none