| # vim: set expandtab shiftwidth=2 tabstop=8 textwidth=0: |
| |
| .templates_sha: &template_sha 32afe5644697e503af18a736587c8619fa036a72 # see https://docs.gitlab.com/ee/ci/yaml/#includefile |
| # This file uses the freedesktop ci-templates to build Weston and run our |
| # tests in CI. |
| # |
| # ci-templates uses a multi-stage build process. First, the base container |
| # image is built which contains the core distribution, the toolchain, and |
| # all our build dependencies. This container is aggressively cached; if a |
| # container image matching $FDO_DISTRIBUTION_TAG is found in either the |
| # upstream repo (wayland/weston) or the user's downstream repo, it is |
| # reused for the build. This gives us predictability of build and far |
| # quicker runtimes, however it means that any changes to the base container |
| # must also change $FDO_DISTRIBUTION_TAG. When changing this, please use |
| # the current date as well as a unique build identifier. |
| # |
| # After the container is either rebuilt (tag mismatch) or reused (tag |
| # previously used), the build stage executes within this container. |
| # |
| # The final stage is used to expose documentation and coverage information, |
| # including publishing documentation to the public site when built on the |
| # main branch. |
| # |
| # Apart from the 'variables', 'include', and 'stages' top-level anchors, |
| # everything not beginning with a dot ('.') is the name of a job which will |
| # be executed as part of CI, unless the rules specify that it should not be |
| # run. |
| # |
| # Variables prefixed with CI_ are generally provided by GitLab itself; |
| # variables prefixed with FDO_ and templates prefixed by .fdo are provided |
| # by the ci-templates. |
| # |
| # For more information on GitLab CI, including the YAML syntax, see: |
| # https://docs.gitlab.com/ee/ci/yaml/README.html |
| # |
| # Note that freedesktop.org uses the 'Community Edition' of GitLab, so features |
| # marked as 'premium' or 'ultimate' are not available to us. |
| # |
| # For more information on ci-templates, see: |
| # - documentation at https://freedesktop.pages.freedesktop.org/ci-templates/ |
| # - repo at https://gitlab.freedesktop.org/freedesktop/ci-templates/ |
| |
| variables: |
| FDO_UPSTREAM_REPO: wayland/weston |
| FDO_REPO_SUFFIX: "$BUILD_OS-$FDO_DISTRIBUTION_VERSION/$BUILD_ARCH" |
| FDO_DISTRIBUTION_TAG: '2026-06-15-linux-7.1-mesa-26.1.2' |
| |
| |
| include: |
| # Here we use a fixed ref in order to isolate ourselves from ci-templates |
| # API changes. If you need new features from ci-templates you must bump |
| # this to the current SHA you require from the ci-templates repo, however |
| # be aware that you may need to account for API changes when doing so. |
| - project: 'freedesktop/ci-templates' |
| ref: *template_sha |
| file: '/templates/debian.yml' |
| - project: 'freedesktop/ci-templates' |
| ref: *template_sha |
| file: '/templates/ci-fairy.yml' |
| |
| .default-rules: |
| rules: |
| # do not duplicate pipelines on merge pipelines |
| - if: $CI_COMMIT_BRANCH && $CI_OPEN_MERGE_REQUESTS && $CI_PIPELINE_SOURCE == "push" |
| when: never |
| # we need a default case though, so all the rest still run |
| - when: on_success |
| |
| default: |
| retry: |
| max: 2 |
| when: runner_system_failure |
| |
| .merge-rules: |
| rules: |
| - if: '$CI_PIPELINE_SOURCE == "merge_request_event"' |
| when: always |
| - when: never |
| |
| # Define the build stages. These are used for UI grouping as well as |
| # dependencies. |
| stages: |
| - "Merge request checks" |
| - "Pre Base container" |
| - "Base container" |
| - "Full build and test" |
| - "No-GL/Vulkan build and test" |
| - "Other builds" |
| - pages |
| |
| |
| # Base variables used for anything using a Debian environment |
| .os-debian-lts: |
| variables: |
| BUILD_OS: debian |
| LLVM_VERSION: 15 |
| USE_DEBIAN_BACKPORTS: y |
| PACKAGES_SPECIFIC: vulkan-validationlayers-dev |
| FREERDP_VERSION: 2 |
| FDO_DISTRIBUTION_VERSION: bookworm |
| FDO_DISTRIBUTION_EXEC: 'env FDO_CI_CONCURRENT=${FDO_CI_CONCURRENT} BUILD_ARCH=${BUILD_ARCH} KERNEL_IMAGE=${KERNEL_IMAGE} KERNEL_DEFCONFIG=${KERNEL_DEFCONFIG} LLVM_VERSION=${LLVM_VERSION} FDO_DISTRIBUTION_VERSION=${FDO_DISTRIBUTION_VERSION} PACKAGES_SPECIFIC="${PACKAGES_SPECIFIC}" bash .gitlab-ci/debian-install.sh' |
| |
| .os-debian: |
| variables: |
| BUILD_OS: debian |
| LLVM_VERSION: 19 |
| FREERDP_VERSION: 3 |
| USE_DEBIAN_BACKPORTS: y |
| PACKAGES_SPECIFIC: vulkan-utility-libraries-dev libpolly-19-dev libclang-rt-19-dev python3-standard-imghdr |
| # If you upgrade from trixie, see the use_tls=0 notes in tests/meson.build. |
| FDO_DISTRIBUTION_VERSION: trixie |
| FDO_DISTRIBUTION_EXEC: 'env FDO_CI_CONCURRENT=${FDO_CI_CONCURRENT} BUILD_ARCH=${BUILD_ARCH} KERNEL_IMAGE=${KERNEL_IMAGE} KERNEL_DEFCONFIG=${KERNEL_DEFCONFIG} LLVM_VERSION=${LLVM_VERSION} FDO_DISTRIBUTION_VERSION=${FDO_DISTRIBUTION_VERSION} PACKAGES_SPECIFIC="${PACKAGES_SPECIFIC}" bash .gitlab-ci/debian-install.sh' |
| |
| # Does not inherit .default-rules as we only want it to run in MR context. |
| check-commit: |
| extends: |
| - .fdo.ci-fairy |
| - .merge-rules |
| stage: "Merge request checks" |
| script: |
| - ci-fairy check-commits --signed-off-by --junit-xml=results.xml |
| variables: |
| GIT_DEPTH: 100 |
| artifacts: |
| reports: |
| junit: results.xml |
| |
| .debian-lts-x86_64: |
| extends: |
| - .os-debian-lts |
| variables: |
| BUILD_ARCH: "x86-64" |
| KERNEL_IMAGE: "bzImage" |
| KERNEL_DEFCONFIG: "x86_64_defconfig" |
| |
| .debian-x86_64: |
| extends: |
| - .os-debian |
| variables: |
| BUILD_ARCH: "x86-64" |
| KERNEL_IMAGE: "bzImage" |
| KERNEL_DEFCONFIG: "x86_64_defconfig" |
| |
| .debian-lts-armv7: |
| extends: |
| - .os-debian-lts |
| variables: |
| BUILD_ARCH: "armv7" |
| FDO_DISTRIBUTION_PLATFORM: "linux/arm/v7" |
| |
| .debian-armv7: |
| extends: |
| - .os-debian |
| variables: |
| BUILD_ARCH: "armv7" |
| FDO_DISTRIBUTION_PLATFORM: "linux/arm/v7" |
| # Armv7 doesn't have freerdp3 in bookworm-backports so we don't build FreeRDP |
| MESON_DIST_OPTIONS: "-Dbackend-rdp=false" |
| # Inhibit installation of freerdp-dev |
| FREERDP_VERSION: 0 |
| |
| .debian-lts-aarch64: |
| extends: |
| - .os-debian-lts |
| variables: |
| BUILD_ARCH: "aarch64" |
| KERNEL_IMAGE: "Image" |
| KERNEL_DEFCONFIG: "defconfig" |
| QEMU_SMP: 8 # built-in QEmu limit |
| |
| .debian-aarch64: |
| extends: |
| - .os-debian |
| variables: |
| BUILD_ARCH: "aarch64" |
| KERNEL_IMAGE: "Image" |
| KERNEL_DEFCONFIG: "defconfig" |
| QEMU_SMP: 8 # built-in QEmu limit |
| |
| base-container-pre: |
| rules: |
| # this run always in merge request |
| - if: '$CI_PIPELINE_SOURCE == "merge_request_event"' |
| when: always |
| # run always on main to allow docs to publish |
| - if: '$CI_PIPELINE_SOURCE == "push" && $CI_PROJECT_PATH == "wayland/weston" && $CI_COMMIT_REF_NAME == $CI_DEFAULT_BRANCH' |
| when: always |
| # allow to run manually in a branch |
| - when: manual |
| stage: "Pre Base container" |
| script: echo "exit 0" |
| |
| # Build our base container image, which contains the core distribution, the |
| # toolchain, and all our build dependencies. This will be reused in the build |
| # stage. |
| x86_64-debian-lts-container_prep: |
| extends: |
| - .default-rules |
| - .debian-lts-x86_64 |
| - .fdo.container-build@debian |
| timeout: 30m |
| needs: |
| - job: base-container-pre |
| stage: "Base container" |
| |
| x86_64-debian-container_prep: |
| extends: |
| - .default-rules |
| - .debian-x86_64 |
| - .fdo.container-build@debian |
| needs: |
| - job: base-container-pre |
| timeout: 30m |
| stage: "Base container" |
| |
| armv7-debian-lts-container_prep: |
| extends: |
| - .default-rules |
| - .debian-lts-armv7 |
| - .fdo.container-build@debian |
| tags: |
| - aarch64 |
| needs: |
| - job: base-container-pre |
| timeout: 30m |
| stage: "Base container" |
| |
| armv7-debian-container_prep: |
| extends: |
| - .default-rules |
| - .debian-armv7 |
| - .fdo.container-build@debian |
| tags: |
| - aarch64 |
| needs: |
| - job: base-container-pre |
| timeout: 30m |
| stage: "Base container" |
| |
| aarch64-debian-lts-container_prep: |
| extends: |
| - .default-rules |
| - .debian-lts-aarch64 |
| - .fdo.container-build@debian |
| tags: |
| - aarch64 |
| needs: |
| - job: base-container-pre |
| timeout: 30m |
| stage: "Base container" |
| |
| aarch64-debian-container_prep: |
| extends: |
| - .default-rules |
| - .debian-aarch64 |
| - .fdo.container-build@debian |
| tags: |
| - aarch64 |
| needs: |
| - job: base-container-pre |
| timeout: 30m |
| stage: "Base container" |
| |
| # Core templates for all of our build steps. These are reused by all build jobs |
| # through the `extends` keyword. |
| .build-env: |
| timeout: 15m |
| variables: |
| BUILDDIR: $CI_PROJECT_DIR/build-weston-$CI_JOB_NAME |
| BUILDDIR_WESTINY: $CI_PROJECT_DIR/build-westiny-$CI_JOB_NAME |
| PREFIX: $CI_PROJECT_DIR/prefix-weston-$CI_JOB_NAME |
| PREFIX_WESTINY: $CI_PROJECT_DIR/prefix-westiny-$CI_JOB_NAME |
| before_script: |
| - export PATH=~/.local/bin:$PATH |
| - export XDG_RUNTIME_DIR="$(mktemp -p $(pwd) -d xdg-runtime-XXXXXX)" |
| - export TESTS_RES_PATH="$BUILDDIR/tests-res.txt" |
| - export VK_INSTANCE_LAYERS=VK_LAYER_KHRONOS_validation |
| - mkdir "$BUILDDIR" "$PREFIX" |
| - mkdir "$BUILDDIR_WESTINY" "$PREFIX_WESTINY" |
| |
| .build-with-clang: |
| variables: |
| CC: clang-$LLVM_VERSION |
| CC_LD: lld-$LLVM_VERSION |
| CXX: clang++-$LLVM_VERSION |
| CXX_LD: lld-$LLVM_VERSION |
| MESON_TOOLCHAIN_OPTIONS: "$MESON_OPTIONS -Db_lundef=false" # clang+ASan+undef=boom |
| |
| # Extends the core build templates to also provide for running our testing. We |
| # run this inside a virtme (qemu wrapper) VM environment so we can test the DRM |
| # backend using the 'vkms' virtual driver under Linux. |
| .build-and-test: |
| extends: |
| - .default-rules |
| variables: |
| SANITIZE: "-Db_sanitize=address" |
| script: |
| - "${CI_PROJECT_DIR}/.gitlab-ci/build.sh" |
| - "${CI_PROJECT_DIR}/.gitlab-ci/test.sh" |
| |
| artifacts: |
| name: weston-$CI_COMMIT_SHA |
| when: always |
| paths: |
| - $BUILDDIR/*.png |
| - $BUILDDIR/meson-logs |
| - $BUILDDIR/dmesg.log |
| - $BUILDDIR/weston-virtme |
| - $PREFIX |
| reports: |
| junit: $BUILDDIR/meson-logs/testlog.junit.xml |
| |
| # Same as above, but without running any tests. |
| .build-no-test: |
| extends: |
| - .default-rules |
| script: |
| - "${CI_PROJECT_DIR}/.gitlab-ci/build.sh" |
| artifacts: |
| name: weston-$CI_COMMIT_SHA |
| when: always |
| paths: |
| - $BUILDDIR/meson-logs |
| - $PREFIX |
| |
| # OS/architecture-specific variants |
| .build-env-debian-lts-x86_64: |
| extends: |
| - .debian-lts-x86_64 |
| - .fdo.suffixed-image@debian |
| - .build-env |
| needs: |
| - job: x86_64-debian-lts-container_prep |
| artifacts: false |
| |
| .build-env-debian-x86_64: |
| extends: |
| - .debian-x86_64 |
| - .fdo.suffixed-image@debian |
| - .build-env |
| needs: |
| - job: x86_64-debian-container_prep |
| artifacts: false |
| |
| .build-env-debian-lts-armv7: |
| tags: |
| - aarch64 |
| extends: |
| - .debian-lts-armv7 |
| - .fdo.suffixed-image@debian |
| - .build-env |
| needs: |
| - job: armv7-debian-lts-container_prep |
| artifacts: false |
| |
| .build-env-debian-armv7: |
| tags: |
| - aarch64 |
| extends: |
| - .debian-armv7 |
| - .fdo.suffixed-image@debian |
| - .build-env |
| needs: |
| - job: armv7-debian-container_prep |
| artifacts: false |
| |
| .build-env-debian-lts-aarch64: |
| tags: |
| - aarch64 |
| extends: |
| - .debian-lts-aarch64 |
| - .fdo.suffixed-image@debian |
| - .build-env |
| needs: |
| - job: aarch64-debian-lts-container_prep |
| artifacts: false |
| |
| .build-env-debian-aarch64: |
| tags: |
| - aarch64 |
| extends: |
| - .debian-aarch64 |
| - .fdo.suffixed-image@debian |
| - .build-env |
| needs: |
| - job: aarch64-debian-container_prep |
| artifacts: false |
| |
| .test-env-debian-lts-x86_64: |
| tags: |
| - kvm |
| extends: |
| - .build-env-debian-lts-x86_64 |
| - .build-and-test |
| needs: |
| - job: x86_64-debian-lts-container_prep |
| artifacts: false |
| |
| .test-env-debian-x86_64: |
| tags: |
| - kvm |
| extends: |
| - .build-env-debian-x86_64 |
| - .build-and-test |
| needs: |
| - job: x86_64-debian-container_prep |
| artifacts: false |
| |
| .test-env-debian-lts-aarch64: |
| tags: |
| - kvm-aarch64 |
| extends: |
| - .build-env-debian-lts-aarch64 |
| - .build-and-test |
| needs: |
| - job: aarch64-debian-lts-container_prep |
| artifacts: false |
| |
| .test-env-debian-aarch64: |
| tags: |
| - kvm-aarch64 |
| extends: |
| - .build-env-debian-aarch64 |
| - .build-and-test |
| needs: |
| - job: aarch64-debian-container_prep |
| artifacts: false |
| |
| # Full build (gcov + perfetto) used for testing under KVM. |
| .build-options-full: |
| stage: "Full build and test" |
| variables: |
| MESON_OPTIONS: > |
| -Doptimization=0 |
| -Db_coverage=true |
| --force-fallback-for=perfetto |
| -Dperfetto=true |
| -Dperfetto:werror=false |
| -Dwerror=true |
| -Dtest-skip-is-failure=true |
| -Ddeprecated-remoting=true |
| -Ddeprecated-pipewire=true |
| after_script: |
| - ninja -C "$BUILDDIR" coverage-html > "$BUILDDIR/meson-logs/ninja-coverage-html.txt" |
| - ninja -C "$BUILDDIR" coverage-xml |
| |
| # Full build, (without gcov and perfetto) |
| .build-options-full-v2: |
| stage: "Full build and test" |
| variables: |
| MESON_OPTIONS: > |
| -Doptimization=0 |
| -Dwerror=true |
| -Dtest-skip-is-failure=true |
| |
| x86_64-debian-lts-full-build: |
| extends: |
| - .test-env-debian-lts-x86_64 |
| - .build-options-full |
| artifacts: |
| reports: |
| coverage_report: |
| coverage_format: cobertura |
| path: $BUILDDIR/meson-logs/coverage.xml |
| |
| x86_64-debian-full-build: |
| extends: |
| - .test-env-debian-x86_64 |
| - .build-options-full-v2 |
| |
| aarch64-debian-lts-full-build: |
| extends: |
| - .test-env-debian-lts-aarch64 |
| - .build-options-full-v2 |
| |
| aarch64-debian-full-build: |
| extends: |
| - .test-env-debian-aarch64 |
| - .build-options-full-v2 |
| |
| x86_64-clang-debian-lts-full-build: |
| extends: |
| - .test-env-debian-lts-x86_64 |
| - .build-with-clang |
| - .build-options-full-v2 |
| |
| x86_64-clang-debian-full-build: |
| extends: |
| - .test-env-debian-x86_64 |
| - .build-with-clang |
| - .build-options-full-v2 |
| |
| aarch64-clang-debian-lts-full-build: |
| extends: |
| - .test-env-debian-lts-aarch64 |
| - .build-with-clang |
| - .build-options-full-v2 |
| |
| aarch64-clang-debian-full-build: |
| extends: |
| - .test-env-debian-aarch64 |
| - .build-with-clang |
| - .build-options-full-v2 |
| |
| # Docs should be invariant on all architectures, so we only do it on Debian |
| # x86-64. |
| docs-build: |
| stage: "Other builds" |
| variables: |
| MESON_OPTIONS: > |
| -Dwerror=true |
| -Ddoc=true |
| extends: |
| - .build-env-debian-x86_64 |
| - .build-no-test |
| |
| # Building without gl-renderer and/or vulkan-renderer, to make sure this keeps working. |
| .build-options-no-gl-no-vulkan: |
| stage: "No-GL/Vulkan build and test" |
| variables: |
| MESON_OPTIONS: > |
| -Dsimple-clients=damage,im,shm,touch,dmabuf-v4l |
| -Drenderer-gl=false |
| -Drenderer-vulkan=false |
| -Dwerror=true |
| |
| .build-options-no-gl: |
| stage: "No-GL/Vulkan build and test" |
| variables: |
| MESON_OPTIONS: > |
| -Dsimple-clients=damage,im,shm,touch,dmabuf-v4l |
| -Drenderer-gl=false |
| -Dwerror=true |
| |
| .build-options-no-vulkan: |
| stage: "No-GL/Vulkan build and test" |
| variables: |
| MESON_OPTIONS: > |
| -Dsimple-clients=damage,im,shm,touch,dmabuf-v4l |
| -Drenderer-vulkan=false |
| -Dwerror=true |
| |
| x86_64-debian-lts-no-gl-no-vulkan-build: |
| extends: |
| - .test-env-debian-lts-x86_64 |
| - .build-options-no-gl-no-vulkan |
| |
| x86_64-debian-no-gl-no-vulkan-build: |
| extends: |
| - .test-env-debian-x86_64 |
| - .build-options-no-gl-no-vulkan |
| |
| armv7-debian-lts-no-gl-no-vulkan-build: |
| extends: |
| - .build-env-debian-lts-armv7 |
| - .build-no-test |
| - .build-options-no-gl-no-vulkan |
| |
| armv7-debian-no-gl-no-vulkan-build: |
| extends: |
| - .build-env-debian-armv7 |
| - .build-no-test |
| - .build-options-no-gl-no-vulkan |
| |
| armv7-clang-debian-lts-no-gl-no-vulkan-build: |
| extends: |
| - .build-env-debian-lts-armv7 |
| - .build-with-clang |
| - .build-no-test |
| - .build-options-no-gl-no-vulkan |
| |
| armv7-clang-debian-no-gl-no-vulkan-build: |
| extends: |
| - .build-env-debian-armv7 |
| - .build-with-clang |
| - .build-no-test |
| - .build-options-no-gl-no-vulkan |
| |
| aarch64-debian-lts-no-gl-no-vulkan-build: |
| extends: |
| - .test-env-debian-lts-aarch64 |
| - .build-options-no-gl-no-vulkan |
| |
| aarch64-debian-no-gl-no-vulkan-build: |
| extends: |
| - .test-env-debian-aarch64 |
| - .build-options-no-gl-no-vulkan |
| |
| x86_64-debian-no-gl-build: |
| extends: |
| - .test-env-debian-x86_64 |
| - .build-options-no-gl |
| |
| x86_64-debian-no-vulkan-build: |
| extends: |
| - .test-env-debian-x86_64 |
| - .build-options-no-vulkan |
| |
| |
| # Expose docs and coverage reports, so we can show users any changes to these |
| # inside their merge requests, letting us check them before merge. |
| # |
| # This does not build the docs or coverage information itself, but just reuses |
| # the docs and coverage information from the x86-64 Debian builds as the |
| # canonical sources of coverage information; the docs themselves should be |
| # invariant across any architecture or OS. |
| docs-and-coverage: |
| extends: |
| - .default-rules |
| - .debian-lts-x86_64 |
| - .fdo.suffixed-image@debian |
| stage: pages |
| needs: |
| - job: docs-build |
| artifacts: true |
| - job: x86_64-debian-lts-full-build |
| artifacts: true |
| timeout: 5m |
| script: |
| - mv prefix-weston-docs-build/share/doc/weston Documentation |
| - mv build-weston-x86_64-debian-lts-full-build/meson-logs/coveragereport Test_Coverage |
| - rm Test_Coverage/gcov.css |
| - cp doc/style/lcov-style.css Test_Coverage/gcov.css |
| - cp doc/style/*.png Test_Coverage/ |
| - rm -rf build-* prefix-* |
| artifacts: |
| expose_as: 'Documentation preview and test coverage report' |
| paths: |
| - Documentation/ |
| - Test_Coverage/ |
| |
| # Generate the documentation for https://wayland.pages.freedesktop.org/weston/ |
| # Anything under public/ is published to this URL. |
| # |
| # Does not inherit .default-rules as it should only run in our default branch for |
| # the upstream repo. |
| pages: |
| extends: |
| - .debian-x86_64 |
| - .fdo.suffixed-image@debian |
| stage: pages |
| timeout: 5m |
| needs: |
| - job: docs-build |
| artifacts: true |
| script: |
| - export PREFIX=$(pwd)/prefix-weston-docs-build |
| - mkdir public |
| - cp -R $PREFIX/share/doc/weston/* public/ |
| artifacts: |
| paths: |
| - public |
| rules: |
| - if: '$CI_PIPELINE_SOURCE == "push" && $CI_PROJECT_PATH == "wayland/weston" && $CI_COMMIT_REF_NAME == $CI_DEFAULT_BRANCH' |
| when: on_success |
| - when: never |