mirror of
https://gitlab.freedesktop.org/libinput/libinput.git
synced 2026-01-02 14:30:11 +01:00
If qemu has already shut down by the time we call kill, pgrep returns nothing and we fail the script. Let's not do that. And let's replace kill pgrep with just pkill in the process. Let's get rid of the after_script part too, gitlab kills any process started in the main script anyway. Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
874 lines
26 KiB
YAML
874 lines
26 KiB
YAML
# vim: set expandtab shiftwidth=2 tabstop=8 textwidth=0:
|
|
#
|
|
# This is a bit complicated for two reasons:
|
|
# - we really want to run dnf/apt/... only once, updating on the test runner for
|
|
# each job takes forever. So we create a container image for each distribution
|
|
# tested, then run the tests on this container image.
|
|
#
|
|
# Creating a container image is time-consuming, so we only do so for pushes to
|
|
# libinput directly (not merge requests) and if the current image is 'old'.
|
|
#
|
|
# - GitLab only allows one script: set per job but we have a bunch of commands
|
|
# we need to re-run for each build (meson && ninja && etc). YAML cannot merge
|
|
# arrays templates so we're screwed.
|
|
#
|
|
# So instead we use a default_build template and override everything with
|
|
# variables. The only two variables that matter:
|
|
# MESON_ARGS=-Denable-something=true
|
|
# NINJA_ARGS=dist ... to run 'ninja -C builddir dist'
|
|
# Note that you cannot use scripts: in any target if you expect default_build
|
|
# to work.
|
|
#
|
|
#
|
|
# All jobs must follow the naming scheme of
|
|
# <distribution>:<version>@activity:
|
|
# e.g. fedora:31@build-default
|
|
|
|
.templates_sha: &template_sha b7030c2cd0d6ccc5f6d4f8299bafa4daa9240d71 # see https://docs.gitlab.com/ee/ci/yaml/#includefile
|
|
|
|
include:
|
|
# Alpine container builder template
|
|
- project: 'wayland/ci-templates'
|
|
file: '/templates/alpine.yml'
|
|
# Arch container builder template
|
|
- project: 'wayland/ci-templates'
|
|
ref: *template_sha
|
|
file: '/templates/arch.yml'
|
|
# Fedora container builder template
|
|
- project: 'wayland/ci-templates'
|
|
ref: *template_sha
|
|
file: '/templates/fedora.yml'
|
|
# Ubuntu container builder template
|
|
- project: 'wayland/ci-templates'
|
|
ref: *template_sha
|
|
file: '/templates/ubuntu.yml'
|
|
|
|
stages:
|
|
- prep # prep work like rebuilding the container images if there is a change
|
|
- build # for actually building and testing things in a container
|
|
- VM # for running the test suite in a VM
|
|
- valgrind # for running the test suite under valgrind in a VM
|
|
- distro # distribs test
|
|
- deploy # trigger wayland's website generation
|
|
- container_clean # clean up unused container images
|
|
|
|
variables:
|
|
###############################################################################
|
|
# This is the list of packages required to build libinput with the default #
|
|
# configuration. #
|
|
# #
|
|
# Run dnf install/apt-get install/.. with the list of packages for your #
|
|
# distribution #
|
|
# #
|
|
# See the documentation here: #
|
|
# https://wayland.freedesktop.org/libinput/doc/latest/building_libinput.html #
|
|
###############################################################################
|
|
FEDORA_RPMS: 'git gcc gcc-c++ pkgconf-pkg-config meson check-devel libudev-devel libevdev-devel doxygen graphviz python3-sphinx python3-recommonmark python3-sphinx_rtd_theme libwacom-devel cairo-devel gtk3-devel glib2-devel mtdev-devel diffutils'
|
|
FEDORA_QEMU_RPMS: 'git gcc gcc-c++ pkgconf-pkg-config meson check-devel libudev-devel libevdev-devel doxygen graphviz python3-sphinx python3-recommonmark python3-sphinx_rtd_theme libwacom-devel cairo-devel gtk3-devel glib2-devel mtdev-devel diffutils valgrind'
|
|
UBUNTU_CUSTOM_DEBS: 'git gcc g++ pkg-config meson check libudev-dev libevdev-dev doxygen graphviz python3-sphinx python3-recommonmark python3-sphinx-rtd-theme libwacom-dev libcairo2-dev libgtk-3-dev libglib2.0-dev libmtdev-dev'
|
|
ARCH_PKGS: 'git gcc pkgconfig meson check libsystemd libevdev doxygen graphviz python-sphinx python-recommonmark python-sphinx_rtd_theme libwacom gtk3 mtdev diffutils'
|
|
FREEBSD_BUILD_PKGS: 'meson'
|
|
FREEBSD_PKGS: 'libepoll-shim libudev-devd libevdev libwacom gtk3 libmtdev '
|
|
ALPINE_PKGS: 'git gcc build-base pkgconfig meson check-dev eudev-dev libevdev-dev libwacom-dev cairo-dev gtk+3.0-dev mtdev-dev bash'
|
|
############################ end of package lists #############################
|
|
|
|
# these tags should be updated each time the list of packages is updated
|
|
# changing these will force rebuilding the associated image
|
|
# Note: these tags have no meaning and are not tied to a particular
|
|
# libinput version
|
|
FEDORA_TAG: '2019-12-12.0'
|
|
UBUNTU_TAG: '2019-12-12.0'
|
|
ARCH_TAG: '2019-12-12.0'
|
|
ALPINE_TAG: '2019-12-12.0'
|
|
FREEBSD_TAG: '2019-12-12.0'
|
|
QEMU_TAG: 'qemu-vm-2019-12-12.0'
|
|
|
|
UBUNTU_EXEC: "bash .gitlab-ci/ubuntu_install.sh $UBUNTU_CUSTOM_DEBS"
|
|
|
|
UPSTREAM_REPO: libinput/libinput
|
|
BUILDAH_IMAGE: $CI_REGISTRY/wayland/ci-templates/buildah:latest
|
|
FEDORA_CONTAINER_IMAGE: $CI_REGISTRY_IMAGE/fedora/$FEDORA_VERSION:$FEDORA_TAG
|
|
UBUNTU_CONTAINER_IMAGE: $CI_REGISTRY_IMAGE/ubuntu/$UBUNTU_VERSION:$UBUNTU_TAG
|
|
ARCH_CONTAINER_IMAGE: $CI_REGISTRY_IMAGE/archlinux/rolling:$ARCH_TAG
|
|
ALPINE_CONTAINER_IMAGE: $CI_REGISTRY_IMAGE/alpine/latest:$ALPINE_TAG
|
|
FREEBSD_CONTAINER_IMAGE: $CI_REGISTRY_IMAGE/freebsd/11.2:$FREEBSD_TAG
|
|
QEMU_CONTAINER_IMAGE: $CI_REGISTRY_IMAGE/fedora/$FEDORA_VERSION:$QEMU_TAG
|
|
|
|
MESON_BUILDDIR: "build dir"
|
|
NINJA_ARGS: ''
|
|
MESON_ARGS: ''
|
|
MESON_TEST_ARGS: '--no-suite=hardware'
|
|
|
|
# udev isn't available/working properly in the containers
|
|
UDEV_NOT_AVAILABLE: 1
|
|
GIT_DEPTH: 1
|
|
|
|
.policy:
|
|
retry:
|
|
max: 2
|
|
when:
|
|
- runner_system_failure
|
|
- stuck_or_timeout_failure
|
|
# cancel run when a newer version is pushed to the branch
|
|
interruptible: true
|
|
|
|
.default_artifacts:
|
|
artifacts:
|
|
name: "meson-logs-$CI_JOB_NAME"
|
|
when: always
|
|
expire_in: 1 week
|
|
paths:
|
|
- $MESON_BUILDDIR/meson-logs
|
|
reports:
|
|
junit: $MESON_BUILDDIR/junit-*.xml
|
|
|
|
#################################################################
|
|
# #
|
|
# prep stage #
|
|
# #
|
|
#################################################################
|
|
|
|
|
|
check-commit:
|
|
image: golang:alpine
|
|
stage: prep
|
|
before_script:
|
|
- apk add python3 git
|
|
script:
|
|
- pip3 install GitPython
|
|
- pip3 install pytest
|
|
- |
|
|
pytest --junitxml=results.xml \
|
|
--tb=line \
|
|
--assert=plain \
|
|
./.gitlab-ci/check-commit.py
|
|
except:
|
|
- master@libinput/libinput
|
|
variables:
|
|
GIT_DEPTH: 100
|
|
artifacts:
|
|
reports:
|
|
junit: results.xml
|
|
|
|
#
|
|
# This stage will recreate the container images only if the image
|
|
# is too old or if it is missing some dependencies.
|
|
#
|
|
|
|
.pull_upstream_or_rebuild:
|
|
before_script:
|
|
# log in to the registry
|
|
- podman login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY
|
|
|
|
# get the full container image name (DISTRIB_VERSION still has indirections)
|
|
- IMAGE=$(eval echo "$DISTRIB_FLAVOR/$DISTRIB_VERSION:$TAG")
|
|
|
|
# force rebuild if schedule, reuse otherwise
|
|
- if [[ $CI_PIPELINE_SOURCE == "schedule" ]] ; then touch .scheduled; fi
|
|
# pull the latest upstream image if it exists
|
|
- test -e .scheduled || skopeo copy --dest-creds $CI_REGISTRY_USER:$CI_REGISTRY_PASSWORD
|
|
docker://$CI_REGISTRY/$UPSTREAM_REPO/$IMAGE
|
|
docker://$CI_REGISTRY_IMAGE/$IMAGE && exit 0 || true ;
|
|
|
|
# check if our image is already in the current registry
|
|
- test -e .scheduled || skopeo inspect docker://$CI_REGISTRY_IMAGE/$IMAGE > /dev/null && exit 0 || true ;
|
|
|
|
fedora:30@qemu-prep:
|
|
extends:
|
|
- .fedora@qemu-build
|
|
- .policy
|
|
- .pull_upstream_or_rebuild
|
|
stage: prep
|
|
tags:
|
|
- kvm
|
|
variables:
|
|
GIT_STRATEGY: none
|
|
FEDORA_VERSION: 30
|
|
FEDORA_TAG: $QEMU_TAG
|
|
FEDORA_RPMS: $FEDORA_QEMU_RPMS
|
|
DISTRIB_FLAVOR: fedora
|
|
DISTRIB_VERSION: $FEDORA_VERSION
|
|
TAG: $QEMU_TAG
|
|
allow_failure: true
|
|
|
|
fedora:30@container-prep:
|
|
extends:
|
|
- .fedora@container-build
|
|
- .policy
|
|
- .pull_upstream_or_rebuild
|
|
stage: prep
|
|
variables:
|
|
GIT_STRATEGY: none
|
|
FEDORA_VERSION: 30
|
|
DISTRIB_FLAVOR: fedora
|
|
DISTRIB_VERSION: $FEDORA_VERSION
|
|
TAG: $FEDORA_TAG
|
|
|
|
fedora:31@container-prep:
|
|
extends:
|
|
- .fedora@container-build
|
|
- .policy
|
|
- .pull_upstream_or_rebuild
|
|
stage: prep
|
|
variables:
|
|
GIT_STRATEGY: none
|
|
FEDORA_VERSION: 31
|
|
DISTRIB_FLAVOR: fedora
|
|
DISTRIB_VERSION: $FEDORA_VERSION
|
|
TAG: $FEDORA_TAG
|
|
|
|
|
|
ubuntu:19.10@container-prep:
|
|
extends:
|
|
- .ubuntu@container-build
|
|
- .policy
|
|
- .pull_upstream_or_rebuild
|
|
stage: prep
|
|
variables:
|
|
GIT_STRATEGY: none
|
|
UBUNTU_VERSION: "19.10"
|
|
DISTRIB_FLAVOR: ubuntu
|
|
DISTRIB_VERSION: $UBUNTU_VERSION
|
|
TAG: $UBUNTU_TAG
|
|
|
|
ubuntu:19.04@container-prep:
|
|
extends:
|
|
- .ubuntu@container-build
|
|
- .policy
|
|
- .pull_upstream_or_rebuild
|
|
stage: prep
|
|
variables:
|
|
GIT_STRATEGY: none
|
|
UBUNTU_VERSION: "19.04"
|
|
DISTRIB_FLAVOR: ubuntu
|
|
DISTRIB_VERSION: $UBUNTU_VERSION
|
|
TAG: $UBUNTU_TAG
|
|
|
|
|
|
arch:rolling@container-prep:
|
|
extends:
|
|
- .arch@container-build
|
|
- .policy
|
|
- .pull_upstream_or_rebuild
|
|
stage: prep
|
|
variables:
|
|
GIT_STRATEGY: none
|
|
ARCH_VERSION: rolling
|
|
DISTRIB_FLAVOR: archlinux
|
|
DISTRIB_VERSION: $ARCH_VERSION
|
|
TAG: $ARCH_TAG
|
|
|
|
alpine:latest@container-prep:
|
|
extends:
|
|
- .alpine@container-build
|
|
- .policy
|
|
- .pull_upstream_or_rebuild
|
|
stage: prep
|
|
variables:
|
|
GIT_STRATEGY: none
|
|
ALPINE_VERSION: latest
|
|
DISTRIB_FLAVOR: alpine
|
|
DISTRIB_VERSION: $ALPINE_VERSION
|
|
TAG: $ALPINE_TAG
|
|
|
|
.freebsd@container-prep:
|
|
extends:
|
|
- .policy
|
|
- .pull_upstream_or_rebuild
|
|
stage: prep
|
|
image: $BUILDAH_IMAGE
|
|
script:
|
|
- export BUILDAH_RUN="buildah run --isolation chroot"
|
|
- export BUILDAH_COMMIT="buildah commit --format docker"
|
|
- buildcntr=$(buildah from --quiet myfreeweb/freebsd-cross:latest)
|
|
- $BUILDAH_RUN $buildcntr apk add --no-cache $FREEBSD_BUILD_PKGS
|
|
- $BUILDAH_RUN $buildcntr pkg -r /freebsd update -f
|
|
- $BUILDAH_RUN $buildcntr pkg -r /freebsd install -y $FREEBSD_PKGS
|
|
- buildah config --workingdir /app $buildcntr
|
|
# tag the current container
|
|
- $BUILDAH_COMMIT $buildcntr $FREEBSD_CONTAINER_IMAGE
|
|
# clean up the working container
|
|
- buildah rm $buildcntr
|
|
|
|
# push the container image to the libinput registry
|
|
- podman push --quiet $FREEBSD_CONTAINER_IMAGE
|
|
- skopeo copy --dest-creds $CI_REGISTRY_USER:$CI_REGISTRY_PASSWORD
|
|
docker://$FREEBSD_CONTAINER_IMAGE
|
|
docker://$CI_REGISTRY_IMAGE/freebsd/$FREEBSD_VERSION:$CI_JOB_ID
|
|
|
|
freebsd:11.2@container-prep:
|
|
extends:
|
|
- .freebsd@container-prep
|
|
variables:
|
|
GIT_STRATEGY: none
|
|
FREEBSD_VERSION: "11.2"
|
|
DISTRIB_FLAVOR: freebsd
|
|
DISTRIB_VERSION: $FREEBSD_VERSION
|
|
TAG: $FREEBSD_TAG
|
|
|
|
|
|
#################################################################
|
|
# #
|
|
# container clean stage #
|
|
# run during the clean stage #
|
|
# #
|
|
#################################################################
|
|
|
|
#
|
|
# This stage will look for the container images we currently have in
|
|
# the registry and will remove any that are not tagged with the provided
|
|
# $container_image:$tag
|
|
#
|
|
.container-clean:
|
|
extends:
|
|
- .policy
|
|
stage: container_clean
|
|
image: $BUILDAH_IMAGE
|
|
script:
|
|
# get the full container image name (CURRENT_CONTAINER_IMAGE still has indirections)
|
|
- CONTAINER_IMAGE=$(eval echo "$CURRENT_CONTAINER_IMAGE")
|
|
- GITLAB=$(echo $CI_PROJECT_URL | cut -f3 -d/)
|
|
- REPOSITORY=$(echo $CONTAINER_IMAGE | cut -f2- -d/ | cut -f1 -d:)
|
|
- IMAGE_PATH=$(echo $CONTAINER_IMAGE | cut -f1 -d:)
|
|
- LATEST_TAG=$(echo $CONTAINER_IMAGE | cut -f2 -d:)
|
|
|
|
# log in to the registry (read only)
|
|
- podman login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY
|
|
|
|
# get the r/w token from the settings to access the registry
|
|
#
|
|
# each developer needs to register a secret variable that contains
|
|
# a personal token with api access. The token
|
|
# - must be named PERSONAL_TOKEN_$USER (for example PERSONAL_TOKEN_bentiss)
|
|
# - must be registered in the CI/CD Variables section as type file
|
|
# - value must be a netrc file as a single-line string:
|
|
# default login <user> password <token value>
|
|
# e.g. "default login bentiss password 1235abcde"
|
|
- tokenname="PERSONAL_TOKEN_$GITLAB_USER_LOGIN"
|
|
- netrcfile=$(eval echo "\$$tokenname")
|
|
- if [[ ! -f "$netrcfile" ]]; then
|
|
echo "No netrc file found or token is missing, skipping job" && false;
|
|
fi
|
|
|
|
# request a token for the registry API
|
|
- REGISTRY_TOKEN=$(curl https://$GITLAB/jwt/auth --get
|
|
--silent --show-error
|
|
-d client_id=docker
|
|
-d offline_token=true
|
|
-d service=container_registry
|
|
-d "scope=repository:$REPOSITORY:pull,*"
|
|
--fail
|
|
--netrc-file "$netrcfile"
|
|
| sed -r 's/(\{"token":"|"\})//g')
|
|
|
|
# get the digest of the latest image
|
|
- LATEST_MANIFEST=$(skopeo inspect docker://$IMAGE_PATH:$LATEST_TAG | jq -r '.Digest')
|
|
|
|
# get the list of tags
|
|
- TAGS=$(skopeo inspect docker://$IMAGE_PATH:$LATEST_TAG | jq -r '.RepoTags[]')
|
|
# FIXME: is the above command working properly? If not, use below:
|
|
# - TAGS=$(curl -X GET -H "accept:application/vnd.docker.distribution.manifest.v2+json"
|
|
# -H "authorization:Bearer $REGISTRY_TOKEN"
|
|
# https://$CI_REGISTRY/v2/$REPOSITORY/tags/list | jq -r '.tags[]')
|
|
|
|
# iterate over the tags
|
|
- for tag in $TAGS;
|
|
do
|
|
MANIFEST=$(skopeo inspect docker://$IMAGE_PATH:$tag | jq -r '.Digest');
|
|
if test x"$MANIFEST" != x"$LATEST_MANIFEST";
|
|
then
|
|
echo removing $tag as $MANIFEST;
|
|
curl https://$CI_REGISTRY/v2/$REPOSITORY/manifests/$MANIFEST --silent
|
|
-H "accept:application/vnd.docker.distribution.manifest.v2+json"
|
|
-H "authorization:Bearer $REGISTRY_TOKEN"
|
|
--fail --show-error -X DELETE || true
|
|
;fi
|
|
;done
|
|
dependencies: []
|
|
allow_failure: true
|
|
only:
|
|
- schedules
|
|
|
|
fedora:30@container-clean:
|
|
extends:
|
|
- .container-clean
|
|
variables:
|
|
GIT_STRATEGY: none
|
|
FEDORA_VERSION: 30
|
|
CURRENT_CONTAINER_IMAGE: $FEDORA_CONTAINER_IMAGE
|
|
|
|
fedora:31@container-clean:
|
|
extends:
|
|
- .container-clean
|
|
variables:
|
|
GIT_STRATEGY: none
|
|
FEDORA_VERSION: 31
|
|
CURRENT_CONTAINER_IMAGE: $FEDORA_CONTAINER_IMAGE
|
|
|
|
ubuntu:19.10@container-clean:
|
|
extends:
|
|
- .container-clean
|
|
variables:
|
|
GIT_STRATEGY: none
|
|
UBUNTU_VERSION: "19.10"
|
|
CURRENT_CONTAINER_IMAGE: $UBUNTU_CONTAINER_IMAGE
|
|
|
|
ubuntu:19.04@container-clean:
|
|
extends:
|
|
- .container-clean
|
|
variables:
|
|
GIT_STRATEGY: none
|
|
UBUNTU_VERSION: "19.04"
|
|
CURRENT_CONTAINER_IMAGE: $UBUNTU_CONTAINER_IMAGE
|
|
|
|
arch:rolling@container-clean:
|
|
extends:
|
|
- .container-clean
|
|
variables:
|
|
GIT_STRATEGY: none
|
|
CURRENT_CONTAINER_IMAGE: $ARCH_CONTAINER_IMAGE
|
|
|
|
alpine:latest@container-clean:
|
|
extends:
|
|
- .container-clean
|
|
variables:
|
|
GIT_STRATEGY: none
|
|
CURRENT_CONTAINER_IMAGE: $ALPINE_CONTAINER_IMAGE
|
|
|
|
freebsd:11.2@container-clean:
|
|
extends:
|
|
- .container-clean
|
|
variables:
|
|
GIT_STRATEGY: none
|
|
CURRENT_CONTAINER_IMAGE: $FREEBSD_CONTAINER_IMAGE
|
|
|
|
#################################################################
|
|
# #
|
|
# build stage #
|
|
# #
|
|
#################################################################
|
|
|
|
.build@template:
|
|
extends:
|
|
- .policy
|
|
- .default_artifacts
|
|
stage: build
|
|
script:
|
|
- .gitlab-ci/meson-build.sh
|
|
dependencies: []
|
|
|
|
#
|
|
# Fedora
|
|
#
|
|
|
|
.check_tainted: &check_tainted |
|
|
# make sure the kernel is not tainted
|
|
if [[ "$(ssh localhost -p 5555 cat /proc/sys/kernel/tainted)" -gt 0 ]];
|
|
then
|
|
echo tainted kernel ;
|
|
exit 1 ;
|
|
fi
|
|
|
|
# Run in a test suite. Special variables:
|
|
# - SUITES: the meson test suites to run, or
|
|
# - SUITE_NAMES: all elements will be expanded to libinput-test-suite-$value
|
|
# Set one or the other, not both.
|
|
.fedora:30@test-suite-vm:
|
|
extends:
|
|
- .policy
|
|
stage: VM
|
|
image: $QEMU_CONTAINER_IMAGE
|
|
tags:
|
|
- kvm
|
|
variables:
|
|
FEDORA_VERSION: 30
|
|
MESON_BUILDDIR: build_dir
|
|
# remove the global --no-suite=hardware
|
|
MESON_TEST_ARGS: ''
|
|
before_script:
|
|
- if ! [[ -z $SUITE_NAMES ]]; then SUITES=$(echo $SUITE_NAMES | sed 's/\([^ ]*\)/libinput-test-suite-\1/g'); fi
|
|
- echo "Testing $SUITES"
|
|
script:
|
|
# start our vm, no args required
|
|
- /app/start_vm.sh || (echo "Error - Failed to start the VM." && exit 1)
|
|
|
|
- *check_tainted
|
|
|
|
- "scp -P 5555 -r $PWD localhost:"
|
|
- echo "CI_JOB_ID=\"$CI_JOB_ID\"" > sshenv
|
|
- echo "CI_JOB_NAME=\"$CI_JOB_NAME\"" >> sshenv
|
|
- echo "MESON_BUILDDIR=\"$MESON_BUILDDIR\"" >> sshenv
|
|
- echo "MESON_TEST_ARGS=\"$MESON_TEST_ARGS $SUITES\"" >> sshenv
|
|
- echo "NINJA_ARGS=\"$NINJA_ARGS\"" >> sshenv
|
|
- "scp -P 5555 sshenv localhost:~/$CI_PROJECT_NAME/.meson_environment"
|
|
- ssh localhost -p 5555 "cd $CI_PROJECT_NAME ; .gitlab-ci/meson-build.sh" && touch .success || true
|
|
# no matter the results of the tests, we want to fetch the logs
|
|
- scp -P 5555 -r localhost:$CI_PROJECT_NAME/$MESON_BUILDDIR .
|
|
|
|
- *check_tainted
|
|
|
|
- ssh localhost -p 5555 halt || true
|
|
- sleep 2
|
|
- pkill qemu || true
|
|
|
|
- if [[ ! -e .success ]] ;
|
|
then
|
|
exit 1 ;
|
|
fi
|
|
artifacts:
|
|
name: "qemu-meson-logs-$CI_JOB_NAME"
|
|
when: always
|
|
expire_in: 1 week
|
|
paths:
|
|
- $MESON_BUILDDIR/meson-logs
|
|
- console.out
|
|
reports:
|
|
junit: $MESON_BUILDDIR/junit-*.xml
|
|
|
|
allow_failure: true
|
|
retry:
|
|
max: 2
|
|
when: script_failure
|
|
needs: ['fedora:30@qemu-prep']
|
|
|
|
# in reverse order of duration to get the slowest ones started first
|
|
fedora:30@vm-touchpad:
|
|
extends:
|
|
- .fedora:30@test-suite-vm
|
|
variables:
|
|
SUITE_NAMES: 'touchpad'
|
|
|
|
fedora:30@vm-tap:
|
|
extends:
|
|
- .fedora:30@test-suite-vm
|
|
variables:
|
|
SUITE_NAMES: 'tap'
|
|
|
|
fedora:30@vm-tablet:
|
|
extends:
|
|
- .fedora:30@test-suite-vm
|
|
variables:
|
|
SUITE_NAMES: 'tablet'
|
|
|
|
fedora:30@vm-gestures-device:
|
|
extends:
|
|
- .fedora:30@test-suite-vm
|
|
variables:
|
|
SUITE_NAMES: 'gestures device'
|
|
|
|
fedora:30@vm-others:
|
|
extends:
|
|
- .fedora:30@test-suite-vm
|
|
variables:
|
|
SUITE_NAMES: 'context config misc events totem udev lid log timer tablet-mode quirks trackball pad path keyboard switch touch trackpoint'
|
|
|
|
fedora:30@vm-pointer:
|
|
extends:
|
|
- .fedora:30@test-suite-vm
|
|
variables:
|
|
SUITE_NAMES: 'pointer'
|
|
|
|
fedora:30@valgrind-touchpad:
|
|
stage: valgrind
|
|
extends:
|
|
- fedora:30@vm-touchpad
|
|
variables:
|
|
MESON_TEST_ARGS: '--setup=valgrind'
|
|
|
|
fedora:30@valgrind-tap:
|
|
stage: valgrind
|
|
extends:
|
|
- fedora:30@vm-tap
|
|
variables:
|
|
MESON_TEST_ARGS: '--setup=valgrind'
|
|
|
|
fedora:30@valgrind-tablet:
|
|
stage: valgrind
|
|
extends:
|
|
- fedora:30@vm-tablet
|
|
variables:
|
|
MESON_TEST_ARGS: '--setup=valgrind'
|
|
|
|
fedora:30@valgrind-gestures-device:
|
|
stage: valgrind
|
|
extends:
|
|
- fedora:30@vm-gestures-device
|
|
variables:
|
|
MESON_TEST_ARGS: '--setup=valgrind'
|
|
|
|
|
|
fedora:30@valgrind-others:
|
|
stage: valgrind
|
|
extends:
|
|
- fedora:30@vm-others
|
|
variables:
|
|
MESON_TEST_ARGS: '--setup=valgrind'
|
|
|
|
fedora:30@valgrind-pointer:
|
|
stage: valgrind
|
|
extends:
|
|
- fedora:30@vm-pointer
|
|
variables:
|
|
MESON_TEST_ARGS: '--setup=valgrind'
|
|
|
|
.fedora-build@template:
|
|
extends:
|
|
- .build@template
|
|
image: $FEDORA_CONTAINER_IMAGE
|
|
|
|
fedora:31@default-build:
|
|
stage: distro
|
|
extends:
|
|
- .fedora-build@template
|
|
variables:
|
|
FEDORA_VERSION: 31
|
|
needs: ['fedora:31@container-prep']
|
|
|
|
fedora:30@default-build:
|
|
stage: distro
|
|
extends:
|
|
- .fedora-build@template
|
|
variables:
|
|
FEDORA_VERSION: 30
|
|
needs: ['fedora:30@container-prep']
|
|
|
|
fedora:30@default-build-release:
|
|
stage: distro
|
|
extends:
|
|
- .fedora-build@template
|
|
variables:
|
|
FEDORA_VERSION: 30
|
|
MESON_ARGS: "-Dbuildtype=release"
|
|
CFLAGS: "-Werror"
|
|
needs: ['fedora:30@container-prep']
|
|
|
|
fedora:30@scan-build:
|
|
extends:
|
|
- .fedora-build@template
|
|
variables:
|
|
FEDORA_VERSION: 30
|
|
NINJA_ARGS: scan-build
|
|
before_script:
|
|
- dnf install -y clang-analyzer findutils
|
|
after_script:
|
|
- test ! -d "$MESON_BUILDDIR"/meson-logs/scanbuild && exit 0
|
|
- test $(find "$MESON_BUILDDIR"/meson-logs/scanbuild -maxdepth 0 ! -empty -exec echo "not empty" \; | wc -l) -eq 0 && exit 0
|
|
- echo "Check scan-build results"
|
|
- /bin/false
|
|
needs: ['fedora:30@container-prep']
|
|
|
|
# Below jobs are build option combinations. We only
|
|
# run them on one image, they shouldn't fail on one distro
|
|
# when they succeed on another.
|
|
|
|
fedora:30@build-no-libwacom:
|
|
extends:
|
|
- .fedora-build@template
|
|
variables:
|
|
FEDORA_VERSION: 30
|
|
MESON_ARGS: "-Dlibwacom=false"
|
|
needs: ['fedora:30@container-prep']
|
|
|
|
fedora:30@build-no-libwacom-nodeps:
|
|
extends:
|
|
- .fedora-build@template
|
|
variables:
|
|
FEDORA_VERSION: 30
|
|
MESON_ARGS: "-Dlibwacom=false"
|
|
before_script:
|
|
- dnf remove -y libwacom libwacom-devel
|
|
needs: ['fedora:30@container-prep']
|
|
|
|
fedora:30@build-no-docs:
|
|
extends:
|
|
- .fedora-build@template
|
|
variables:
|
|
FEDORA_VERSION: 30
|
|
MESON_ARGS: "-Ddocumentation=false"
|
|
needs: ['fedora:30@container-prep']
|
|
|
|
fedora:30@build-no-docs-nodeps:
|
|
extends:
|
|
- .fedora-build@template
|
|
variables:
|
|
FEDORA_VERSION: 30
|
|
MESON_ARGS: "-Ddocumentation=false"
|
|
before_script:
|
|
- dnf remove -y doxygen graphviz
|
|
needs: ['fedora:30@container-prep']
|
|
|
|
fedora:30@build-no-debuggui:
|
|
extends:
|
|
- .fedora-build@template
|
|
variables:
|
|
FEDORA_VERSION: 30
|
|
MESON_ARGS: "-Ddebug-gui=false"
|
|
needs: ['fedora:30@container-prep']
|
|
|
|
fedora:30@build-no-debuggui-nodeps:
|
|
extends:
|
|
- .fedora-build@template
|
|
variables:
|
|
FEDORA_VERSION: 30
|
|
MESON_ARGS: "-Ddebug-gui=false"
|
|
before_script:
|
|
- dnf remove -y gtk3-devel
|
|
needs: ['fedora:30@container-prep']
|
|
|
|
fedora:30@build-no-tests:
|
|
extends:
|
|
- .fedora-build@template
|
|
variables:
|
|
FEDORA_VERSION: 30
|
|
MESON_ARGS: "-Dtests=false"
|
|
needs: ['fedora:30@container-prep']
|
|
|
|
fedora:30@build-no-tests-nodeps:
|
|
extends:
|
|
- .fedora-build@template
|
|
variables:
|
|
FEDORA_VERSION: 30
|
|
MESON_ARGS: "-Dtests=false"
|
|
before_script:
|
|
- dnf remove -y check-devel
|
|
needs: ['fedora:30@container-prep']
|
|
|
|
fedora:30@valgrind:
|
|
extends:
|
|
- .fedora-build@template
|
|
variables:
|
|
FEDORA_VERSION: 30
|
|
MESON_TEST_ARGS: '--suite=valgrind --no-suite=hardware --setup=valgrind'
|
|
before_script:
|
|
- dnf install -y valgrind
|
|
needs: ['fedora:30@container-prep']
|
|
|
|
# Python checks, only run on Fedora
|
|
|
|
fedora:30@usr-bin-env-python:
|
|
extends:
|
|
- .fedora-build@template
|
|
variables:
|
|
FEDORA_VERSION: 30
|
|
script:
|
|
- |
|
|
if git grep -l '^#!/usr/bin/python'; then
|
|
echo "Use '/usr/bin/env python3' in the above files";
|
|
/bin/false
|
|
fi
|
|
needs: ['fedora:30@container-prep']
|
|
|
|
fedora:30@flake8:
|
|
extends:
|
|
- .fedora-build@template
|
|
variables:
|
|
FEDORA_VERSION: 30
|
|
before_script:
|
|
- dnf install -y python3-flake8
|
|
script:
|
|
- flake8-3 --ignore=W501,E501,W504 $(git grep -l '^#!/usr/bin/env python3')
|
|
needs: ['fedora:30@container-prep']
|
|
|
|
#
|
|
# Ubuntu
|
|
#
|
|
|
|
.ubuntu@template:
|
|
stage: distro
|
|
extends:
|
|
- .build@template
|
|
image: $UBUNTU_CONTAINER_IMAGE
|
|
|
|
ubuntu:19.10@default-build:
|
|
extends:
|
|
- .ubuntu@template
|
|
variables:
|
|
UBUNTU_VERSION: "19.10"
|
|
needs: ['ubuntu:19.10@container-prep']
|
|
|
|
ubuntu:19.04@default-build:
|
|
extends:
|
|
- .ubuntu@template
|
|
variables:
|
|
UBUNTU_VERSION: "19.04"
|
|
needs: ['ubuntu:19.04@container-prep']
|
|
|
|
#
|
|
# Arch
|
|
#
|
|
.arch@template:
|
|
stage: distro
|
|
extends:
|
|
- .build@template
|
|
image: $ARCH_CONTAINER_IMAGE
|
|
|
|
arch:rolling@default-build:
|
|
extends:
|
|
- .arch@template
|
|
needs: ['arch:rolling@container-prep']
|
|
|
|
#
|
|
# Alpine
|
|
#
|
|
|
|
.alpine@template:
|
|
stage: distro
|
|
extends:
|
|
- .build@template
|
|
image: $ALPINE_CONTAINER_IMAGE
|
|
|
|
alpine:latest@default-build:
|
|
extends:
|
|
- .alpine@template
|
|
needs: ['alpine:latest@container-prep']
|
|
variables:
|
|
# alpine doesn't have python-recommonmark
|
|
MESON_ARGS: '-Ddocumentation=false'
|
|
# We don't run the tests on alpine. The litest-selftest fails
|
|
# for any tcase_add_exit_test/tcase_add_test_raise_signal
|
|
# but someone more invested in musl will have to figure that out.
|
|
MESON_TEST_ARGS: ''
|
|
|
|
#
|
|
# FreeBSD
|
|
#
|
|
.freebsd@template:
|
|
stage: distro
|
|
extends:
|
|
- .build@template
|
|
image: $FREEBSD_CONTAINER_IMAGE
|
|
variables:
|
|
MESON_ARGS: '--cross-file freebsd -Ddocumentation=false -Dtests=false -Depoll-dir=/freebsd/usr/local/'
|
|
# Can't run FreeBSD tests on Linux machine, so MESON_TEST_ARGS shouldn't be "test"
|
|
MESON_TEST_ARGS: ''
|
|
|
|
freebsd:11.2@default-build:
|
|
extends:
|
|
- .freebsd@template
|
|
needs: ['freebsd:11.2@container-prep']
|
|
|
|
#
|
|
# deploy
|
|
#
|
|
|
|
wayland-web:
|
|
image: $BUILDAH_IMAGE
|
|
stage: deploy
|
|
script:
|
|
# Requirements:
|
|
# - variable WAYLAND_WEB_TOKEN defined as type File in libinput's CI/CD settings
|
|
# - content of that file is the token value, as generated by the Pipeline Triggers
|
|
# of the wayland.freedesktop.org project.
|
|
- curl --request POST
|
|
--form "token=<$WAYLAND_WEB_TOKEN"
|
|
--form ref=master
|
|
https://gitlab.freedesktop.org/api/v4/projects/wayland${SLASH}wayland${DOT}freedesktop${DOT}org/trigger/pipeline
|
|
only:
|
|
refs:
|
|
- master
|
|
variables:
|
|
- $CI_PROJECT_PATH == "libinput/libinput"
|
|
dependencies: []
|
|
variables:
|
|
DOT: "%2E"
|
|
SLASH: "%2F"
|