First try at adding single GHA pass/fail signal. Only implemented for java
diff --git a/.github/workflows/test_bazel.yml b/.github/workflows/test_bazel.yml
index 0569790..e0df9b4 100644
--- a/.github/workflows/test_bazel.yml
+++ b/.github/workflows/test_bazel.yml
@@ -3,6 +3,9 @@
 on:
   workflow_call:
     inputs:
+      is-presubmit:
+        description: "True if we are in a presubmit run, false otherwise"
+        type: boolean
       safe-checkout:
         required: true
         description: "The SHA key for the commit we want to run over"
diff --git a/.github/workflows/test_cpp.yml b/.github/workflows/test_cpp.yml
index ad135a2..31a7797 100644
--- a/.github/workflows/test_cpp.yml
+++ b/.github/workflows/test_cpp.yml
@@ -3,6 +3,9 @@
 on:
   workflow_call:
     inputs:
+      is-presubmit:
+        description: "True if we are in a presubmit run, false otherwise"
+        type: boolean
       safe-checkout:
         required: true
         description: "The SHA key for the commit we want to run over"
diff --git a/.github/workflows/test_java.yml b/.github/workflows/test_java.yml
index a9abfac..3a34a1b 100644
--- a/.github/workflows/test_java.yml
+++ b/.github/workflows/test_java.yml
@@ -3,6 +3,9 @@
 on:
   workflow_call:
     inputs:
+      is-presubmit:
+        description: "True if we are in a presubmit run, false otherwise"
+        type: boolean
       safe-checkout:
         required: true
         description: "The SHA key for the commit we want to run over"
@@ -17,16 +20,18 @@
       fail-fast: false
       matrix:
         include:
-          - name: OpenJDK 8
+          - name: OpenJDK 8 (Continuous)
             version: '8'
             image: us-docker.pkg.dev/protobuf-build/containers/test/linux/java:8-1fdbb997433cb22c1e49ef75ad374a8d6bb88702
             # TODO: b/318555165 - enable the layering check. Currently it does
             # not work correctly with the toolchain in this Docker image.
             targets: //java/... //java/internal:java_version --features=-layering_check
-          - name: OpenJDK 11
+            if: ${{ !inputs.presubmit }} 
+          - name: OpenJDK 11 (Continuous)
             version: '11'
             image: us-docker.pkg.dev/protobuf-build/containers/test/linux/java:11-1fdbb997433cb22c1e49ef75ad374a8d6bb88702
             targets: //java/... //java/internal:java_version
+            if: ${{ !inputs.presubmit }}
           - name: OpenJDK 17
             version: '17'
             image: us-docker.pkg.dev/protobuf-build/containers/test/linux/java:17-1fdbb997433cb22c1e49ef75ad374a8d6bb88702
diff --git a/.github/workflows/test_runner.yml b/.github/workflows/test_runner.yml
index 70cfc27..e74ab0c 100644
--- a/.github/workflows/test_runner.yml
+++ b/.github/workflows/test_runner.yml
@@ -77,6 +77,9 @@
       # Store the sha for checkout so we can easily use it later.  For safe
       # events, this will be blank and use the defaults.
       checkout-sha: ${{ steps.safe-checkout.outputs.sha }}
+      # Stores a boolean value denoting whether this is a presubmit run. This
+      # helps us determine which tests to block on.
+      is-presubmit: ${{ github.event_name == 'pull_request' || github.event_name == 'pull_request_target' }} 
     steps:
       - name: Check
         # Trivially pass for safe PRs, and explicitly error for unsafe ones
@@ -114,6 +117,7 @@
     needs: [check-tag]
     uses: ./.github/workflows/test_bazel.yml
     with:
+      is-presubmit: ${{ needs.check-tag.outputs.is-presubmit }}
       safe-checkout: ${{ needs.check-tag.outputs.checkout-sha }}
     secrets: inherit
 
@@ -122,6 +126,7 @@
     needs: [check-tag]
     uses: ./.github/workflows/test_cpp.yml
     with:
+      is-presubmit: ${{ needs.check-tag.outputs.is-presubmit }}
       safe-checkout: ${{ needs.check-tag.outputs.checkout-sha }}
     secrets: inherit
 
@@ -130,6 +135,7 @@
     needs: [check-tag]
     uses: ./.github/workflows/test_java.yml
     with:
+      is-presubmit: ${{ needs.check-tag.outputs.is-presubmit }}
       safe-checkout: ${{ needs.check-tag.outputs.checkout-sha }}
     secrets: inherit
 
@@ -206,3 +212,15 @@
     with:
       safe-checkout: ${{ needs.check-tag.outputs.checkout-sha }}
     secrets: inherit
+
+  # This test depends on all blocking tests and indicates whether they all suceeded.
+  all_blocking_tests:
+    name: All Blocking Tests
+    needs: [bazel, cpp, java, python, ruby, php, php-ext, csharp, objectivec, rust, upb, staleness]
+    runs-on: ubuntu-latest
+    steps:
+      - name: Check test results
+        run: "${{ !contains(join(needs.*.result, ' '), 'failure') && !contains(join(needs.*.result, ' '), 'cancelled') && !contains(join(needs.*.result, ' '), 'skipped') }}"
+    # This workflow must run even if one or more of the dependent workflows
+    # failed.
+    if: always()