Bazel 给出 "open_proc" 错误 21 运行 嵌入式命令

Bazel giving "open_proc" error 21 running embedded command

我正在为 Haxe 创建一个 Bazel 扩展,虽然我在构建方面取得了一些初步成功,但我遇到了障碍,我不确定正确的方法是什么.

在 Haxe 中,如果您在 build.hxml 文件中声明对 Haxelib 的依赖性,则当您执行构建时,Haxe 编译器将从互联网上获取该 Haxelib 并在本地安装它(如果您尚未安装)拥有它,使用名为“haxelib”的程序。这个过程似乎被 Bazel 沙箱阻止了,但我无法找到很多关于沙箱如何工作的文档,如果这是预期的,以及是否有解决办法。我目前在 Windows 10 工作;这是我得到的错误:

$ bazel build //:neko-lib --verbose_failures
INFO: Analyzed target //:neko-lib (0 packages loaded, 0 targets configured).
INFO: Found 1 target...
ERROR: D:/repo/validation/BUILD:3:13: HaxeCompile neko/validation.n failed (Exit 1): haxe.exe failed: error executing command
  cd C:/users/user/_bazel_user/s6xipia4/execroot/__main__
  external/haxe_windows_amd64/haxe.exe bazel-out/x64_windows-fastbuild/bin/build.hxml
Execution platform: @local_config_platform//:host
Unix.Unix_error(21, "open_proc", "haxelib path hx3compat")
Target //:neko-lib failed to build
INFO: Elapsed time: 1.705s, Critical Path: 0.62s
INFO: 0 processes.
FAILED: Build did NOT complete successfully

hx3compat 是我要加载的 haxelib 的名称。错误 21 似乎是 "is a directory",但我不确定实际抱怨的是什么。这是我正在使用的 运行 操作:

ctx.actions.run(
    outputs = [out],
    inputs = inputs,
    executable = haxe_cmd,
    arguments = [args],
    env = env,
    mnemonic = "HaxeCompile",
)

haxe_cmd 指向 haxe.exe 文件,而输入是:

关于我可以尝试解决这个问题的事情有什么想法吗?

更新:我今天写了一条规则,运行s 有问题的命令(haxelib path hx3compat)并且有效,所以我认为这是一个调用该命令时出错 - 而不是命令本身。

我遇到的特定错误 - Unix error 21 - 是由 Bazel 创建的 shell 没有 COMSPEC 环境变量引起的:有关更多详细信息,请参阅 here and here。通过 --action_env=COMSPEC 命令行将该变量添加到环境中,使我克服了该错误。然而,由 Haxe 进程生成的命令 shell 无法处理符号链接,因此在尝试访问 Bazel 引入的目录时会遇到很多麻烦,所以我认为通过这条路线使用 haxe 最终会失败原因。只是为了记录,我能够通过 haxe 进程将 haxelib 命令本身设置为 运行,所以这个问题的答案是确保设置了 COMSPEC 变量。