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()