]> Kevux Git Server - rit/commitdiff
ci: wire up Meson builds
authorPatrick Steinhardt <ps@pks.im>
Fri, 13 Dec 2024 10:41:23 +0000 (11:41 +0100)
committerJunio C Hamano <gitster@pobox.com>
Fri, 13 Dec 2024 14:48:47 +0000 (06:48 -0800)
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>
.github/workflows/main.yml
.gitlab-ci.yml
ci/install-dependencies.sh
ci/lib.sh
ci/print-test-failures.sh
ci/run-build-and-tests.sh

index 808ddc1..c231419 100644 (file)
@@ -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
index a1bc928..3eec72d 100644 (file)
@@ -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
index d020cb7..d1cb9fa 100755 (executable)
@@ -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/-/@}
index 2e7a5f0..b436f85 100755 (executable)
--- 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
        }
index b1f80ae..655687d 100755 (executable)
@@ -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
index 2e28d02..c4a41bb 100755 (executable)
@@ -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