A rule that copies a file to another place.
native.genrule()
is sometimes used to copy files (often wishing to rename them).
The copy_file
rule does this with a simpler interface than genrule.
This rule uses a hermetic uutils/coreutils cp
binary, no shell is required.
This fork of bazel-skylib's copy_file adds DirectoryPathInfo
support and allows multiple
copy_file
rules in the same package.
copy_file(name, src, out, is_executable, allow_symlink, kwargs)
Copies a file or directory to another location.
native.genrule()
is sometimes used to copy files (often wishing to rename them). The 'copy_file' rule does this with a simpler interface than genrule.
This rule uses a hermetic uutils/coreutils cp
binary, no shell is required.
If using this rule with source directories, it is recommended that you use the
--host_jvm_args=-DBAZEL_TRACK_SOURCE_DIRECTORIES=1
startup option so that changes
to files within source directories are detected. See
https://github.com/bazelbuild/bazel/commit/c64421bc35214f0414e4f4226cc953e8c55fa0d2
for more context.
PARAMETERS
copy_file_action(ctx, src, dst, dir_path)
Factory function that creates an action to copy a file from src to dst.
If src is a TreeArtifact, dir_path must be specified as the path within the TreeArtifact to the file to copy.
This helper is used by copy_file. It is exposed as a public API so it can be used within other rule implementations.
To use copy_file_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_file.bzl", "COPY_FILE_TOOLCHAINS")
my_rule = rule(
...,
toolchains = COPY_FILE_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