From 1275cca2fcfc4846969aa51e8b6667bb7de29818 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20P=2E=20Berrang=C3=A9?= Date: Wed, 24 Jun 2026 13:46:52 +0100 Subject: [PATCH 1/6] gitlab: remove unused .cross_test_artifacts template MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This is unused since commit 0d1137550bbf3af7ebe34801a9bff5a4839cc34e Author: Richard Henderson Date: Thu Dec 18 09:58:33 2025 +1100 gitlab: Remove 32-bit host testing Signed-off-by: Daniel P. Berrangé Reviewed-by: Pierrick Bouvier Reviewed-by: Philippe Mathieu-Daudé Link: https://lore.kernel.org/qemu-devel/20260624124657.2725376-2-berrange@redhat.com Signed-off-by: Pierrick Bouvier --- .gitlab-ci.d/crossbuild-template.yml | 12 ------------ 1 file changed, 12 deletions(-) diff --git a/.gitlab-ci.d/crossbuild-template.yml b/.gitlab-ci.d/crossbuild-template.yml index 58136d06e4..786c5cdb88 100644 --- a/.gitlab-ci.d/crossbuild-template.yml +++ b/.gitlab-ci.d/crossbuild-template.yml @@ -119,15 +119,3 @@ $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 -.cross_test_artifacts: - artifacts: - name: "$CI_JOB_NAME-$CI_COMMIT_REF_SLUG" - when: always - expire_in: 7 days - paths: - - build/meson-logs - reports: - junit: build/meson-logs/*.junit.xml From 4fa56eaa75742404e5554240eb25071b872d9270 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20P=2E=20Berrang=C3=A9?= Date: Wed, 24 Jun 2026 13:46:53 +0100 Subject: [PATCH 2/6] gitlab: move .meson_job_template into base.yaml MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Rename .meson_job_template to .base_meson_job_template and move it into base.yml, in prep for wider reuse. Signed-off-by: Daniel P. Berrangé Reviewed-by: Pierrick Bouvier Link: https://lore.kernel.org/qemu-devel/20260624124657.2725376-3-berrange@redhat.com Signed-off-by: Pierrick Bouvier --- .gitlab-ci.d/base.yml | 14 ++++++++++++++ .gitlab-ci.d/buildtest-template.yml | 20 +++----------------- 2 files changed, 17 insertions(+), 17 deletions(-) diff --git a/.gitlab-ci.d/base.yml b/.gitlab-ci.d/base.yml index 714d2ed8a6..94107579fe 100644 --- a/.gitlab-ci.d/base.yml +++ b/.gitlab-ci.d/base.yml @@ -134,3 +134,17 @@ variables: QEMU_CI_CONTAINER_TAG: $CI_COMMIT_REF_SLUG - when: on_success + +# Any job running meson should capture meson logs +# by default. Some jobs might override the artifacts +# to capture further files +.base_meson_job_template: + extends: .base_job_template + artifacts: + name: "$CI_JOB_NAME-$CI_COMMIT_REF_SLUG" + when: always + expire_in: 7 days + paths: + - build/meson-logs + reports: + junit: build/meson-logs/*.junit.xml diff --git a/.gitlab-ci.d/buildtest-template.yml b/.gitlab-ci.d/buildtest-template.yml index 005058625e..0fa2351d87 100644 --- a/.gitlab-ci.d/buildtest-template.yml +++ b/.gitlab-ci.d/buildtest-template.yml @@ -1,20 +1,6 @@ -# Any job running meson should capture meson logs -# by default. Some jobs might override the artifacts -# to capture further files -.meson_job_template: - extends: .base_job_template - artifacts: - name: "$CI_JOB_NAME-$CI_COMMIT_REF_SLUG" - when: always - expire_in: 7 days - paths: - - build/meson-logs - reports: - junit: build/meson-logs/*.junit.xml - .native_build_job_template: - extends: .meson_job_template + extends: .base_meson_job_template stage: build image: $CI_REGISTRY_IMAGE/qemu/$IMAGE:$QEMU_CI_CONTAINER_TAG cache: @@ -75,7 +61,7 @@ - build/**/*.c.o.d .common_test_job_template: - extends: .meson_job_template + extends: .base_meson_job_template stage: test image: $CI_REGISTRY_IMAGE/qemu/$IMAGE:$QEMU_CI_CONTAINER_TAG script: @@ -133,7 +119,7 @@ QEMU_JOB_FUNCTIONAL: 1 .wasm_build_job_template: - extends: .meson_job_template + extends: .base_meson_job_template stage: build image: $CI_REGISTRY_IMAGE/qemu/$IMAGE:$QEMU_CI_CONTAINER_TAG before_script: From ef4e75e5ab78e176dd4b7dfceb5a56857b22cdf9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20P=2E=20Berrang=C3=A9?= Date: Wed, 24 Jun 2026 13:46:54 +0100 Subject: [PATCH 3/6] gitlab: use .base_meson_job_template from crossbuild jobs MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This ensures that crossbuild jobs capture the build/meson-logs content as artifacts to aid in debugging. Signed-off-by: Daniel P. Berrangé Reviewed-by: Pierrick Bouvier Link: https://lore.kernel.org/qemu-devel/20260624124657.2725376-4-berrange@redhat.com Signed-off-by: Pierrick Bouvier --- .gitlab-ci.d/crossbuild-template.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.gitlab-ci.d/crossbuild-template.yml b/.gitlab-ci.d/crossbuild-template.yml index 786c5cdb88..36bb9a405c 100644 --- a/.gitlab-ci.d/crossbuild-template.yml +++ b/.gitlab-ci.d/crossbuild-template.yml @@ -1,5 +1,5 @@ .cross_system_build_job: - extends: .base_job_template + extends: .base_meson_job_template stage: build image: $CI_REGISTRY_IMAGE/qemu/$IMAGE:$QEMU_CI_CONTAINER_TAG cache: @@ -54,7 +54,7 @@ # KVM), and set extra options (such disabling other accelerators) via the # $EXTRA_CONFIGURE_OPTS variable. .cross_accel_build_job: - extends: .base_job_template + extends: .base_meson_job_template stage: build image: $CI_REGISTRY_IMAGE/qemu/$IMAGE:$QEMU_CI_CONTAINER_TAG timeout: 60m @@ -87,7 +87,7 @@ - section_end test .cross_user_build_job: - extends: .base_job_template + extends: .base_meson_job_template stage: build image: $CI_REGISTRY_IMAGE/qemu/$IMAGE:$QEMU_CI_CONTAINER_TAG cache: From 49cd30eea1ce4d5094a84f7dea4dec7f80d0d1e5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20P=2E=20Berrang=C3=A9?= Date: Wed, 24 Jun 2026 13:46:55 +0100 Subject: [PATCH 4/6] gitlab: pull ccache setup into .base_meson_ccache_job_template MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This provides a consistent ccache setup across all build jobs. Signed-off-by: Daniel P. Berrangé Reviewed-by: Pierrick Bouvier Link: https://lore.kernel.org/qemu-devel/20260624124657.2725376-5-berrange@redhat.com Signed-off-by: Pierrick Bouvier --- .gitlab-ci.d/base.yml | 16 +++++++++++++ .gitlab-ci.d/buildtest-template.yml | 14 ++--------- .gitlab-ci.d/crossbuild-template.yml | 35 +++++----------------------- 3 files changed, 24 insertions(+), 41 deletions(-) diff --git a/.gitlab-ci.d/base.yml b/.gitlab-ci.d/base.yml index 94107579fe..366e654bcb 100644 --- a/.gitlab-ci.d/base.yml +++ b/.gitlab-ci.d/base.yml @@ -148,3 +148,19 @@ variables: - build/meson-logs reports: junit: build/meson-logs/*.junit.xml + +.base_meson_ccache_job_template: + extends: .base_meson_job_template + cache: + paths: + - ccache + key: "$CI_JOB_NAME" + when: always + script: + - export CCACHE_BASEDIR="$(pwd)" + - export CCACHE_DIR="$CCACHE_BASEDIR/ccache" + - export CCACHE_MAXSIZE="500M" + - export PATH="$CCACHE_WRAPPERSDIR:$PATH" + - ccache --zero-stats + after_script: + - ccache --show-stats diff --git a/.gitlab-ci.d/buildtest-template.yml b/.gitlab-ci.d/buildtest-template.yml index 0fa2351d87..8dfd17a0b5 100644 --- a/.gitlab-ci.d/buildtest-template.yml +++ b/.gitlab-ci.d/buildtest-template.yml @@ -1,13 +1,8 @@ .native_build_job_template: - extends: .base_meson_job_template + extends: .base_meson_ccache_job_template stage: build image: $CI_REGISTRY_IMAGE/qemu/$IMAGE:$QEMU_CI_CONTAINER_TAG - cache: - paths: - - ccache - key: "$CI_JOB_NAME" - when: always before_script: - source scripts/ci/gitlab-ci-section - section_start setup "Pre-script setup" @@ -15,14 +10,10 @@ - cat /packages.txt - section_end setup script: - - export CCACHE_BASEDIR="$(pwd)" - - export CCACHE_DIR="$CCACHE_BASEDIR/ccache" - - export CCACHE_MAXSIZE="500M" - - export PATH="$CCACHE_WRAPPERSDIR:$PATH" + - !reference [.base_meson_ccache_job_template, script] - du -sh .git - mkdir build - cd build - - ccache --zero-stats - section_start configure "Running configure" - ../configure --enable-werror --disable-docs --enable-fdt=system --disable-debug-info @@ -43,7 +34,6 @@ $MAKE -j"$JOBS" $MAKE_CHECK_ARGS ; fi - section_end test - - ccache --show-stats # We jump some hoops in common_test_job_template to avoid # rebuilding all the object files we skip in the artifacts diff --git a/.gitlab-ci.d/crossbuild-template.yml b/.gitlab-ci.d/crossbuild-template.yml index 36bb9a405c..aadae26844 100644 --- a/.gitlab-ci.d/crossbuild-template.yml +++ b/.gitlab-ci.d/crossbuild-template.yml @@ -1,12 +1,7 @@ .cross_system_build_job: - extends: .base_meson_job_template + extends: .base_meson_ccache_job_template stage: build image: $CI_REGISTRY_IMAGE/qemu/$IMAGE:$QEMU_CI_CONTAINER_TAG - cache: - paths: - - ccache - key: "$CI_JOB_NAME" - when: always timeout: 80m before_script: - source scripts/ci/gitlab-ci-section @@ -15,13 +10,9 @@ - cat /packages.txt - section_end setup script: - - export CCACHE_BASEDIR="$(pwd)" - - export CCACHE_DIR="$CCACHE_BASEDIR/ccache" - - export CCACHE_MAXSIZE="500M" - - export PATH="$CCACHE_WRAPPERSDIR:$PATH" + - !reference [.base_meson_ccache_job_template, script] - 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 @@ -46,7 +37,6 @@ mv -v qemu-setup*.exe qemu-setup-${version}.exe; fi - section_end installer - - ccache --show-stats # Job to cross-build specific accelerators. # @@ -54,22 +44,15 @@ # KVM), and set extra options (such disabling other accelerators) via the # $EXTRA_CONFIGURE_OPTS variable. .cross_accel_build_job: - extends: .base_meson_job_template + extends: .base_meson_ccache_job_template stage: build image: $CI_REGISTRY_IMAGE/qemu/$IMAGE:$QEMU_CI_CONTAINER_TAG timeout: 60m - cache: - paths: - - ccache/ - key: "$CI_JOB_NAME" before_script: - source scripts/ci/gitlab-ci-section - JOBS=$(expr $(nproc) + 1) script: - - export CCACHE_BASEDIR="$(pwd)" - - export CCACHE_DIR="$CCACHE_BASEDIR/ccache" - - export CCACHE_MAXSIZE="500M" - - export PATH="$CCACHE_WRAPPERSDIR:$PATH" + - !reference [.base_meson_ccache_job_template, script] - mkdir build - cd build - section_start configure "Running configure" @@ -87,20 +70,14 @@ - section_end test .cross_user_build_job: - extends: .base_meson_job_template + extends: .base_meson_ccache_job_template stage: build image: $CI_REGISTRY_IMAGE/qemu/$IMAGE:$QEMU_CI_CONTAINER_TAG - cache: - paths: - - ccache/ - key: "$CI_JOB_NAME" before_script: - source scripts/ci/gitlab-ci-section - JOBS=$(expr $(nproc) + 1) script: - - export CCACHE_BASEDIR="$(pwd)" - - export CCACHE_DIR="$CCACHE_BASEDIR/ccache" - - export CCACHE_MAXSIZE="500M" + - !reference [.base_meson_ccache_job_template, script] - mkdir build - cd build - section_start configure "Running configure" From 3fbac8fc83ed1c73c968fd5f068acf1c840c369e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20P=2E=20Berrang=C3=A9?= Date: Wed, 24 Jun 2026 13:46:56 +0100 Subject: [PATCH 5/6] gitlab: pull before_script logic into .base_meson_job_template MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This ensures that all jobs have the $JOBS env set and capture the packages.txt content (where available) in their logs, and all use the job section headers. Signed-off-by: Daniel P. Berrangé Reviewed-by: Pierrick Bouvier Link: https://lore.kernel.org/qemu-devel/20260624124657.2725376-6-berrange@redhat.com Signed-off-by: Pierrick Bouvier --- .gitlab-ci.d/base.yml | 9 +++++++++ .gitlab-ci.d/buildtest-template.yml | 24 ++---------------------- .gitlab-ci.d/crossbuild-template.yml | 12 ------------ 3 files changed, 11 insertions(+), 34 deletions(-) diff --git a/.gitlab-ci.d/base.yml b/.gitlab-ci.d/base.yml index 366e654bcb..fa0ca94048 100644 --- a/.gitlab-ci.d/base.yml +++ b/.gitlab-ci.d/base.yml @@ -148,6 +148,15 @@ variables: - build/meson-logs reports: junit: build/meson-logs/*.junit.xml + before_script: + - source scripts/ci/gitlab-ci-section + - section_start setup "Pre-script setup" + - JOBS=$(expr $(nproc) + 1) + # Prevent logs (if any) from prior build job artifacts + # from being duplicated in the new job artifacts + - rm -f build/meson-logs/* + - test -f /packages.txt && cat /packages.txt + - section_end setup .base_meson_ccache_job_template: extends: .base_meson_job_template diff --git a/.gitlab-ci.d/buildtest-template.yml b/.gitlab-ci.d/buildtest-template.yml index 8dfd17a0b5..11d7a75667 100644 --- a/.gitlab-ci.d/buildtest-template.yml +++ b/.gitlab-ci.d/buildtest-template.yml @@ -3,12 +3,6 @@ extends: .base_meson_ccache_job_template stage: build image: $CI_REGISTRY_IMAGE/qemu/$IMAGE:$QEMU_CI_CONTAINER_TAG - 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: - !reference [.base_meson_ccache_job_template, script] - du -sh .git @@ -74,11 +68,6 @@ .native_test_job_template: extends: .common_test_job_template - before_script: - # Prevent logs from the build job that run earlier - # from being duplicated in the test job artifacts - - rm -f build/meson-logs/* - .functional_test_job_template: extends: .common_test_job_template @@ -96,27 +85,18 @@ - build/tests/functional/*/*/*.log reports: junit: build/meson-logs/*.junit.xml - before_script: - - export QEMU_TEST_ALLOW_UNTRUSTED_CODE=1 - - export QEMU_TEST_CACHE_DIR=${CI_PROJECT_DIR}/functional-cache - # Prevent logs from the build job that run earlier - # from being duplicated in the test job artifacts - - rm -f build/meson-logs/* after_script: - cd build - du -chs ${CI_PROJECT_DIR}/*-cache variables: QEMU_JOB_FUNCTIONAL: 1 + QEMU_TEST_ALLOW_UNTRUSTED_CODE: 1 + QEMU_TEST_CACHE_DIR: ${CI_PROJECT_DIR}/functional-cache .wasm_build_job_template: extends: .base_meson_job_template stage: build image: $CI_REGISTRY_IMAGE/qemu/$IMAGE:$QEMU_CI_CONTAINER_TAG - before_script: - - source scripts/ci/gitlab-ci-section - - section_start setup "Pre-script setup" - - JOBS=$(expr $(nproc) + 1) - - section_end setup script: - du -sh .git - mkdir build diff --git a/.gitlab-ci.d/crossbuild-template.yml b/.gitlab-ci.d/crossbuild-template.yml index aadae26844..94423814a7 100644 --- a/.gitlab-ci.d/crossbuild-template.yml +++ b/.gitlab-ci.d/crossbuild-template.yml @@ -3,12 +3,6 @@ stage: build image: $CI_REGISTRY_IMAGE/qemu/$IMAGE:$QEMU_CI_CONTAINER_TAG 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: - !reference [.base_meson_ccache_job_template, script] - mkdir build @@ -48,9 +42,6 @@ stage: build image: $CI_REGISTRY_IMAGE/qemu/$IMAGE:$QEMU_CI_CONTAINER_TAG timeout: 60m - before_script: - - source scripts/ci/gitlab-ci-section - - JOBS=$(expr $(nproc) + 1) script: - !reference [.base_meson_ccache_job_template, script] - mkdir build @@ -73,9 +64,6 @@ extends: .base_meson_ccache_job_template stage: build image: $CI_REGISTRY_IMAGE/qemu/$IMAGE:$QEMU_CI_CONTAINER_TAG - before_script: - - source scripts/ci/gitlab-ci-section - - JOBS=$(expr $(nproc) + 1) script: - !reference [.base_meson_ccache_job_template, script] - mkdir build From 94809d5d9b71fd3217e5587282563681f8233723 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20P=2E=20Berrang=C3=A9?= Date: Wed, 24 Jun 2026 13:46:57 +0100 Subject: [PATCH 6/6] gitlab: greatly expand captured info about CI runner environment MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit To aid in debugging wierd CI failures we need greater information about the CI runner environment. It is usually container based and can have some unexpected characteristics that significantly differ from a developer's local environment. This captures the mount list, CPU model, memory information, device node lists, kernel info, user identity and all environment variables. Since this information can get quite large it is not emitted directly in the logs, rather it is exposed in job artifacts under the "ci-runner-env" directory. Signed-off-by: Daniel P. Berrangé Reviewed-by: Pierrick Bouvier Link: https://lore.kernel.org/qemu-devel/20260624124657.2725376-7-berrange@redhat.com Signed-off-by: Pierrick Bouvier --- .gitlab-ci.d/base.yml | 11 ++++++++++- .gitlab-ci.d/buildtest-template.yml | 2 ++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/.gitlab-ci.d/base.yml b/.gitlab-ci.d/base.yml index fa0ca94048..8fe0080935 100644 --- a/.gitlab-ci.d/base.yml +++ b/.gitlab-ci.d/base.yml @@ -146,6 +146,7 @@ variables: expire_in: 7 days paths: - build/meson-logs + - ci-runner-env reports: junit: build/meson-logs/*.junit.xml before_script: @@ -155,7 +156,15 @@ variables: # Prevent logs (if any) from prior build job artifacts # from being duplicated in the new job artifacts - rm -f build/meson-logs/* - - test -f /packages.txt && cat /packages.txt + - mkdir -p ci-runner-env + - test -f /packages.txt && cp /packages.txt ci-runner-env/packages.txt + - cp /proc/mounts ci-runner-env/mounts.txt + - cp /proc/cpuinfo ci-runner-env/cpuinfo.txt + - cp /proc/meminfo ci-runner-env/meminfo.txt + - ls -l /dev > ci-runner-env/devices.txt + - uname -a > ci-runner-env/kernel.txt + - id -a > ci-runner-env/user.txt + - printenv | sort > ci-runner-env/environ.txt - section_end setup .base_meson_ccache_job_template: diff --git a/.gitlab-ci.d/buildtest-template.yml b/.gitlab-ci.d/buildtest-template.yml index 11d7a75667..e62b3f2123 100644 --- a/.gitlab-ci.d/buildtest-template.yml +++ b/.gitlab-ci.d/buildtest-template.yml @@ -38,6 +38,7 @@ paths: - build - .git-submodule-status + - ci-runner-env exclude: - build/**/*.p - build/**/*.a.p @@ -83,6 +84,7 @@ paths: - build/meson-logs - build/tests/functional/*/*/*.log + - ci-runner-env reports: junit: build/meson-logs/*.junit.xml after_script: