了解 Bazel "run" 操作的 "inputs" 参数

Understanding "inputs" parameter of Bazel "run" action

我正在编写一个使用 ctx.actions.run 的简单 Bazel 规则。不幸的是,我很难理解 run 操作的 inputs 参数。

文档说 inputs 是“动作输入文件的列表或 depset”。如果我的操作只是运行一个可执行文件并传递几个文件路径作为其参数怎么办?假设我将参数指定为 run 操作的 arguments 参数。我还需要将这些文件路径添加到 inputs 参数吗?为什么?

inputs 参数告诉 Bazel 在 Bazel 运行 执行操作时要为操作的可执行文件提供哪些文件。此参数很重要,原因如下:

  1. 它告诉 Bazel 需要执行哪些其他操作 运行 为给定操作生成输入文件。如果你有 Action1 <- Artifact <- Action2,其中 Action2 产生 Artifact,而 Action1Artifact 作为输入,Bazel 知道 运行 Action2Action1.

    之前
  2. 它告诉 Bazel 在操作沙箱中提供哪些文件。否则该操作将无法找到它的任何输入文件。

  3. 如果正在使用远程执行,它会告诉 Bazel 将哪些文件上传到远程执行工作者。否则该文件将无法在远程计算机上用于读取操作。

ctx.actions.runarguments 参数告诉 Bazel 操作的可执行文件的命令行是什么。如果您的可执行文件采用 --input--output 之类的标志,您将使用 arguments 构造一个命令行,例如 --input artifact1 --input artifact2 --output artifact3.

看这个例子:https://github.com/bazelbuild/examples/blob/master/rules/actions_run/execute.bzl