985ab55d59
Upgrade Debian to bullseye and FreeBSD to 13.1. FreeBSD 13.0 is not supported anymore, and this ensures we still build on fresh images. Signed-off-by: Simon Ser <contact@emersion.fr>
353 lines
10 KiB
YAML
353 lines
10 KiB
YAML
# This file uses the freedesktop ci-templates to build Wayland 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/
|
|
|
|
# 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.
|
|
.templates_sha: &template_sha d5aa3941aa03c2f716595116354fb81eb8012acb # see https://docs.gitlab.com/ee/ci/yaml/#includefile
|
|
|
|
include:
|
|
- project: 'freedesktop/ci-templates'
|
|
ref: *template_sha
|
|
file:
|
|
- '/templates/debian.yml'
|
|
- '/templates/freebsd.yml'
|
|
- '/templates/ci-fairy.yml'
|
|
|
|
variables:
|
|
FDO_UPSTREAM_REPO: wayland/wayland
|
|
FDO_REPO_SUFFIX: "$BUILD_OS/$BUILD_ARCH"
|
|
|
|
|
|
# Define the build stages. These are used for UI grouping as well as
|
|
# dependencies.
|
|
stages:
|
|
- "Merge request checks"
|
|
- "Base container"
|
|
- "Build and test"
|
|
- "Other build configurations"
|
|
|
|
.ci-rules:
|
|
rules:
|
|
- when: on_success
|
|
|
|
# Base variables used for anything using a Debian environment
|
|
.os-debian:
|
|
variables:
|
|
BUILD_OS: debian
|
|
FDO_DISTRIBUTION_VERSION: bullseye
|
|
FDO_DISTRIBUTION_PACKAGES: 'build-essential pkg-config libexpat1-dev libffi-dev libxml2-dev doxygen graphviz xmlto xsltproc docbook-xsl python3-pip python3-setuptools ninja-build'
|
|
FDO_DISTRIBUTION_EXEC: 'pip3 install meson==0.56.0'
|
|
# bump this tag every time you change something which requires rebuilding the
|
|
# base image
|
|
FDO_DISTRIBUTION_TAG: "2022-08-08.0"
|
|
|
|
.debian-x86_64:
|
|
extends:
|
|
- .os-debian
|
|
variables:
|
|
BUILD_ARCH: "x86-64"
|
|
|
|
.debian-aarch64:
|
|
extends:
|
|
- .os-debian
|
|
variables:
|
|
BUILD_ARCH: "aarch64"
|
|
|
|
.debian-armv7:
|
|
extends:
|
|
- .os-debian
|
|
variables:
|
|
BUILD_ARCH: "armv7"
|
|
|
|
|
|
# Does not inherit .ci-rules as we only want it to run in MR context.
|
|
check-commit:
|
|
extends:
|
|
- .fdo.ci-fairy
|
|
stage: "Merge request checks"
|
|
rules:
|
|
- if: '$CI_PIPELINE_SOURCE == "merge_request_event"'
|
|
when: always
|
|
- when: never
|
|
script:
|
|
- ci-fairy check-commits --signed-off-by --junit-xml=results.xml
|
|
variables:
|
|
GIT_DEPTH: 100
|
|
artifacts:
|
|
reports:
|
|
junit: results.xml
|
|
|
|
|
|
# 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-container_prep:
|
|
extends:
|
|
- .ci-rules
|
|
- .debian-x86_64
|
|
- .fdo.container-build@debian
|
|
stage: "Base container"
|
|
variables:
|
|
GIT_STRATEGY: none
|
|
|
|
aarch64-debian-container_prep:
|
|
extends:
|
|
- .ci-rules
|
|
- .debian-aarch64
|
|
- .fdo.container-build@debian
|
|
tags:
|
|
- aarch64
|
|
stage: "Base container"
|
|
variables:
|
|
GIT_STRATEGY: none
|
|
|
|
armv7-debian-container_prep:
|
|
extends:
|
|
- .ci-rules
|
|
- .debian-armv7
|
|
- .fdo.container-build@debian
|
|
tags:
|
|
- aarch64
|
|
stage: "Base container"
|
|
variables:
|
|
GIT_STRATEGY: none
|
|
FDO_BASE_IMAGE: "arm32v7/debian:$FDO_DISTRIBUTION_VERSION"
|
|
|
|
|
|
# Core build environment.
|
|
.build-env:
|
|
variables:
|
|
MESON_BUILD_TYPE: "-Dbuildtype=debug -Doptimization=0 -Db_sanitize=address,undefined"
|
|
# See https://gitlab.freedesktop.org/wayland/wayland/-/merge_requests/154
|
|
ASAN_OPTIONS: "detect_odr_violation=0"
|
|
before_script:
|
|
- export BUILD_ID="wayland-$CI_JOB_NAME"
|
|
- export PREFIX="${CI_PROJECT_DIR}/prefix-${BUILD_ID}"
|
|
- export BUILDDIR="${CI_PROJECT_DIR}/build-${BUILD_ID}"
|
|
- mkdir "$BUILDDIR" "$PREFIX"
|
|
|
|
|
|
# Build variants to be stacked on as required.
|
|
.build-release:
|
|
stage: "Other build configurations"
|
|
variables:
|
|
MESON_BUILD_TYPE: "-Dbuildtype=release"
|
|
|
|
|
|
# OS/architecture-specific variants
|
|
.build-env-debian-x86_64:
|
|
extends:
|
|
- .fdo.suffixed-image@debian
|
|
- .debian-x86_64
|
|
- .build-env
|
|
needs:
|
|
- job: x86_64-debian-container_prep
|
|
artifacts: false
|
|
|
|
.build-env-debian-aarch64:
|
|
extends:
|
|
- .fdo.suffixed-image@debian
|
|
- .debian-aarch64
|
|
- .build-env
|
|
variables:
|
|
# At least with the versions we have, the LSan runtime makes fork unusably
|
|
# slow on AArch64, which is bad news since the test suite decides to fork
|
|
# for every single subtest. For now, in order to get AArch64 builds and
|
|
# tests into CI, just assume that we're not going to leak any more on
|
|
# AArch64 than we would on ARMv7 or x86-64.
|
|
ASAN_OPTIONS: "detect_leaks=0,detect_odr_violation=0"
|
|
tags:
|
|
- aarch64
|
|
needs:
|
|
- job: aarch64-debian-container_prep
|
|
artifacts: false
|
|
|
|
.build-env-debian-armv7:
|
|
extends:
|
|
- .fdo.suffixed-image@debian
|
|
- .debian-armv7
|
|
- .build-env
|
|
tags:
|
|
- aarch64
|
|
needs:
|
|
- job: armv7-debian-container_prep
|
|
artifacts: false
|
|
|
|
|
|
# Full build and test.
|
|
.do-build:
|
|
extends:
|
|
- .ci-rules
|
|
stage: "Build and test"
|
|
script:
|
|
- cd "$BUILDDIR"
|
|
- meson --prefix="$PREFIX" -Dicon_directory=/usr/share/X11/icons -Dwerror=true ${MESON_BUILD_TYPE} ..
|
|
- ninja -k0 -j${FDO_CI_CONCURRENT:-4}
|
|
- meson test --num-processes ${FDO_CI_CONCURRENT:-4}
|
|
- ninja clean
|
|
artifacts:
|
|
name: wayland-$CI_JOB_NAME
|
|
when: always
|
|
paths:
|
|
- build-*/meson-logs
|
|
- prefix-*
|
|
reports:
|
|
junit: build-*/meson-logs/testlog.junit.xml
|
|
|
|
# Full build and test.
|
|
.do-build-qemu:
|
|
extends:
|
|
- .ci-rules
|
|
stage: "Build and test"
|
|
script:
|
|
# Start the VM and copy our workspace to the VM
|
|
- /app/vmctl start
|
|
- scp -r $PWD "vm:"
|
|
# The `set +e is needed to ensure that we always copy the meson logs back to
|
|
# the workspace to see details about the failed tests.
|
|
- |
|
|
set +e
|
|
/app/vmctl exec "pkg info; cd $CI_PROJECT_NAME ; meson $BUILDDIR --prefix=$PREFIX $MESON_BUILD_TYPE $MESON_ARGS && ninja -C $BUILDDIR -j${FDO_CI_CONCURRENT:-4}"
|
|
/app/vmctl exec "meson test --print-errorlogs -C $BUILDDIR --num-processes ${FDO_CI_CONCURRENT:-4}" && touch .tests-successful
|
|
set -ex
|
|
scp -r vm:$BUILDDIR/meson-logs .
|
|
/app/vmctl exec "ninja -C $BUILDDIR install"
|
|
mkdir -p $PREFIX && scp -r vm:$PREFIX/ $PREFIX/
|
|
# Finally, shut down the VM.
|
|
- /app/vmctl stop
|
|
- test -f .tests-successful || exit 1
|
|
artifacts:
|
|
name: wayland-$CI_JOB_NAME
|
|
when: always
|
|
paths:
|
|
- meson-logs
|
|
- prefix-*
|
|
reports:
|
|
junit: meson-logs/testlog.junit.xml
|
|
|
|
# Full build and test.
|
|
x86_64-debian-build:
|
|
extends:
|
|
- .build-env-debian-x86_64
|
|
- .do-build
|
|
|
|
x86_64-release-debian-build:
|
|
extends:
|
|
- .build-env-debian-x86_64
|
|
- .do-build
|
|
- .build-release
|
|
|
|
aarch64-debian-build:
|
|
extends:
|
|
- .build-env-debian-aarch64
|
|
- .do-build
|
|
|
|
aarch64-release-debian-build:
|
|
extends:
|
|
- .build-env-debian-aarch64
|
|
- .do-build
|
|
- .build-release
|
|
|
|
armv7-debian-build:
|
|
extends:
|
|
- .build-env-debian-armv7
|
|
- .do-build
|
|
|
|
armv7-release-debian-build:
|
|
extends:
|
|
- .build-env-debian-armv7
|
|
- .do-build
|
|
- .build-release
|
|
|
|
# Base variables used for anything using a FreeBSD environment
|
|
.os-freebsd:
|
|
variables:
|
|
BUILD_OS: freebsd
|
|
FDO_DISTRIBUTION_VERSION: "13.1"
|
|
FDO_DISTRIBUTION_PACKAGES: 'libxslt meson ninja pkgconf expat libffi libepoll-shim libxml2'
|
|
# bump this tag every time you change something which requires rebuilding the
|
|
# base image
|
|
FDO_DISTRIBUTION_TAG: "2022-09-08.0"
|
|
# Don't build documentation since installing the required tools massively
|
|
# increases the VM image (and therefore container) size.
|
|
MESON_ARGS: "-Ddocumentation=false"
|
|
|
|
.freebsd-x86_64:
|
|
extends:
|
|
- .os-freebsd
|
|
variables:
|
|
BUILD_ARCH: "x86_64"
|
|
|
|
x86_64-freebsd-container_prep:
|
|
extends:
|
|
- .ci-rules
|
|
- .freebsd-x86_64
|
|
- .fdo.qemu-build@freebsd@x86_64
|
|
stage: "Base container"
|
|
variables:
|
|
GIT_STRATEGY: none
|
|
|
|
.build-env-freebsd-x86_64:
|
|
variables:
|
|
# Compiling with ASan+UBSan appears to trigger an infinite loop in the
|
|
# compiler shipped with FreeBSD 13.0, so we only use UBSan here.
|
|
# Additionally, sanitizers can't be used with b_lundef on FreeBSD.
|
|
MESON_BUILD_TYPE: "-Dbuildtype=debug -Db_sanitize=undefined -Db_lundef=false"
|
|
extends:
|
|
- .fdo.suffixed-image@freebsd
|
|
- .freebsd-x86_64
|
|
- .build-env
|
|
needs:
|
|
- job: x86_64-freebsd-container_prep
|
|
artifacts: false
|
|
|
|
# Full build and test.
|
|
x86_64-freebsd-build:
|
|
extends:
|
|
- .build-env-freebsd-x86_64
|
|
- .do-build-qemu
|
|
|
|
x86_64-release-freebsd-build:
|
|
extends:
|
|
- .build-env-freebsd-x86_64
|
|
- .do-build-qemu
|
|
- .build-release
|