diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml
index 0a62c62d02c396746072366172f7f9761332e7a8..239553ae138e8cd0668a08cf80456fa497a5e2f2 100644
--- a/.github/workflows/tests.yml
+++ b/.github/workflows/tests.yml
@@ -367,13 +367,16 @@ jobs:
       - name: Set build result
         env:
           NEEDS_CONTEXT: ${{ toJSON(needs) }}
-        # the `jq` incantation dumps out a series of "<job> <result>" lines
+        # the `jq` incantation dumps out a series of "<job> <result>" lines.
+        # we set it to an intermediate variable to avoid a pipe, which makes it
+        # hard to set $rc.
         run: |
-          set -o pipefail
-          jq -r 'to_entries[] | [.key,.value.result] | join(" ")' \
-                          <<< $NEEDS_CONTEXT |
-              while read job result; do
-                  if [ "$result" != "success" ]; then
-                      echo "::set-failed ::Job $job returned $result"
-                  fi
-              done
+          rc=0
+          results=$(jq -r 'to_entries[] | [.key,.value.result] | join(" ")' <<< $NEEDS_CONTEXT)
+          while read job result ; do
+              if [ "$result" != "success" ]; then
+                  echo "::set-failed ::Job $job returned $result"
+                  rc=1
+              fi
+          done <<< $results
+          exit $rc
diff --git a/changelog.d/10512.misc b/changelog.d/10512.misc
new file mode 100644
index 0000000000000000000000000000000000000000..c012e89f4bbbfc44e43a43dfdc4b7c3323b6fa85
--- /dev/null
+++ b/changelog.d/10512.misc
@@ -0,0 +1 @@
+Update the `tests-done` Github Actions status.