From ce2f24c510aa6f4856d81d796ef34ac97d78f500 Mon Sep 17 00:00:00 2001 From: Peter Hutterer Date: Tue, 20 Feb 2024 09:36:23 +1000 Subject: [PATCH] CI: switch to the meson-build.sh helper script This script does the same thing but has a few more toggles than our custom script which means we can set everything we need in the gitlab-ci.yml file and have it DTRT. Part-of: --- .gitlab-ci.yml | 12 +- ...ld-and-test.sh => check-piglit-results.sh} | 9 +- .gitlab-ci/meson-build.sh | 145 ++++++++++++++++++ 3 files changed, 156 insertions(+), 10 deletions(-) rename .gitlab-ci/{build-and-test.sh => check-piglit-results.sh} (61%) create mode 100755 .gitlab-ci/meson-build.sh diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 99059c569..7c0af2546 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -64,6 +64,7 @@ debian-bullseye: - $MESON_BUILDDIR/meson-logs/ - $MESON_BUILDDIR/test/piglit-results/ variables: + MESON_ARGS: -Dc_args="-fno-common" -Dprefix=/usr -Dxephyr=true -Dwerror=true CCACHE_COMPILERCHECK: content CCACHE_DIR: /cache/xserver/cache LC_ALL: C.UTF-8 @@ -77,19 +78,24 @@ debian-bullseye: meson: extends: .common-build-and-test script: - - .gitlab-ci/build-and-test.sh + - .gitlab-ci/meson-build.sh --run-test + - .gitlab-ci/check-piglit-results.sh - .gitlab-ci/manpages-check + variables: + XTEST_DIR: /root/xts + PIGLIT_DIR: /root/piglit + LP_NUM_THREADS: 0 meson-noglamor: extends: meson variables: - MESON_EXTRA_OPTIONS: > + MESON_EXTRA_ARGS: > -Dglamor=false meson-nolibdecor: extends: meson variables: - MESON_EXTRA_OPTIONS: > + MESON_EXTRA_ARGS: > -Dlibdecor=false mingw-cross-build: diff --git a/.gitlab-ci/build-and-test.sh b/.gitlab-ci/check-piglit-results.sh similarity index 61% rename from .gitlab-ci/build-and-test.sh rename to .gitlab-ci/check-piglit-results.sh index 346c9d739..182579ed2 100755 --- a/.gitlab-ci/build-and-test.sh +++ b/.gitlab-ci/check-piglit-results.sh @@ -4,7 +4,8 @@ set -e set -o xtrace if [[ -z "$MESON_BUILDDIR" ]]; then - MESON_BUILDDIR=build + echo "\$MESON_BUILDDIR not set" + exit 1 fi check_piglit_results () @@ -24,12 +25,6 @@ check_piglit_results () exit 1 } -meson -Dc_args="-fno-common" -Dprefix=/usr -Dxephyr=true -Dwerror=true $MESON_EXTRA_OPTIONS "$MESON_BUILDDIR/" - -export PIGLIT_DIR=/root/piglit XTEST_DIR=/root/xts LP_NUM_THREADS=0 -ninja -j${FDO_CI_CONCURRENT:-4} -C "$MESON_BUILDDIR/" -meson test --num-processes ${FDO_CI_CONCURRENT:-4} --print-errorlogs -C "$MESON_BUILDDIR/" - check_piglit_results xephyr-glamor hw/kdrive/ephyr/Xephyr.p/ephyr_glamor.c.o check_piglit_results xvfb hw/vfb/Xvfb check_piglit_results xwayland hw/xwayland/Xwayland diff --git a/.gitlab-ci/meson-build.sh b/.gitlab-ci/meson-build.sh new file mode 100755 index 000000000..abc50b1c2 --- /dev/null +++ b/.gitlab-ci/meson-build.sh @@ -0,0 +1,145 @@ +#!/usr/bin/env bash +# +# This script is sourced from here: +# https://gitlab.freedesktop.org/whot/meson-helper +# +# SPDX-License-Identifier: MIT +# +# Usage: +# meson-build.sh +# [-C directory] ... change to directory before doing anything +# [--skip-build] ... skip the compilation +# [--skip-test|--run-test] ... skip or explicitly run meson test +# [--skip-dist|--run-dist] ... skip or explicitly run meson dist +# [--skip-install|--run-install] ... skip or explicitly run meson install +# +# +# Environment variables: +# If the .meson_environment file exists in $PWD, it is sourced at the start of the script. +# This file is sourced before the -C directory option takes effect. +# +# MESON_BUILDDIR +# MESON_ARGS, MESON_EXTRA_ARGS: +# Args passed to meson setup. The MESON_EXTRA_ARGS exist to make it easier for +# callers to have a default set of arguments and a variable set of arguments. +# MESON_TEST_ARGS, MESON_DIST_ARGS, MESON_INSTALL_ARGS: +# Args passed directly to the respective meson command. If these args are set it implies +# --run-$cmd. Use --skip-$cmd to skip. +# NINJA_ARGS - args passed to ninja via meson compile + +set -x +if [[ -f .meson_environment ]]; then + . .meson_environment +fi + +# If test args are set, we assume we want to run the tests +MESON_RUN_TEST="$MESON_TEST_ARGS" +MESON_RUN_INSTALL="$MESON_INSTALL_ARGS" +MESON_RUN_DIST="$MESON_DIST_ARGS" + +while [[ $# -gt 0 ]]; do + case $1 in + -C) + directory=$2 + shift 2 + pushd "$directory" || exit 1 + ;; + --skip-setup) + shift + MESON_SKIP_SETUP="1" + ;; + --skip-build) + shift + MESON_SKIP_BUILD="1" + ;; + --skip-test) + shift + MESON_RUN_TEST="" + ;; + --run-test) + shift + MESON_RUN_TEST="1" + ;; + --skip-dist) + shift + MESON_RUN_DIST="" + ;; + --run-dist) + shift + MESON_RUN_DIST="1" + ;; + --skip-install) + shift + MESON_RUN_INSTALL="" + ;; + --run-install) + shift + MESON_RUN_INSTALL="1" + ;; + *) + echo "Unknow commandline argument $1" + exit 1 + ;; + esac +done + +if [[ -z "$MESON_BUILDDIR" ]]; then + echo "\$MESON_BUILDDIR undefined." + exit 1 +fi + +# emulate a few gitlab variables to make it easier to +# run and debug locally. +if [[ -z "$CI_JOB_ID" ]] || [[ -z "$CI_JOB_NAME" ]]; then + echo "Missing \$CI_JOB_ID or \$CI_JOB_NAME". + CI_PROJECT_NAME=$(basename "$PWD") + CI_JOB_ID=$(date +%s) + CI_JOB_NAME="$CI_PROJECT_NAME-job-local" + echo "Simulating gitlab environment: " + echo " CI_JOB_ID=$CI_JOB_ID" + echo " CI_JOB_NAME=$CI_JOB_NAME" +fi + +if [[ -n "$FDO_CI_CONCURRENT" ]]; then + jobcount="-j$FDO_CI_CONCURRENT" + export MESON_TESTTHREADS="$FDO_CI_CONCURRENT" +fi + +if [[ -n "$MESON_EXTRA_ARGS" ]]; then + MESON_ARGS="$MESON_ARGS $MESON_EXTRA_ARGS" +fi + +echo "*************************************************" +echo "builddir: $MESON_BUILDDIR" +echo "meson args: $MESON_ARGS" +echo "ninja args: $NINJA_ARGS" +echo "meson test args: $MESON_TEST_ARGS" +echo "job count: ${jobcount-0}" +echo "*************************************************" + +set -e + +if [[ -z "$MESON_SKIP_SETUP" ]]; then + rm -rf "$MESON_BUILDDIR" + meson setup "$MESON_BUILDDIR" $MESON_ARGS +fi +meson configure "$MESON_BUILDDIR" + +if [[ -z "$MESON_SKIP_BUILD" ]]; then + if [[ -n "$NINJA_ARGS" ]]; then + ninja_args="--ninja-args $NINJA_ARGS" + fi + meson compile -v -C "$MESON_BUILDDIR" $jobcount $ninja_args +fi + +if [[ -n "$MESON_RUN_TEST" ]]; then + meson test -C "$MESON_BUILDDIR" --print-errorlogs $MESON_TEST_ARGS +fi + +if [[ -n "$MESON_RUN_INSTALL" ]]; then + meson install --no-rebuild -C "$MESON_BUILDDIR" $MESON_INSTALL_ARGS +fi + +if [[ -n "$MESON_RUN_DIST" ]]; then + meson dist -C "$MESON_BUILDDIR" $MESON_DIST_ARGS +fi