Fix event id for action_completed BEP events

The id should be the exec path not the absolute path. Otherwise the
stdout and stderr don't line up correctly.

PiperOrigin-RevId: 215369211
diff --git a/src/main/java/com/google/devtools/build/lib/actions/ActionExecutedEvent.java b/src/main/java/com/google/devtools/build/lib/actions/ActionExecutedEvent.java
index 9c03813..e528c5d 100644
--- a/src/main/java/com/google/devtools/build/lib/actions/ActionExecutedEvent.java
+++ b/src/main/java/com/google/devtools/build/lib/actions/ActionExecutedEvent.java
@@ -28,6 +28,7 @@
 import com.google.devtools.build.lib.buildeventstream.PathConverter;
 import com.google.devtools.build.lib.events.ExtendedEventHandler.ProgressLike;
 import com.google.devtools.build.lib.vfs.Path;
+import com.google.devtools.build.lib.vfs.PathFragment;
 import java.util.Collection;
 import java.util.logging.Level;
 import java.util.logging.Logger;
@@ -39,6 +40,7 @@
 public class ActionExecutedEvent implements BuildEventWithConfiguration, ProgressLike {
   private static final Logger logger = Logger.getLogger(ActionExecutedEvent.class.getName());
 
+  private final PathFragment actionId;
   private final Action action;
   private final ActionExecutionException exception;
   private final Path primaryOutput;
@@ -47,12 +49,14 @@
   private final ErrorTiming timing;
 
   public ActionExecutedEvent(
+      PathFragment actionId,
       Action action,
       ActionExecutionException exception,
       Path primaryOutput,
       Path stdout,
       Path stderr,
       ErrorTiming timing) {
+    this.actionId = actionId;
     this.action = action;
     this.exception = exception;
     this.primaryOutput = primaryOutput;
@@ -93,10 +97,10 @@
   @Override
   public BuildEventId getEventId() {
     if (action.getOwner() == null) {
-      return BuildEventId.actionCompleted(primaryOutput);
+      return BuildEventId.actionCompleted(actionId);
     } else {
       return BuildEventId.actionCompleted(
-          primaryOutput,
+          actionId,
           action.getOwner().getLabel(),
           action.getOwner().getConfigurationChecksum());
     }
diff --git a/src/main/java/com/google/devtools/build/lib/buildeventstream/BUILD b/src/main/java/com/google/devtools/build/lib/buildeventstream/BUILD
index 4bb7f32..a47c679 100644
--- a/src/main/java/com/google/devtools/build/lib/buildeventstream/BUILD
+++ b/src/main/java/com/google/devtools/build/lib/buildeventstream/BUILD
@@ -19,6 +19,7 @@
         "//src/main/java/com/google/devtools/build/lib/concurrent",
         "//src/main/java/com/google/devtools/build/lib/skyframe/serialization/autocodec",
         "//src/main/java/com/google/devtools/build/lib/vfs",
+        "//src/main/java/com/google/devtools/build/lib/vfs:pathfragment",
         "//src/main/java/com/google/devtools/common/options",
         "//third_party:guava",
         "//third_party:jsr305",
diff --git a/src/main/java/com/google/devtools/build/lib/buildeventstream/BuildEventId.java b/src/main/java/com/google/devtools/build/lib/buildeventstream/BuildEventId.java
index 97ff7a6..f5848ce 100644
--- a/src/main/java/com/google/devtools/build/lib/buildeventstream/BuildEventId.java
+++ b/src/main/java/com/google/devtools/build/lib/buildeventstream/BuildEventId.java
@@ -19,7 +19,7 @@
 import com.google.devtools.build.lib.causes.Cause;
 import com.google.devtools.build.lib.cmdline.Label;
 import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
-import com.google.devtools.build.lib.vfs.Path;
+import com.google.devtools.build.lib.vfs.PathFragment;
 import com.google.protobuf.TextFormat;
 import java.io.Serializable;
 import java.util.List;
@@ -233,12 +233,12 @@
     return new BuildEventId(cause.getIdProto());
   }
 
-  public static BuildEventId actionCompleted(Path path) {
+  public static BuildEventId actionCompleted(PathFragment path) {
     return actionCompleted(path, null, null);
   }
 
   public static BuildEventId actionCompleted(
-      Path path, @Nullable Label label, @Nullable String configurationChecksum) {
+      PathFragment path, @Nullable Label label, @Nullable String configurationChecksum) {
     ActionCompletedId.Builder actionId =
         ActionCompletedId.newBuilder().setPrimaryOutput(path.toString());
     if (label != null) {
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeActionExecutor.java b/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeActionExecutor.java
index 7ed0f92..c3d2feb 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeActionExecutor.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeActionExecutor.java
@@ -1260,6 +1260,7 @@
     }
     eventHandler.post(
         new ActionExecutedEvent(
+            action.getPrimaryOutput().getExecPath(),
             action,
             exception,
             actionExecutionContext.getInputPath(action.getPrimaryOutput()),
diff --git a/src/test/java/com/google/devtools/build/lib/buildeventservice/BazelBuildEventServiceModuleTest.java b/src/test/java/com/google/devtools/build/lib/buildeventservice/BazelBuildEventServiceModuleTest.java
index 78fcaff..7ce832c 100644
--- a/src/test/java/com/google/devtools/build/lib/buildeventservice/BazelBuildEventServiceModuleTest.java
+++ b/src/test/java/com/google/devtools/build/lib/buildeventservice/BazelBuildEventServiceModuleTest.java
@@ -60,6 +60,7 @@
 
   private static final ActionExecutedEvent SUCCESSFUL_ACTION_EXECUTED_EVENT =
       new ActionExecutedEvent(
+          ActionsTestUtil.DUMMY_ARTIFACT.getExecPath(),
           new ActionsTestUtil.NullAction(),
           /* exception= */ null,
           ActionsTestUtil.DUMMY_ARTIFACT.getPath(),
diff --git a/src/test/java/com/google/devtools/build/lib/runtime/BuildEventStreamerTest.java b/src/test/java/com/google/devtools/build/lib/runtime/BuildEventStreamerTest.java
index 53d4a74..02b130d 100644
--- a/src/test/java/com/google/devtools/build/lib/runtime/BuildEventStreamerTest.java
+++ b/src/test/java/com/google/devtools/build/lib/runtime/BuildEventStreamerTest.java
@@ -86,6 +86,7 @@
 
   private static final ActionExecutedEvent SUCCESSFUL_ACTION_EXECUTED_EVENT =
       new ActionExecutedEvent(
+          ActionsTestUtil.DUMMY_ARTIFACT.getExecPath(),
           new ActionsTestUtil.NullAction(),
           /* exception= */ null,
           ActionsTestUtil.DUMMY_ARTIFACT.getPath(),
@@ -912,6 +913,7 @@
 
     ActionExecutedEvent failedActionExecutedEvent =
         new ActionExecutedEvent(
+            ActionsTestUtil.DUMMY_ARTIFACT.getExecPath(),
             new ActionsTestUtil.NullAction(),
             new ActionExecutionException("Exception", /* action= */ null, /* catastrophe= */ false),
             ActionsTestUtil.DUMMY_ARTIFACT.getPath(),
@@ -942,6 +944,7 @@
 
     ActionExecutedEvent failedActionExecutedEvent =
         new ActionExecutedEvent(
+            ActionsTestUtil.DUMMY_ARTIFACT.getExecPath(),
             new ActionsTestUtil.NullAction(),
             new ActionExecutionException("Exception", /* action= */ null, /* catastrophe= */ false),
             ActionsTestUtil.DUMMY_ARTIFACT.getPath(),