As discussed, this is a port of the runner to go, removing python dependency. This PR also introduces full windows support, with runfiles either enabled or disabled. The multirun runner is invoked natively, without any bash or bat wrappers.
Features
Clean go port of multirun.py, assisted by Copilot. Only the json parsing function was carried over from bazel-tools/multirun.
Multirun is invoked natively without any wrappers, by following the 'native_binary' approach in bazel skylib. This uses symlinks to a single exe so each runner is small and fast to create.
Port of runfiles.bash v3 to windows bat, assisted by Copilot. These allow full runfiles lookup via a bat script. Initially these are inside this MR, but I intend to submit to aspect-bazel-lib as a new version of their windows_utils.bzl file.
Windows supported without bash. Using the previously mentioned windows_utils.bzl, commands are invoked via either a bash or bat wrapper depending on platform.
No API changes. Some behaviour differences (see below)
All tests pass on both windows and linux
Behaviour differences
As multirun is no longer wrapped in a bash script, and is invoked via a symlink, there is some complexity inside multirun to figure out where it is invoked from, and to set the RUNFILES variables correctly.
Multirun filenames are now .exe, instead of .bash
v3 runfiles library is used
As go is now used instead of python for concurrent execution, there may be some differences in scheduling and ordering of tasks.
As discussed, this is a port of the runner to go, removing python dependency. This PR also introduces full windows support, with runfiles either enabled or disabled. The multirun runner is invoked natively, without any bash or bat wrappers.
Features
Behaviour differences
Followup help needed