Add identifying information to failure message for all local spawn execution errors.

PiperOrigin-RevId: 334600311
diff --git a/src/main/java/com/google/devtools/build/lib/exec/local/LocalSpawnRunner.java b/src/main/java/com/google/devtools/build/lib/exec/local/LocalSpawnRunner.java
index 6ff98fb..695b797 100644
--- a/src/main/java/com/google/devtools/build/lib/exec/local/LocalSpawnRunner.java
+++ b/src/main/java/com/google/devtools/build/lib/exec/local/LocalSpawnRunner.java
@@ -305,7 +305,8 @@
             .setStatus(Status.EXECUTION_DENIED)
             .setExitCode(LOCAL_EXEC_ERROR)
             .setExecutorHostname(hostName)
-            .setFailureDetail(makeFailureDetail(LOCAL_EXEC_ERROR, Status.EXECUTION_DENIED))
+            .setFailureDetail(
+                makeFailureDetail(LOCAL_EXEC_ERROR, Status.EXECUTION_DENIED, actionType))
             .build();
       }
 
@@ -410,7 +411,8 @@
               .setStatus(Status.EXECUTION_FAILED)
               .setExitCode(LOCAL_EXEC_ERROR)
               .setExecutorHostname(hostName)
-              .setFailureDetail(makeFailureDetail(LOCAL_EXEC_ERROR, Status.EXECUTION_FAILED))
+              .setFailureDetail(
+                  makeFailureDetail(LOCAL_EXEC_ERROR, Status.EXECUTION_FAILED, actionType))
               .build();
         }
         setState(State.SUCCESS);
@@ -431,7 +433,7 @@
                 .setExecutorHostname(hostName)
                 .setWallTime(wallTime);
         if (status != Status.SUCCESS) {
-          spawnResultBuilder.setFailureDetail(makeFailureDetail(exitCode, status));
+          spawnResultBuilder.setFailureDetail(makeFailureDetail(exitCode, status, actionType));
         }
         if (statisticsPath != null) {
           ExecutionStatistics.getResourceUsage(statisticsPath)
@@ -509,7 +511,7 @@
     }
   }
 
-  private static FailureDetail makeFailureDetail(int exitCode, Status status) {
+  private static FailureDetail makeFailureDetail(int exitCode, Status status, String actionType) {
     FailureDetails.Spawn.Builder spawnFailure = FailureDetails.Spawn.newBuilder();
     switch (status) {
       case SUCCESS:
@@ -540,7 +542,7 @@
         break;
     }
     return FailureDetail.newBuilder()
-        .setMessage("local spawn failed")
+        .setMessage("local spawn failed for " + actionType)
         .setSpawn(spawnFailure)
         .build();
   }
diff --git a/src/main/java/com/google/devtools/build/lib/remote/RemoteSpawnCache.java b/src/main/java/com/google/devtools/build/lib/remote/RemoteSpawnCache.java
index 4c9077a..e72c04e 100644
--- a/src/main/java/com/google/devtools/build/lib/remote/RemoteSpawnCache.java
+++ b/src/main/java/com/google/devtools/build/lib/remote/RemoteSpawnCache.java
@@ -209,10 +209,11 @@
           SpawnResult spawnResult =
               createSpawnResult(
                   result.getExitCode(),
-                  /* cacheHit= */ true,
+                  /*cacheHit=*/ true,
                   "remote",
                   inMemoryOutput,
-                  spawnMetrics.build());
+                  spawnMetrics.build(),
+                  spawn.getMnemonic());
           return SpawnCache.success(spawnResult);
         }
       } catch (CacheNotFoundException e) {
diff --git a/src/main/java/com/google/devtools/build/lib/remote/RemoteSpawnRunner.java b/src/main/java/com/google/devtools/build/lib/remote/RemoteSpawnRunner.java
index b58e203..e4664ff 100644
--- a/src/main/java/com/google/devtools/build/lib/remote/RemoteSpawnRunner.java
+++ b/src/main/java/com/google/devtools/build/lib/remote/RemoteSpawnRunner.java
@@ -516,7 +516,8 @@
             .setFetchTime(fetchTime.elapsed().minus(networkTimeEnd.minus(networkTimeStart)))
             .setTotalTime(totalTime.elapsed())
             .setNetworkTime(networkTimeEnd)
-            .build());
+            .build(),
+        spawn.getMnemonic());
   }
 
   @Override
diff --git a/src/main/java/com/google/devtools/build/lib/remote/util/Utils.java b/src/main/java/com/google/devtools/build/lib/remote/util/Utils.java
index 71847e7..d6f2ffc 100644
--- a/src/main/java/com/google/devtools/build/lib/remote/util/Utils.java
+++ b/src/main/java/com/google/devtools/build/lib/remote/util/Utils.java
@@ -92,7 +92,8 @@
       boolean cacheHit,
       String runnerName,
       @Nullable InMemoryOutput inMemoryOutput,
-      SpawnMetrics spawnMetrics) {
+      SpawnMetrics spawnMetrics,
+      String mnemonic) {
     SpawnResult.Builder builder =
         new SpawnResult.Builder()
             .setStatus(exitCode == 0 ? Status.SUCCESS : Status.NON_ZERO_EXIT)
@@ -104,7 +105,7 @@
     if (exitCode != 0) {
       builder.setFailureDetail(
           FailureDetail.newBuilder()
-              .setMessage("remote spawn failed")
+              .setMessage(mnemonic + " returned a non-zero exit code when running remotely")
               .setSpawn(FailureDetails.Spawn.newBuilder().setCode(Code.NON_ZERO_EXIT))
               .build());
     }
diff --git a/src/main/java/com/google/devtools/build/lib/worker/WorkerSpawnRunner.java b/src/main/java/com/google/devtools/build/lib/worker/WorkerSpawnRunner.java
index 4fc37e2..a5ea6df 100644
--- a/src/main/java/com/google/devtools/build/lib/worker/WorkerSpawnRunner.java
+++ b/src/main/java/com/google/devtools/build/lib/worker/WorkerSpawnRunner.java
@@ -241,7 +241,7 @@
     if (exitCode != 0) {
       builder.setFailureDetail(
           FailureDetail.newBuilder()
-              .setMessage("worker spawn failed")
+              .setMessage("worker spawn failed for " + spawn.getMnemonic())
               .setSpawn(
                   FailureDetails.Spawn.newBuilder()
                       .setCode(FailureDetails.Spawn.Code.NON_ZERO_EXIT)