Add support for replacing $HOME and $OUTPUT_BASE in flags (#922)

diff --git a/buildkite/bazelci.py b/buildkite/bazelci.py
index da73a6d..d31bcb2 100755
--- a/buildkite/bazelci.py
+++ b/buildkite/bazelci.py
@@ -813,7 +813,9 @@
             bazel_binary = "bazel"
             if bazel_version:
                 os.environ["USE_BAZEL_VERSION"] = bazel_version
-        if "USE_BAZEL_VERSION" in os.environ and not task_config.get("skip_use_bazel_version_for_test", False):
+        if "USE_BAZEL_VERSION" in os.environ and not task_config.get(
+            "skip_use_bazel_version_for_test", False
+        ):
             # This will only work if the bazel binary in $PATH is actually a bazelisk binary
             # (https://github.com/bazelbuild/bazelisk).
             test_env_vars.append("USE_BAZEL_VERSION")
@@ -1363,7 +1365,9 @@
     return flags
 
 
-def compute_flags(platform, flags, incompatible_flags, bep_file, enable_remote_cache=False):
+def compute_flags(
+    platform, flags, incompatible_flags, bep_file, bazel_binary, enable_remote_cache=False
+):
     aggregated_flags = common_build_flags(bep_file, platform)
     if not remote_enabled(flags):
         if platform.startswith("rbe_"):
@@ -1374,6 +1378,18 @@
     if incompatible_flags:
         aggregated_flags += incompatible_flags
 
+    for i, flag in enumerate(aggregated_flags):
+        if "$HOME" in flag:
+            home = {"windows": "D:", "macos": "/Users/buildkite"}.get(
+                platform, "/var/lib/buildkite-agent"
+            )
+            aggregated_flags[i] = flag.replace("$HOME", home)
+        if "$OUTPUT_BASE" in flag:
+            output_base = execute_command_and_get_output(
+                [bazel_binary, "info", "output_base"], print_output=False
+            ).strip()
+            aggregated_flags[i] = flag.replace("$OUTPUT_BASE", output_base)
+
     return aggregated_flags
 
 
@@ -1397,6 +1413,7 @@
         # incompatible flags set by "INCOMPATIBLE_FLAGS" env var will be ignored.
         [] if (use_bazelisk_migrate() or not incompatible_flags) else incompatible_flags,
         bep_file,
+        bazel_binary,
         enable_remote_cache=True,
     )
 
@@ -1433,9 +1450,7 @@
             )
         )
         expanded_test_targets = expand_test_target_patterns(bazel_binary, platform, test_targets)
-        build_targets, test_targets = get_targets_for_shard(
-            build_targets, expanded_test_targets, shard_id, shard_count
-        )
+        test_targets = get_targets_for_shard(expanded_test_targets, shard_id, shard_count)
 
     return build_targets, test_targets
 
@@ -1482,15 +1497,9 @@
     return included_targets, excluded_targets
 
 
-def get_targets_for_shard(build_targets, test_targets, shard_id, shard_count):
+def get_targets_for_shard(test_targets, shard_id, shard_count):
     # TODO(fweikert): implement a more sophisticated algorithm
-    included_build_targets, excluded_build_targets = partition_targets(build_targets)
-    build_targets_for_this_shard = sorted(included_build_targets)[shard_id::shard_count] + [
-        "-" + x for x in excluded_build_targets
-    ]
-    test_targets_for_this_shard = sorted(test_targets)[shard_id::shard_count]
-
-    return build_targets_for_this_shard, test_targets_for_this_shard
+    return sorted(test_targets)[shard_id::shard_count]
 
 
 def execute_bazel_test(
@@ -1519,6 +1528,7 @@
         # incompatible flags set by "INCOMPATIBLE_FLAGS" env var will be ignored.
         [] if (use_bazelisk_migrate() or not incompatible_flags) else incompatible_flags,
         bep_file,
+        bazel_binary,
         enable_remote_cache=not monitor_flaky_tests,
     )