私たちはビルドの一部としていくつかのGoソースファイルを生成しています。以前はgenrule
(example here)を使用しており、生成されたファイルはbazel-genfiles/
に格納されていました。`bazel-out /`の代わりに `bazel-genfiles /`にカスタムルールの出力を入れるには?
最近、rules_go
(https://github.com/bazelbuild/rules_go/tree/master/examples/bindata)のようにカスタムルールを使用するように切り替えました。この変更は、出力ソースファイルがbazel-genfiles/
の代わりにbazel-bin/
に格納されていることを意味します。
この出力場所の変更は、開発者が使用している一部のIDEでの統合を壊しています。特にgocode
、vim-go
とVSCodeで使用されるオートコンプリートエンジンは、bzl
(Bazel)ルックアップモードで実行するとに生成されたソースがあり、bazel-bin/
ではなく、失敗すると思われます。
bazel-bin/
ではなく出力をbazel-genfiles/
に保存するようにルールを変更するにはどうすればよいですか?私のルールは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")),
},
)
私はctx.new_file
またはctx.action
のいずれかの引数を期待するだろうが、すかいらーくのリファレンスやチュートリアルの関連する何かを見つけることができません。
多くの感謝!
パーフェクト、ありがとう! – user2514169