我有一个Bazel项目,其中包含根目录中的python/
文件夹。此文件夹包含两个文件:压缩Bazel生成的文件进行部署
# BUILD
py_binary(
name = "foo",
srcs = ["foo.py"],
deps = ["//cc:bar"],
)
和
# foo.py
import cc.bar as bar
# This is a SWIG-wrapped C++ function that prints "hello world"
print(bar.hello_world())
的cc/
文件夹,这也是根,包括(其中包括)以下规则:
# Expose the shared object library to Python.
py_library(
name = "bar",
srcs = [":bar_swig.py"], # Generated by SWIG.
data = [":_bar.so"], # Generated by SWIG.
visibility = ["//python:__pkg__"],
)
运行bazel build //python:foo
生成bazel-bin/python/foo.runfiles/
和bazel-bin/python/foo
。我想在Bazel中写一条规则,收集这个目录和二进制文件,并将它们压缩到foo.zip
。
这是我想出了:
genrule(
name = "zip_foo",
srcs = ["//python:foo"],
outs = ["foo.zip"],
cmd = "zip [email protected] $(locations //python:foo)",
)
但是,生成的ZIP不包括foo.runfiles/
。如何编写一个能够压缩目标的所有运行时依赖关系的规则?我希望这条规则尽可能通用,我的意思是它应该处理压缩任何目标的运行时,即使目标具有复杂的依赖关系。
这很好,我在一个使用与部署环境相同的体系结构的CI管道中使用它。谢谢。 – Arthelais