Ich habe ein Bazel Projekt, das ein python/
Ordner in der Wurzel enthält. Dieser Ordner enthält zwei Dateien:Zipping Bazel generierten Dateien für die Bereitstellung
# BUILD
py_binary(
name = "foo",
srcs = ["foo.py"],
deps = ["//cc:bar"],
)
und
# foo.py
import cc.bar as bar
# This is a SWIG-wrapped C++ function that prints "hello world"
print(bar.hello_world())
Der cc/
Ordner, die auch in der Wurzel ist, enthält (unter anderem) die folgende Regel:
# 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__"],
)
Lauf bazel build //python:foo
generiert bazel-bin/python/foo.runfiles/
und bazel-bin/python/foo
. Ich möchte eine Regel in Bazel schreiben, die dieses Verzeichnis und die Binärdatei sammelt und sie in foo.zip
reißt.
Dies ist, was ich kam mit:
genrule(
name = "zip_foo",
srcs = ["//python:foo"],
outs = ["foo.zip"],
cmd = "zip [email protected] $(locations //python:foo)",
)
die erzeugte Zip foo.runfiles/
nicht jedoch enthalten. Wie schreibe ich eine Regel, die alle Laufzeitabhängigkeiten eines Ziels komprimiert? Ich möchte, dass diese Regel so allgemein wie möglich ist, was bedeutet, dass sie die Laufzeit eines Ziels verarbeiten soll, selbst wenn das Ziel komplexe Abhängigkeiten hat.
Das ist in Ordnung, ich benutze diese in einer CI-Pipeline, die die gleiche Architektur wie die Implementierungsumgebung verwendet. Vielen Dank. – Arthelais