如何强制Bazel盖章所有二进制文件?

时间:2017-06-22 16:21:06

标签: go rules bazel

Bazel User Manual--stamp的文档:

  

指定--stamp不强制重建受影响的目标,如果它们的依赖关系没有改变。

是否有办法强制构建受影响的目标,以便所有输出二进制文件具有相同的标记,即使它们的依赖关系没有更改?

具体的用例是我正在构建大量相关的Go二进制文件(使用rules_go),并且我想用相同的版本号可靠地标记它们(取自最新的git)提交哈希)。我可以事先做bazel clean,但这有点违背了使用Bazel的意思:)

谢谢!

1 个答案:

答案 0 :(得分:1)

您可以将.git/refs/heads/<release branch>文件添加为数据输入吗?然后,当提交更改时,您的输入将自动更改。&#34;您可以将其包装在genrule中以添加一些检查或避免重建开发分支上的所有内容:

genrule(
    name = "stamper",
    outs = ["stamper.out"],
    srcs = [
        ".git/HEAD",
        ".git/refs/heads/master",
    ],
    cmd = """
if [[ $$(cat $(location :.git/HEAD)) = "refs: refs/heads/<release branch>" ]]; then
  cat $(location :.git/refs/heads/master)
else
  # If we're not on the release branch, don't uncache things on commit.
  echo "dev"  
fi
""",
)

a bug强制行动重新运行,如果有兴趣可以跟踪/评论。