Wir erzeugen eine Reihe von Go-Quelldateien als Teil unseres Builds. Zuvor verwendeten wir einen genrule
(example here), der dazu führte, dass die generierten Dateien in bazel-genfiles/
gespeichert wurden.Wie stelle ich die Ausgabe einer benutzerdefinierten Regel in `bazel-genfiles /` anstelle von `bazel-out /`?
Wir haben kürzlich auf eine benutzerdefinierte Regel umgestellt, wie in rules_go
(https://github.com/bazelbuild/rules_go/tree/master/examples/bindata) gezeigt. Diese Änderung bedeutet, dass die Ausgangsquelldateien in bazel-bin/
statt bazel-genfiles/
gespeichert sind.
Diese Änderung der Ausgabestelle hat die Go-Integration in einige der von unseren Entwicklern verwendeten IDEs unterbrochen. Bemerkenswert ist, gocode
, die Autovervollständigung-Engine von vim-go
und VSCode verwendet, wenn in bzl
(Bazel) Lookup-Modus ausgeführt scheint zu erwarten, dass Quellen in bazel-genfiles/
, nicht bazel-bin/
, und schlägt daher fehl.
Wie ändere ich meine Regel, um die Ausgabe auf bazel-genfiles/
statt bazel-bin/
zu speichern? Meine Regel ist äquivalent zum Beispiel in rules_go
:
def _bindata_impl(ctx):
out = ctx.new_file(ctx.label.name + ".go")
ctx.action(
inputs = ctx.files.srcs,
outputs = [out],
executable = ctx.file._bindata,
arguments = [
"-o", out.path,
"-pkg", ctx.attr.package,
"-prefix", ctx.label.package,
] + [src.path for src in ctx.files.srcs],
)
return [
DefaultInfo(
files = depset([out])
)
]
bindata = rule(
_bindata_impl,
attrs = {
"srcs": attr.label_list(allow_files = True, cfg = "data"),
"package": attr.string(mandatory=True),
"_bindata": attr.label(allow_files=True, single_file=True, default=Label("@com_github_jteeuwen_go_bindata//go-bindata:go-bindata")),
},
)
ich ein Argument entweder zu ctx.new_file
oder ctx.action
erwarten würde, aber kann nichts relevant im Skylark Referenz oder ein Tutorial finden.
Vielen Dank!
Perfect, danke! – user2514169