Merge branch 'ps/ci-gitlab-msvc-updates' into next

CI update.

* ps/ci-gitlab-msvc-updates:
  gitlab-ci: handle failed tests on MSVC+Meson job
  gitlab-ci: use "run-test-slice-meson.sh"
  ci: make test slicing consistent across Meson/Make
  ci: don't skip smallest test slice in GitLab
  ci: handle failures of test-slice helper
This commit is contained in:
Junio C Hamano
2026-02-10 12:40:05 -08:00
5 changed files with 33 additions and 14 deletions

View File

@@ -150,7 +150,7 @@ jobs:
- uses: git-for-windows/setup-git-for-windows-sdk@v1
- name: test
shell: bash
run: . /etc/profile && ci/run-test-slice.sh ${{matrix.nr}} 10
run: . /etc/profile && ci/run-test-slice.sh ${{ matrix.nr + 1 }} 10
- name: print test failures
if: failure() && env.FAILED_TEST_ARTIFACTS != ''
shell: bash
@@ -298,7 +298,7 @@ jobs:
path: build
- name: Test
shell: pwsh
run: ci/run-test-slice-meson.sh build ${{matrix.nr}} 10
run: ci/run-test-slice-meson.sh build ${{matrix.nr + 1}} 10
- name: print test failures
if: failure() && env.FAILED_TEST_ARTIFACTS != ''
shell: bash

View File

@@ -157,6 +157,8 @@ test:mingw64:
parallel: 10
.msvc-meson:
variables:
TEST_OUTPUT_DIRECTORY: "C:/Git-Test"
tags:
- saas-windows-medium-amd64
before_script:
@@ -164,12 +166,13 @@ test:mingw64:
- choco install -y git meson ninja rust-ms
- Import-Module $env:ChocolateyInstall\helpers\chocolateyProfile.psm1
- refreshenv
- New-Item -Path $env:TEST_OUTPUT_DIRECTORY -ItemType Directory
build:msvc-meson:
extends: .msvc-meson
stage: build
script:
- meson setup build --vsenv -Dperl=disabled -Dbackend_max_links=1 -Dcredential_helpers=wincred
- meson setup build --vsenv -Dperl=disabled -Dbackend_max_links=1 -Dcredential_helpers=wincred -Dtest_output_directory="$TEST_OUTPUT_DIRECTORY"
- meson compile -C build
artifacts:
paths:
@@ -183,11 +186,21 @@ test:msvc-meson:
- job: "build:msvc-meson"
artifacts: true
script:
- meson test -C build --no-rebuild --print-errorlogs --slice $Env:CI_NODE_INDEX/$Env:CI_NODE_TOTAL
- |
& "C:/Program Files/Git/usr/bin/bash.exe" -l -c 'ci/run-test-slice-meson.sh build $CI_NODE_INDEX $CI_NODE_TOTAL'
after_script:
- |
if ($env:CI_JOB_STATUS -ne "success") {
& "C:/Program Files/Git/usr/bin/bash.exe" -l -c 'ci/print-test-failures.sh'
Move-Item -Path "$env:TEST_OUTPUT_DIRECTORY/failed-test-artifacts" -Destination t/
}
parallel: 10
artifacts:
paths:
- t/failed-test-artifacts
reports:
junit: build/meson-logs/testlog.junit.xml
when: on_failure
test:fuzz-smoke-tests:
image: ubuntu:latest

View File

@@ -9,5 +9,5 @@
group "Run tests" \
meson test -C "$1" --no-rebuild --print-errorlogs \
--test-args="$GIT_TEST_OPTS" --slice "$((1+$2))/$3" ||
--test-args="$GIT_TEST_OPTS" --slice "$(($2))/$3" ||
handle_failed_tests

View File

@@ -5,9 +5,9 @@
. ${0%/*}/lib.sh
group "Run tests" make --quiet -C t T="$(cd t &&
./helper/test-tool path-utils slice-tests "$1" "$2" t[0-9]*.sh |
tr '\n' ' ')" ||
TESTS=$(cd t && ./helper/test-tool path-utils slice-tests "$1" "$2" t[0-9]*.sh)
group "Run tests" make --quiet -C t T="$(echo "$TESTS" | tr '\n' ' ')" ||
handle_failed_tests
# We only have one unit test at the moment, so run it in the first slice

View File

@@ -477,14 +477,20 @@ int cmd__path_utils(int argc, const char **argv)
if (argc > 5 && !strcmp(argv[1], "slice-tests")) {
int res = 0;
long offset, stride, i;
long slice, slices_total, i;
struct string_list list = STRING_LIST_INIT_NODUP;
struct stat st;
offset = strtol(argv[2], NULL, 10);
stride = strtol(argv[3], NULL, 10);
if (stride < 1)
stride = 1;
slices_total = strtol(argv[3], NULL, 10);
if (slices_total < 1)
die("there must be at least one slice, got '%s'",
argv[3]);
slice = strtol(argv[2], NULL, 10);
if (1 > slice || slice > slices_total)
die("slice must be in the range 1 <= slice <= %ld, got '%s'",
slices_total, argv[2]);
for (i = 4; i < argc; i++)
if (stat(argv[i], &st))
res = error_errno("Cannot stat '%s'", argv[i]);
@@ -492,7 +498,7 @@ int cmd__path_utils(int argc, const char **argv)
string_list_append(&list, argv[i])->util =
(void *)(intptr_t)st.st_size;
QSORT(list.items, list.nr, cmp_by_st_size);
for (i = offset; i < list.nr; i+= stride)
for (i = slice - 1; i < list.nr; i+= slices_total)
printf("%s\n", list.items[i].string);
return !!res;