Check for both :lcov_merger and $lcov_merger  attributes in TestActionBuilder.

384e1cb renamed an attribute from `$lcov_merger` to `:lcov_merger`, which is a breaking change and broke rules_go. This PR changes the test runner to check both attribute names for backwards compatibility. The next step is to introduce an incompatible flag to remove the former.

Fixes #8670

Closes #8709.

PiperOrigin-RevId: 254915099
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/test/TestActionBuilder.java b/src/main/java/com/google/devtools/build/lib/analysis/test/TestActionBuilder.java
index c702722..6e8ee8d 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/test/TestActionBuilder.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/test/TestActionBuilder.java
@@ -269,9 +269,15 @@
       extraTestEnv.put(BAZEL_CC_COVERAGE_TOOL, GCOV_TOOL);
 
       // We don't add this attribute to non-supported test target
+      String lcovMergerAttr = null;
       if (ruleContext.isAttrDefined(":lcov_merger", LABEL)) {
+        lcovMergerAttr = ":lcov_merger";
+      } else if (ruleContext.isAttrDefined("$lcov_merger", LABEL)) {
+        lcovMergerAttr = "$lcov_merger";
+      }
+      if (lcovMergerAttr != null) {
         TransitiveInfoCollection lcovMerger =
-            ruleContext.getPrerequisite(":lcov_merger", Mode.TARGET);
+            ruleContext.getPrerequisite(lcovMergerAttr, Mode.TARGET);
         FilesToRunProvider lcovFilesToRun = lcovMerger.getProvider(FilesToRunProvider.class);
         if (lcovFilesToRun != null) {
           extraTestEnv.put(LCOV_MERGER, lcovFilesToRun.getExecutable().getExecPathString());
@@ -286,7 +292,7 @@
             inputsBuilder.add(lcovMergerArtifact);
           } else {
             ruleContext.attributeError(
-                ":lcov_merger",
+                lcovMergerAttr,
                 "the LCOV merger should be either an executable or a single artifact");
           }
         }