git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[PATCH 2/2] ci(windows-meson-test): handle options and output like other test jobs

From
Jeff King <peff@peff.net>
Date
Nov 18, 2025, 09:35 UTC
Message-ID
<20251118093519.GB530438@coredump.intra.peff.net>
In-Reply-To
<20251118093221.GA530337@coredump.intra.peff.net>

The GitHub windows-meson-test jobs directly run "meson test" with the --slice option. This means they skip all of the ci/lib.sh infrastructure, and in particular:

  1. They do not actually set any GIT_TEST_OPTS like --verbose-log or
     -x.
  2. They do not do the usual handle_failed_tests() magic to print test
     failures or tar up failed directories.

As a result, you get almost no feedback at all when a test fails in this job, making debugging rather tricky.

Let's try to make this behave more like the other CI jobs. Because we're on Windows, we can't just use the normal run-build-and-tests.sh script. Our build runs as a separate job (like the non-meson Windows job), and then we parallelize the tests across several job slices. So we need something like the run-test-slice.sh script that the "windows-test" job uses.

In theory we could just swap out the "make" invocation there for "meson". But it doesn't quite work, because "make" knows how to pull GIT_TEST_OPTS out of GIT-BUILD-OPTIONS automatically. But for meson, we have to extract them into the --test-args option ourselves. I tried making the logic in run-test-slice.sh conditional, but there ended up being hardly any common code at all (and there are some tricky ordering constraints). So I added up with a new meson-specific test-slice runner.

Signed-off-by: Jeff King <peff@peff.net>
---
BTW, one curiosity. I tried swapping out "pwsh" as the shell for "bash",
to match what the non-meson test does. And it _mostly_ works, but
curiously it causes a handful of mergetool tests to fail (it looks like
maybe "c:\foo" Windows-style paths get used where we expect "/c/foo"
paths). I didn't dig further, and just added it to my "things that
confuse and terrify me about Windows" list.
 .github/workflows/main.yml | 12 +++++++++++-
 ci/run-test-slice-meson.sh | 13 +++++++++++++
 2 files changed, 24 insertions(+), 1 deletion(-)
 create mode 100755 ci/run-test-slice-meson.sh
diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml
index 816d5a34c4..27ebf2c8cc 100644
--- a/.github/workflows/main.yml
+++ b/.github/workflows/main.yml
@@ -298,7 +298,17 @@ jobs:
         path: build
     - name: Test
       shell: pwsh
-      run: meson test -C build --no-rebuild --print-errorlogs --slice "$(1+${{ matrix.nr }})/10"
+      run: ci/run-test-slice-meson.sh build ${{matrix.nr}} 10
+    - name: print test failures
+      if: failure() && env.FAILED_TEST_ARTIFACTS != ''
+      shell: bash
+      run: ci/print-test-failures.sh
+    - name: Upload failed tests' directories
+      if: failure() && env.FAILED_TEST_ARTIFACTS != ''
+      uses: actions/upload-artifact@v4
+      with:
+        name: failed-tests-windows-meson-${{ matrix.nr }}
+        path: ${{env.FAILED_TEST_ARTIFACTS}}
 
   regular:
     name: ${{matrix.vector.jobname}} (${{matrix.vector.pool}})
diff --git a/ci/run-test-slice-meson.sh b/ci/run-test-slice-meson.sh
new file mode 100755
index 0000000000..961c94fba0
--- /dev/null
+++ b/ci/run-test-slice-meson.sh
@@ -0,0 +1,13 @@
+#!/bin/sh
+
+# We must load the build options so we know where to find
+# things like TEST_OUTPUT_DIRECTORY. This has to come before
+# loading lib.sh, though, because it may clobber some CI lib
+# variables like our custom GIT_TEST_OPTS.
+. "$1"/GIT-BUILD-OPTIONS
+. ${0%/*}/lib.sh
+
+group "Run tests" \
+	meson test -C "$1" --no-rebuild --print-errorlogs \
+		--test-args="$GIT_TEST_OPTS" --slice "$((1+$2))/$3" ||
+handle_failed_tests
-- 
2.52.0.278.gadc6434dc3
Previous: Jeff KingNext: Johannes Schindelin
Message 3 of 4 in “meson-windows-test ci output fixes”
  1. 0/2 meson-windows-test ci output fixesJeff King, Nov 18, 2025
  2. 1/2 unit-test: ignore --no-chain-lintJeff King, Nov 18, 2025
  3. 2/2 ci(windows-meson-test): handle options and output like other test jobsJeff King, Nov 18, 2025
  4. Johannes SchindelinNov 25, 2025

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.