0

我想使用通过 workspace_status_command 传递给 bazel 的 CI 的构建号来版本构建工件。有时我想在工件名称中包含内部版本号。

有没有办法在编写宏时如何访问ctx(正如我试图使用的那样ctx.info_file)?到目前为止,我似乎能够在创建新规则时仅在新规则中访问此类信息,在这种情况下有点尴尬。

我想拥有内部版本号或类似信息是很常见的用例,所以我想知道是否有更简单的方法来访问这些信息。

4

1 回答 1

0

不,您确实需要定义一个自定义规则才能使用从workspace_status_command通过info_fileversion_file文件传递的信息,即使这样您也不能只从 Starlark 访问它的值,您可以将文件传递给您的工具(包装器)并在那里处理输入。毕竟,(构建)规则不执行任何操作,它们发出要在稍后阶段执行的操作。

不过要小心,因为如果您依赖info_file(STABLE_*条目),对文件的更改会根据它使目标无效。对于诸如 CI 内部版本号之类的东西,它通常不是您想要的,version_file而更有可能是您所追求的。您可能想要记录 id,但您通常不想仅仅因为构建 ID 已更改(这是新的 CI 运行)而重新构建内容。但是,如果您希望结果完全可重现,即使简单地包含 ID 也可能会被认为是有问题的。

拥有可变工件名称是一个全新的问题,并且有充分的理由不这样做。但通常由于提议的名称将在执行操作期间确定(version_file在您的工具中读取),因此您已经过了分析阶段来决定操作的结果。我目前知道的唯一方法(即对于变量输入的树外源,您当然可以始终load从您的BUILD文件中定义一个 Starlark 变量和它)能够做到这一点的是使用树工件(declare_directory在您的规则。

于 2019-09-21T20:06:37.017 回答