aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPatrick Steinhardt <ps@pks.im>2024-12-13 11:41:23 +0100
committerJunio C Hamano <gitster@pobox.com>2024-12-13 06:48:47 -0800
commiteab5dbab92fa60298aa4a1952fcbc6cae824d939 (patch)
treed16c18dd63a433d5b8dcf378ed617331d8cf44df
parent9faf3963b6b567421ab29d263e00f0e6e59a39f5 (diff)
downloadgit-eab5dbab92fa60298aa4a1952fcbc6cae824d939.tar.gz
ci: wire up Meson builds
Wire up CI builds for both GitLab and GitHub that use the Meson build system. While the setup is mostly trivial, one gotcha is the test output directory used to be in "t/", but now it is contained in the build directory. To unify the logic across Makefile- and Meson-based builds we explicitly set up the `TEST_OUTPUT_DIRECTORY` variable so that it is the same for both build systems. Signed-off-by: Patrick Steinhardt <ps@pks.im> Signed-off-by: Junio C Hamano <gitster@pobox.com>
-rw-r--r--.github/workflows/main.yml7
-rw-r--r--.gitlab-ci.yml8
-rwxr-xr-xci/install-dependencies.sh7
-rwxr-xr-xci/lib.sh2
-rwxr-xr-xci/print-test-failures.sh2
-rwxr-xr-xci/run-build-and-tests.sh31
6 files changed, 48 insertions, 9 deletions
diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml
index 808ddc19b8..c231419abc 100644
--- a/.github/workflows/main.yml
+++ b/.github/workflows/main.yml
@@ -286,6 +286,9 @@ jobs:
- jobname: osx-gcc
cc: gcc-13
pool: macos-13
+ - jobname: osx-meson
+ cc: clang
+ pool: macos-13
- jobname: linux-gcc-default
cc: gcc
pool: ubuntu-latest
@@ -298,11 +301,15 @@ jobs:
- jobname: linux-asan-ubsan
cc: clang
pool: ubuntu-latest
+ - jobname: linux-meson
+ cc: gcc
+ pool: ubuntu-latest
env:
CC: ${{matrix.vector.cc}}
CC_PACKAGE: ${{matrix.vector.cc_package}}
jobname: ${{matrix.vector.jobname}}
distro: ${{matrix.vector.pool}}
+ TEST_OUTPUT_DIRECTORY: ${{github.workspace}}/t
runs-on: ${{matrix.vector.pool}}
steps:
- uses: actions/checkout@v4
diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index a1bc92893f..3eec72ddc6 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -20,6 +20,7 @@ test:linux:
- saas-linux-medium-amd64
variables:
CUSTOM_PATH: "/custom"
+ TEST_OUTPUT_DIRECTORY: "/tmp/test-output"
before_script:
- ./ci/install-dependencies.sh
script:
@@ -31,6 +32,7 @@ test:linux:
if test "$CI_JOB_STATUS" != 'success'
then
sudo --preserve-env --set-home --user=builder ./ci/print-test-failures.sh
+ mv "$TEST_OUTPUT_DIRECTORY"/failed-test-artifacts t/
fi
parallel:
matrix:
@@ -67,6 +69,9 @@ test:linux:
image: fedora:latest
- jobname: linux-musl
image: alpine:latest
+ - jobname: linux-meson
+ image: ubuntu:latest
+ CC: gcc
artifacts:
paths:
- t/failed-test-artifacts
@@ -104,6 +109,9 @@ test:osx:
- jobname: osx-reftable
image: macos-13-xcode-14
CC: clang
+ - jobname: osx-meson
+ image: macos-14-xcode-15
+ CC: clang
artifacts:
paths:
- t/failed-test-artifacts
diff --git a/ci/install-dependencies.sh b/ci/install-dependencies.sh
index d020cb7aa5..d1cb9fa878 100755
--- a/ci/install-dependencies.sh
+++ b/ci/install-dependencies.sh
@@ -58,6 +58,7 @@ ubuntu-*|ubuntu32-*|debian-*)
make libssl-dev libcurl4-openssl-dev libexpat-dev wget sudo default-jre \
tcl tk gettext zlib1g-dev perl-modules liberror-perl libauthen-sasl-perl \
libemail-valid-perl libio-pty-perl libio-socket-ssl-perl libnet-smtp-ssl-perl libdbd-sqlite3-perl libcgi-pm-perl \
+ libpcre2-dev meson ninja-build pkg-config \
${CC_PACKAGE:-${CC:-gcc}} $PYTHON_PACKAGE
case "$distro" in
@@ -90,6 +91,12 @@ macos-*)
sudo xattr -d com.apple.quarantine "$CUSTOM_PATH/p4" "$CUSTOM_PATH/p4d" 2>/dev/null || true
rm helix-core-server.tgz
+ case "$jobname" in
+ osx-meson)
+ brew install meson ninja pcre2
+ ;;
+ esac
+
if test -n "$CC_PACKAGE"
then
BREW_PACKAGE=${CC_PACKAGE/-/@}
diff --git a/ci/lib.sh b/ci/lib.sh
index 2e7a5f0540..b436f85541 100755
--- a/ci/lib.sh
+++ b/ci/lib.sh
@@ -236,7 +236,7 @@ then
CC="${CC_PACKAGE:-${CC:-gcc}}"
DONT_SKIP_TAGS=t
handle_failed_tests () {
- echo "FAILED_TEST_ARTIFACTS=t/failed-test-artifacts" >>$GITHUB_ENV
+ echo "FAILED_TEST_ARTIFACTS=${TEST_OUTPUT_DIRECTORY:-t}/failed-test-artifacts" >>$GITHUB_ENV
create_failed_test_artifacts
return 1
}
diff --git a/ci/print-test-failures.sh b/ci/print-test-failures.sh
index b1f80aeac3..655687dd82 100755
--- a/ci/print-test-failures.sh
+++ b/ci/print-test-failures.sh
@@ -46,7 +46,7 @@ do
;;
github-actions)
mkdir -p failed-test-artifacts
- echo "FAILED_TEST_ARTIFACTS=t/failed-test-artifacts" >>$GITHUB_ENV
+ echo "FAILED_TEST_ARTIFACTS=${TEST_OUTPUT_DIRECTORY:t}/failed-test-artifacts" >>$GITHUB_ENV
cp "${TEST_EXIT%.exit}.out" failed-test-artifacts/
tar czf failed-test-artifacts/"$test_name".trash.tar.gz "$trash_dir"
continue
diff --git a/ci/run-build-and-tests.sh b/ci/run-build-and-tests.sh
index 2e28d02b20..c4a41bba0b 100755
--- a/ci/run-build-and-tests.sh
+++ b/ci/run-build-and-tests.sh
@@ -48,12 +48,29 @@ pedantic)
;;
esac
-group Build make
-if test -n "$run_tests"
-then
- group "Run tests" make test ||
- handle_failed_tests
-fi
-check_unignored_build_artifacts
+case "$jobname" in
+*-meson)
+ group "Configure" meson setup build . \
+ --warnlevel 2 --werror \
+ --wrap-mode nofallback
+ group "Build" meson compile -C build --
+ if test -n "$run_tests"
+ then
+ group "Run tests" meson test -C build --print-errorlogs --test-args="$GIT_TEST_OPTS" || (
+ ./t/aggregate-results.sh "${TEST_OUTPUT_DIRECTORY:-t}/test-results"
+ handle_failed_tests
+ )
+ fi
+ ;;
+*)
+ group Build make
+ if test -n "$run_tests"
+ then
+ group "Run tests" make test ||
+ handle_failed_tests
+ fi
+ ;;
+esac
+check_unignored_build_artifacts
save_good_tree