qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Thomas Huth <thuth@redhat.com>
To: qemu-devel@nongnu.org
Cc: Peter Maydell <peter.maydell@linaro.org>,
	Pierrick Bouvier <pierrick.bouvier@linaro.org>
Subject: [PULL 44/44] .gitlab-ci.d: Make separate collapsible log sections for build and test
Date: Wed, 25 Sep 2024 13:10:25 +0200	[thread overview]
Message-ID: <20240925111029.24082-45-thuth@redhat.com> (raw)
In-Reply-To: <20240925111029.24082-1-thuth@redhat.com>

From: Peter Maydell <peter.maydell@linaro.org>

GitLab lets a CI job create its own collapsible log sections by
emitting special escape codes, as documented here:

https://docs.gitlab.com/ee/ci/yaml/script.html#expand-and-collapse-job-log-sections

Use these to make "configure", "build" and "test" separate
collapsible stages.

As recommended by the GitLab docs, we use some shell which is
sourced in the CI job to define functions to emit the magic
lines that start and end sections, to hide the ugliness of
the printf lines from the log.

Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
Reviewed-by: Thomas Huth <thuth@redhat.com>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Message-ID: <20240918125449.3125571-3-peter.maydell@linaro.org>
Signed-off-by: Thomas Huth <thuth@redhat.com>
---
 .gitlab-ci.d/buildtest-template.yml  | 14 ++++++++++++++
 .gitlab-ci.d/buildtest.yml           |  1 +
 .gitlab-ci.d/crossbuild-template.yml | 25 ++++++++++++++++++++++++
 scripts/ci/gitlab-ci-section         | 29 ++++++++++++++++++++++++++++
 4 files changed, 69 insertions(+)
 create mode 100644 scripts/ci/gitlab-ci-section

diff --git a/.gitlab-ci.d/buildtest-template.yml b/.gitlab-ci.d/buildtest-template.yml
index 5f2fc7e6f4..8c69c60d21 100644
--- a/.gitlab-ci.d/buildtest-template.yml
+++ b/.gitlab-ci.d/buildtest-template.yml
@@ -8,8 +8,11 @@
     key: "$CI_JOB_NAME"
     when: always
   before_script:
+    - source scripts/ci/gitlab-ci-section
+    - section_start setup "Pre-script setup"
     - JOBS=$(expr $(nproc) + 1)
     - cat /packages.txt
+    - section_end setup
   script:
     - export CCACHE_BASEDIR="$(pwd)"
     - export CCACHE_DIR="$CCACHE_BASEDIR/ccache"
@@ -19,6 +22,7 @@
     - mkdir build
     - cd build
     - ccache --zero-stats
+    - section_start configure "Running configure"
     - ../configure --enable-werror --disable-docs --enable-fdt=system
           ${TARGETS:+--target-list="$TARGETS"}
           $CONFIGURE_ARGS ||
@@ -27,11 +31,16 @@
       then
         pyvenv/bin/meson configure . -Dbackend_max_links="$LD_JOBS" ;
       fi || exit 1;
+    - section_end configure
+    - section_start build "Building QEMU"
     - $MAKE -j"$JOBS"
+    - section_end build
+    - section_start test "Running tests"
     - if test -n "$MAKE_CHECK_ARGS";
       then
         $MAKE -j"$JOBS" $MAKE_CHECK_ARGS ;
       fi
+    - section_end test
     - ccache --show-stats
 
 # We jump some hoops in common_test_job_template to avoid
@@ -54,6 +63,8 @@
   stage: test
   image: $CI_REGISTRY_IMAGE/qemu/$IMAGE:$QEMU_CI_CONTAINER_TAG
   script:
+    - source scripts/ci/gitlab-ci-section
+    - section_start buildenv "Setting up to run tests"
     - scripts/git-submodule.sh update roms/SLOF
     - meson subprojects download $(cd build/subprojects && echo *)
     - cd build
@@ -63,7 +74,10 @@
     - if [ "x${QEMU_TEST_CACHE_DIR}" != "x" ]; then
         $MAKE precache-functional ;
       fi
+    - section_end buildenv
+    - section_start test "Running tests"
     - $MAKE NINJA=":" $MAKE_CHECK_ARGS
+    - section_end test
 
 .native_test_job_template:
   extends: .common_test_job_template
diff --git a/.gitlab-ci.d/buildtest.yml b/.gitlab-ci.d/buildtest.yml
index 2ab8c4806e..87848c2ffe 100644
--- a/.gitlab-ci.d/buildtest.yml
+++ b/.gitlab-ci.d/buildtest.yml
@@ -188,6 +188,7 @@ build-previous-qemu:
     # Override the default flags as we need more to grab the old version
     GIT_FETCH_EXTRA_FLAGS: --prune --quiet
   before_script:
+    - source scripts/ci/gitlab-ci-section
     - export QEMU_PREV_VERSION="$(sed 's/\([0-9.]*\)\.[0-9]*/v\1.0/' VERSION)"
     - git remote add upstream https://gitlab.com/qemu-project/qemu
     - git fetch upstream refs/tags/$QEMU_PREV_VERSION:refs/tags/$QEMU_PREV_VERSION
diff --git a/.gitlab-ci.d/crossbuild-template.yml b/.gitlab-ci.d/crossbuild-template.yml
index d1cb7a35db..45a9810355 100644
--- a/.gitlab-ci.d/crossbuild-template.yml
+++ b/.gitlab-ci.d/crossbuild-template.yml
@@ -9,8 +9,11 @@
     when: always
   timeout: 80m
   before_script:
+    - source scripts/ci/gitlab-ci-section
+    - section_start setup "Pre-script setup"
     - JOBS=$(expr $(nproc) + 1)
     - cat /packages.txt
+    - section_end setup
   script:
     - export CCACHE_BASEDIR="$(pwd)"
     - export CCACHE_DIR="$CCACHE_BASEDIR/ccache"
@@ -19,22 +22,30 @@
     - mkdir build
     - cd build
     - ccache --zero-stats
+    - section_start configure "Running configure"
     - ../configure --enable-werror --disable-docs --enable-fdt=system
         --disable-user $QEMU_CONFIGURE_OPTS $EXTRA_CONFIGURE_OPTS
         --target-list-exclude="arm-softmmu
           i386-softmmu microblaze-softmmu mips-softmmu mipsel-softmmu
           mips64-softmmu ppc-softmmu riscv32-softmmu sh4-softmmu
           sparc-softmmu xtensa-softmmu $CROSS_SKIP_TARGETS"
+    - section_end configure
+    - section_start build "Building QEMU"
     - make -j"$JOBS" all check-build
+    - section_end build
+    - section_start test "Running tests"
     - if test -n "$MAKE_CHECK_ARGS";
       then
         $MAKE -j"$JOBS" $MAKE_CHECK_ARGS ;
       fi
+    - section_end test
+    - section_start installer "Building the installer"
     - if grep -q "EXESUF=.exe" config-host.mak;
       then make installer;
       version="$(git describe --match v[0-9]* 2>/dev/null || git rev-parse --short HEAD)";
       mv -v qemu-setup*.exe qemu-setup-${version}.exe;
       fi
+    - section_end installer
     - ccache --show-stats
 
 # Job to cross-build specific accelerators.
@@ -52,6 +63,7 @@
       - ccache/
     key: "$CI_JOB_NAME"
   before_script:
+    - source scripts/ci/gitlab-ci-section
     - JOBS=$(expr $(nproc) + 1)
   script:
     - export CCACHE_BASEDIR="$(pwd)"
@@ -60,13 +72,19 @@
     - export PATH="$CCACHE_WRAPPERSDIR:$PATH"
     - mkdir build
     - cd build
+    - section_start configure "Running configure"
     - ../configure --enable-werror --disable-docs $QEMU_CONFIGURE_OPTS
         --disable-tools --enable-${ACCEL:-kvm} $EXTRA_CONFIGURE_OPTS
+    - section_end configure
+    - section_start build "Building QEMU"
     - make -j"$JOBS" all check-build
+    - section_end build
+    - section_start test "Running tests"
     - if test -n "$MAKE_CHECK_ARGS";
       then
         $MAKE -j"$JOBS" $MAKE_CHECK_ARGS ;
       fi
+    - section_end test
 
 .cross_user_build_job:
   extends: .base_job_template
@@ -77,6 +95,7 @@
       - ccache/
     key: "$CI_JOB_NAME"
   before_script:
+    - source scripts/ci/gitlab-ci-section
     - JOBS=$(expr $(nproc) + 1)
   script:
     - export CCACHE_BASEDIR="$(pwd)"
@@ -84,16 +103,22 @@
     - export CCACHE_MAXSIZE="500M"
     - mkdir build
     - cd build
+    - section_start configure "Running configure"
     - ../configure --enable-werror --disable-docs $QEMU_CONFIGURE_OPTS
         --disable-system --target-list-exclude="aarch64_be-linux-user
           alpha-linux-user m68k-linux-user microblazeel-linux-user
           or1k-linux-user ppc-linux-user sparc-linux-user
           xtensa-linux-user $CROSS_SKIP_TARGETS"
+    - section_end configure
+    - section_start build "Building QEMU"
     - make -j"$JOBS" all check-build
+    - section_end build
+    - section_start test "Running tests"
     - if test -n "$MAKE_CHECK_ARGS";
       then
         $MAKE -j"$JOBS" $MAKE_CHECK_ARGS ;
       fi
+    - section_end test
 
 # We can still run some tests on some of our cross build jobs. They can add this
 # template to their extends to save the build logs and test results
diff --git a/scripts/ci/gitlab-ci-section b/scripts/ci/gitlab-ci-section
new file mode 100644
index 0000000000..9bbe80420d
--- /dev/null
+++ b/scripts/ci/gitlab-ci-section
@@ -0,0 +1,29 @@
+# Copyright (c) 2024 Linaro Ltd
+# SPDX-License-Identifier: GPL-2.0-or-later
+
+# gitlab-ci-section: This is a shell script fragment which defines
+# functions section_start and section_end which will emit marker lines
+# that GitLab will interpret as the beginning or end of a "collapsible
+# section" in a CI job log. See
+# https://docs.gitlab.com/ee/ci/yaml/script.html#expand-and-collapse-job-log-sections
+#
+# This is intended to be sourced in the before_script section of
+# a CI config; the section_start and section_end functions will
+# then be available for use in the before_script and script sections.
+
+# Section names are [-_.A-Za-z0-9] and the section_start pairs with
+# a section_end with the same section name.
+# The description can be any printable text without newlines; this is
+# what will appear in the log.
+
+# Usage:
+# section_start section_name "Description of the section"
+section_start () {
+    printf "section_start:%s:%s\r\e[0K%s\n" "$(date +%s)" "$1" "$2"
+}
+
+# Usage:
+# section_end section_name
+section_end () {
+    printf "section_end:%s:%s\r\e[0K\n" "$(date +%s)" "$1"
+}
-- 
2.46.0



  parent reply	other threads:[~2024-09-25 11:14 UTC|newest]

Thread overview: 49+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-09-25 11:09 [PULL 00/44] Functional test conversion, and assert(0) cleanup Thomas Huth
2024-09-25 11:09 ` [PULL 01/44] tests/functional/qemu_test: Add a function for launching kernels more easily Thomas Huth
2024-09-25 11:09 ` [PULL 02/44] tests/functional: Convert the vexpressa9 Avocado test Thomas Huth
2024-09-30 16:47   ` Peter Maydell
2024-09-30 17:21     ` Thomas Huth
2024-09-25 11:09 ` [PULL 03/44] tests/functional: Convert the xtensa lx60 " Thomas Huth
2024-09-25 11:09 ` [PULL 04/44] tests/functional: Convert the SPARCStation " Thomas Huth
2024-09-25 11:09 ` [PULL 05/44] tests/functional: Convert the e500 ppc64 " Thomas Huth
2024-09-25 11:09 ` [PULL 06/44] tests/functional: Convert the mac ppc Avocado tests Thomas Huth
2024-09-25 11:09 ` [PULL 07/44] tests/functional: Convert the r2d sh4 Avocado test Thomas Huth
2024-09-25 11:09 ` [PULL 08/44] tests/functional: Convert the powernv tests from boot_linux_console.py Thomas Huth
2024-09-25 11:09 ` [PULL 09/44] hw/acpi: replace assert(0) with g_assert_not_reached() Thomas Huth
2024-09-25 11:09 ` [PULL 10/44] hw/arm: " Thomas Huth
2024-09-25 11:09 ` [PULL 11/44] hw/net: " Thomas Huth
2024-09-25 11:09 ` [PULL 12/44] migration: " Thomas Huth
2024-09-25 11:09 ` [PULL 13/44] qobject: " Thomas Huth
2024-09-25 11:09 ` [PULL 14/44] target/ppc: " Thomas Huth
2024-09-25 11:09 ` [PULL 15/44] block: replace assert(false) " Thomas Huth
2024-09-25 11:09 ` [PULL 16/44] hw/hyperv: " Thomas Huth
2024-09-25 11:09 ` [PULL 17/44] hw/net: " Thomas Huth
2024-09-25 11:09 ` [PULL 18/44] hw/nvme: " Thomas Huth
2024-09-25 11:10 ` [PULL 19/44] hw/pci: " Thomas Huth
2024-09-25 11:10 ` [PULL 20/44] hw/ppc: " Thomas Huth
2024-09-25 11:10 ` [PULL 21/44] migration: " Thomas Huth
2024-09-25 11:10 ` [PULL 22/44] target/i386/kvm: " Thomas Huth
2024-09-25 11:10 ` [PULL 23/44] accel/tcg: remove break after g_assert_not_reached() Thomas Huth
2024-09-25 11:10 ` [PULL 24/44] block: " Thomas Huth
2024-09-25 11:10 ` [PULL 25/44] hw/acpi: " Thomas Huth
2024-09-25 11:10 ` [PULL 26/44] hw/net: " Thomas Huth
2024-09-25 11:10 ` [PULL 27/44] hw/scsi: " Thomas Huth
2024-09-25 11:10 ` [PULL 28/44] hw/tpm: " Thomas Huth
2024-09-25 11:10 ` [PULL 29/44] target/arm: " Thomas Huth
2024-09-25 11:10 ` [PULL 30/44] target/riscv: " Thomas Huth
2024-09-25 11:10 ` [PULL 31/44] fpu: " Thomas Huth
2024-09-25 11:10 ` [PULL 32/44] tcg/loongarch64: " Thomas Huth
2024-09-25 11:10 ` [PULL 33/44] include/qemu: remove return " Thomas Huth
2024-09-25 11:10 ` [PULL 34/44] hw/hyperv: " Thomas Huth
2024-09-25 11:10 ` [PULL 35/44] hw/net: " Thomas Huth
2024-09-25 11:10 ` [PULL 36/44] hw/pci: " Thomas Huth
2024-09-25 11:10 ` [PULL 37/44] hw/ppc: " Thomas Huth
2024-09-25 11:10 ` [PULL 38/44] migration: " Thomas Huth
2024-09-25 11:10 ` [PULL 39/44] qobject: " Thomas Huth
2024-09-25 11:10 ` [PULL 40/44] qom: " Thomas Huth
2024-09-25 11:10 ` [PULL 41/44] tests/qtest: " Thomas Huth
2024-09-25 11:10 ` [PULL 42/44] scripts/checkpatch.pl: emit error when using assert(false) Thomas Huth
2024-09-25 11:10 ` [PULL 43/44] .gitlab-ci.d: Split build and test in cross build job templates Thomas Huth
2024-09-25 11:10 ` Thomas Huth [this message]
2024-09-25 17:24 ` [PULL 00/44] Functional test conversion, and assert(0) cleanup Pierrick Bouvier
2024-09-28 13:37 ` Peter Maydell

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20240925111029.24082-45-thuth@redhat.com \
    --to=thuth@redhat.com \
    --cc=peter.maydell@linaro.org \
    --cc=pierrick.bouvier@linaro.org \
    --cc=qemu-devel@nongnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).