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 https://github.com/bazelbuild/rules_nodejs/blob/8b5d27400db51e7027fe95ae413eeabea4856f8e/internal/common/copy_to_bin.bzl

Macros and Functions

copy_file_to_bin_action

Helper 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.

Example usage (generated)

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

copy_file_to_bin_action(
    # The rule context.
    ctx = None,
    # The file to copy.
    file = "",
)

ctx

The rule context.

file

The file to copy.

is_windows

If true, an cmd.exe action is created so there is no bash dependency.


copy_files_to_bin_actions

Helper 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.

Example usage (generated)

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

copy_files_to_bin_actions(
    # The rule context.
    ctx = None,
    # List of File objects.
    files = None,
)

ctx

The rule context.

files

List of File objects.

is_windows

If true, an cmd.exe action is created so there is no bash dependency.


copy_to_bin

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.

Example usage (generated)

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

copy_to_bin(
    # Name of the rule.
    name = "",
    # A list of labels
    srcs = [],
)

name

Name of the rule.

srcs

A list of labels. File(s) to copy.

kwargs

further keyword arguments, e.g. visibility