В файле Starlark, который используется в Bazel, если я создаю файл с ctx.actions.declare_file()
, есть ли способ связать с ним зависимости / datafiles / runfiles?Например:
Я могу создать и записать в файл:
script_file = ctx.actions.declare_file("myscript.sh")
ctx.actions.write(
script_file,
"echo hello from myscript.sh\n",
is_executable = True
)
... и тогда я могу использовать script_file
любым способом, каким захочу.Например, ctx.actions.run
или ctx.actions.run_shell
.
Теперь предположим, что myscript.sh
зависит от data.txt
:
data_file = ctx.actions.declare_file("data.txt")
ctx.actions.write(data_file, "hello from data.txt\n")
script_file = ctx.actions.declare_file("myscript.sh")
ctx.actions.write(
script_file,
"cat {}\n".format(data_file.path),
is_executable = True
)
И тогда я могу запустить его (в этом примере правило, котороевызываемый this имеет вывод с именем "main"):
ctx.actions.run_shell(
tools = [script_file, data_file],
outputs = [ctx.outputs.main],
command = "{} > {}".format(script_file.path, ctx.outputs.main.path)
)
Хорошо.Но на самом деле грязно указывать script_file
и data_file
в массиве tools
.Я хотел бы указать только script_file
и автоматически выбрать data_file
в качестве файла запуска script_file
.
Есть ли способ для этого?Если так, то как?Если нет, есть ли другой, лучший способ для меня, чтобы приблизиться к этому?