set up CI presubmit
diff --git a/.bazelci/presubmit.yml b/.bazelci/presubmit.yml
new file mode 100644
index 0000000..9eb04eb
--- /dev/null
+++ b/.bazelci/presubmit.yml
@@ -0,0 +1,18 @@
+buildifer: latest
+matrix:
+  platform: ["ubuntu2204", "macos", "macos_arm64", "windows"]
+tasks:
+  proto:
+    name: proto
+    platform: ${{ platform }}
+    working_directory: proto
+    build_targets:
+    - //...
+  java:
+    name: java
+    platform: ${{ platform }}
+    working_directory: java
+    build_targets:
+    - //...
+    test_targets:
+    - //...
diff --git a/.bazelversion b/.bazelversion
index b26a34e..643916c 100644
--- a/.bazelversion
+++ b/.bazelversion
@@ -1 +1 @@
-7.2.1
+7.3.1
diff --git a/java/src/test/java/com/google/devtools/build/lib/worker/WorkRequestHandlerTest.java b/java/src/test/java/com/google/devtools/build/lib/worker/WorkRequestHandlerTest.java
index 9c1ea29..817ef75 100644
--- a/java/src/test/java/com/google/devtools/build/lib/worker/WorkRequestHandlerTest.java
+++ b/java/src/test/java/com/google/devtools/build/lib/worker/WorkRequestHandlerTest.java
@@ -318,7 +318,7 @@
       assertThat(response.getOutput()).isEmpty();
       assertThat(response.getExitCode()).isEqualTo(0);
     } else {
-      assertThat(response.getOutput()).isEqualTo("Such work! Much progress! Wow!\n");
+      assertThat(response.getOutput()).startsWith("Such work! Much progress! Wow!");
       assertThat(response.getExitCode()).isEqualTo(1);
     }
 
@@ -502,7 +502,7 @@
     assertThat(response.getRequestId()).isEqualTo(42);
     assertThat(response.getWasCancelled()).isFalse();
     assertThat(response.getExitCode()).isEqualTo(2);
-    assertThat(response.getOutput()).isEqualTo("Such work! Much progress! Wow!\n");
+    assertThat(response.getOutput()).startsWith("Such work! Much progress! Wow!");
 
     // Checks that nothing more was sent.
     assertThat(dest.available()).isEqualTo(0);