-# vim: set expandtab shiftwidth=2 tabstop=8 textwidth=0:
-#
-# THIS FILE IS GENERATED, DO NOT EDIT
+########################################
+# #
+# THIS FILE IS GENERATED, DO NOT EDIT #
+# #
+########################################
-.templates_sha: &template_sha 01f2a6a8ab5cd31000c1c14a1acfff68ea98b59e # see https://docs.gitlab.com/ee/ci/yaml/#includefile
+.templates_sha: &template_sha 8410d3382c4ba5e83da76a027cb332169f2a95ad # see https://docs.gitlab.com/ee/ci/yaml/#includefile
include:
# Alpine container builder template
- project: 'wayland/ci-templates'
+ ref: *template_sha
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
+ # Centos container builder template
- project: 'wayland/ci-templates'
ref: *template_sha
- file: '/templates/ubuntu.yml'
+ file: '/templates/centos.yml'
# Debian container builder template
- project: 'wayland/ci-templates'
ref: *template_sha
file: '/templates/debian.yml'
- # CentOS container builder template
+ # Fedora container builder template
- project: 'wayland/ci-templates'
ref: *template_sha
- file: '/templates/centos.yml'
+ file: '/templates/fedora.yml'
+ # Ubuntu container builder template
+ - project: 'wayland/ci-templates'
+ ref: *template_sha
+ file: '/templates/ubuntu.yml'
stages:
- prep # rebuild the container images if there is a change
# Run dnf install/apt-get install/.. with the list of packages for your #
# distribution #
###############################################################################
- FEDORA_RPMS: 'git gcc gcc-c++ meson automake autoconf libtool make pkgconfig python3 check-devel valgrind binutils doxygen xz'
+ FEDORA_RPMS: 'git gcc gcc-c++ meson automake autoconf libtool make pkgconfig python3 check-devel valgrind binutils doxygen xz clang-analyzer'
CENTOS_RPMS: 'git gcc gcc-c++ automake autoconf libtool make pkgconfig python3 check-devel valgrind binutils xz'
UBUNTU_DEBS: 'git gcc g++ meson automake autoconf libtool make pkg-config python3 check valgrind binutils doxygen xz-utils'
DEBIAN_DEBS: $UBUNTU_DEBS
# changing these will force rebuilding the associated image
# Note: these tags have no meaning and are not tied to a particular
# libevdev version
- FEDORA_TAG: '2020-02-17.1'
- CENTOS_TAG: '2020-02-17.1'
- DEBIAN_TAG: '2020-02-17.1'
- UBUNTU_TAG: '2020-02-17.1'
- ARCH_TAG: '2020-02-17.1'
- ALPINE_TAG: '2020-02-17.1'
+ FEDORA_TAG: '2020-02-26.4'
+ CENTOS_TAG: '2020-02-26.4'
+ DEBIAN_TAG: '2020-02-26.4'
+ UBUNTU_TAG: '2020-02-26.4'
+ ARCH_TAG: '2020-02-26.4'
+ ALPINE_TAG: '2020-02-26.4'
+ QEMU_TAG: 'qemu-2020-02-26.4'
UPSTREAM_REPO: libevdev/libevdev
BUILDAH_IMAGE: $CI_REGISTRY/wayland/ci-templates/buildah:latest
CENTOS_CONTAINER_IMAGE: $CI_REGISTRY_IMAGE/centos/$CENTOS_VERSION:$CENTOS_TAG
UBUNTU_CONTAINER_IMAGE: $CI_REGISTRY_IMAGE/ubuntu/$UBUNTU_VERSION:$UBUNTU_TAG
DEBIAN_CONTAINER_IMAGE: $CI_REGISTRY_IMAGE/debian/$DEBIAN_VERSION:$DEBIAN_TAG
- ARCH_CONTAINER_IMAGE: $CI_REGISTRY_IMAGE/archlinux/rolling:$ARCH_TAG
+ ARCH_CONTAINER_IMAGE: $CI_REGISTRY_IMAGE/arch/rolling:$ARCH_TAG
ALPINE_CONTAINER_IMAGE: $CI_REGISTRY_IMAGE/alpine/latest:$ALPINE_TAG
+ QEMU_CONTAINER_IMAGE: $CI_REGISTRY_IMAGE/fedora/$FEDORA_VERSION:$QEMU_TAG
LIBEVDEV_SKIP_ROOT_TESTS: 1
GIT_DEPTH: 1
+ MESON_BUILDDIR: 'build dir'
.default_artifacts:
artifacts:
paths:
- _build/test/test-suite.log
- - builddir/meson-logs/testlog*.txt
+ - $MESON_BUILDDIR/meson-logs/
expire_in: 1 week
when: on_failure
reports:
- junit: junit-*.xml
+ junit: $MESON_BUILDDIR/junit-*.xml
.autotools_build:
extends:
extends:
- .default_artifacts
script:
- - meson builddir $MESON_ARGS
- - ninja -C builddir $NINJA_ARGS
- - if ! [[ -z '$MESON_TEST_ARGS' ]]; then
- meson test -C builddir $MESON_TEST_ARGS;
- fi
+ - .gitlab-ci/meson-build.sh
#################################################################
# #
stage: prep
before_script:
- apk add python3 git
- - pip3 install --user jinja2
+ - pip3 install --user jinja2 PyYAML
script:
- python3 ./.gitlab-ci/generate-gitlab-ci.py
- git diff --exit-code && exit 0 || true
variables:
GIT_DEPTH: 100
artifacts:
+ expire_in: 1 week
+ when: on_failure
+ paths:
+ - results.xml
reports:
junit: results.xml
- 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")
+ - IMAGE=$(eval echo "$DISTRIB_NAME/$DISTRIB_VERSION:$TAG")
- |
# force rebuild if schedule, reuse otherwise
skopeo inspect docker://$CI_REGISTRY_IMAGE/$IMAGE > /dev/null && exit 0 || true ;
fi
+fedora:31@qemu-prep:
+ extends:
+ - .fedora@qemu-build
+ - .pull_upstream_or_rebuild
+ stage: prep
+ tags:
+ - kvm
+ variables:
+ GIT_STRATEGY: none
+ FEDORA_VERSION: 31
+ FEDORA_TAG: $QEMU_TAG
+ DISTRIB_NAME: fedora
+ DISTRIB_VERSION: $FEDORA_VERSION
+ TAG: $QEMU_TAG
+ allow_failure: true
+
### fedora 30
fedora:30@container-prep:
variables:
GIT_STRATEGY: none
FEDORA_VERSION: '30'
- DISTRIB_FLAVOR: fedora
+ DISTRIB_NAME: fedora
DISTRIB_VERSION: $FEDORA_VERSION
TAG: $FEDORA_TAG
variables:
GIT_STRATEGY: none
FEDORA_VERSION: '31'
- DISTRIB_FLAVOR: fedora
+ DISTRIB_NAME: fedora
DISTRIB_VERSION: $FEDORA_VERSION
TAG: $FEDORA_TAG
variables:
GIT_STRATEGY: none
UBUNTU_VERSION: '19.10'
- DISTRIB_FLAVOR: ubuntu
+ DISTRIB_NAME: ubuntu
DISTRIB_VERSION: $UBUNTU_VERSION
TAG: $UBUNTU_TAG
variables:
GIT_STRATEGY: none
UBUNTU_VERSION: '19.04'
- DISTRIB_FLAVOR: ubuntu
+ DISTRIB_NAME: ubuntu
DISTRIB_VERSION: $UBUNTU_VERSION
TAG: $UBUNTU_TAG
variables:
GIT_STRATEGY: none
DEBIAN_VERSION: 'stable'
- DISTRIB_FLAVOR: debian
+ DISTRIB_NAME: debian
DISTRIB_VERSION: $DEBIAN_VERSION
TAG: $DEBIAN_TAG
variables:
GIT_STRATEGY: none
DEBIAN_VERSION: 'sid'
- DISTRIB_FLAVOR: debian
+ DISTRIB_NAME: debian
DISTRIB_VERSION: $DEBIAN_VERSION
TAG: $DEBIAN_TAG
variables:
GIT_STRATEGY: none
CENTOS_VERSION: '7'
- DISTRIB_FLAVOR: centos
+ DISTRIB_NAME: centos
DISTRIB_VERSION: $CENTOS_VERSION
TAG: $CENTOS_TAG
variables:
GIT_STRATEGY: none
CENTOS_VERSION: '8'
- DISTRIB_FLAVOR: centos
+ DISTRIB_NAME: centos
DISTRIB_VERSION: $CENTOS_VERSION
TAG: $CENTOS_TAG
variables:
GIT_STRATEGY: none
ARCH_VERSION: 'rolling'
- DISTRIB_FLAVOR: archlinux
+ DISTRIB_NAME: arch
DISTRIB_VERSION: $ARCH_VERSION
TAG: $ARCH_TAG
variables:
GIT_STRATEGY: none
ALPINE_VERSION: 'latest'
- DISTRIB_FLAVOR: alpine
+ DISTRIB_NAME: alpine
DISTRIB_VERSION: $ALPINE_VERSION
TAG: $ALPINE_TAG
allow_failure: true
only:
- schedules
+ variables:
+ GIT_STRATEGY: none
### fedora 30
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
debian:stable@container-clean:
extends: .container-clean
variables:
- GIT_STRATEGY: none
DEBIAN_VERSION: 'stable'
CURRENT_CONTAINER_IMAGE: $DEBIAN_CONTAINER_IMAGE
debian:sid@container-clean:
extends: .container-clean
variables:
- GIT_STRATEGY: none
DEBIAN_VERSION: 'sid'
CURRENT_CONTAINER_IMAGE: $DEBIAN_CONTAINER_IMAGE
centos:7@container-clean:
extends: .container-clean
variables:
- GIT_STRATEGY: none
CENTOS_VERSION: '7'
CURRENT_CONTAINER_IMAGE: $CENTOS_CONTAINER_IMAGE
centos:8@container-clean:
extends: .container-clean
variables:
- GIT_STRATEGY: none
CENTOS_VERSION: '8'
CURRENT_CONTAINER_IMAGE: $CENTOS_CONTAINER_IMAGE
arch:rolling@container-clean:
extends: .container-clean
variables:
- GIT_STRATEGY: none
ARCH_VERSION: 'rolling'
CURRENT_CONTAINER_IMAGE: $ARCH_CONTAINER_IMAGE
alpine:latest@container-clean:
extends: .container-clean
variables:
- GIT_STRATEGY: none
ALPINE_VERSION: 'latest'
CURRENT_CONTAINER_IMAGE: $ALPINE_CONTAINER_IMAGE
- dnf remove -y check check-devel
variables:
MESON_ARGS: -Dtests=disabled
+ SKIP_MESON_TEST: 1
# doxygen is required for dist
no-doxygen:meson:
variables:
MESON_ARGS: -Dtests=disabled -Ddocumentation=disabled
NINJA_ARGS: ''
+ SKIP_MESON_TEST: 1
enable-gcov:meson:
extends: .fedora-custom-build@meson-template
variables:
MESON_ARGS: '-Dcoverity=true'
-valgrind:meson:
+scan-build:meson:
extends: .fedora-custom-build@meson-template
variables:
+ NINJA_ARGS: 'scan-build'
+ SKIP_MESON_TEST: 1
+
+soname:
+ stage: build
+ image: $FEDORA_CONTAINER_IMAGE
+ script:
+ - ./autogen.sh --prefix=$PWD/prefix-autotools/
+ - make install
+ - ls -l $PWD/prefix-autotools/lib/libevdev.so.2.3.0
+ - meson "$MESON_BUILDDIR" --prefix=$PWD/prefix-meson/
+ - ninja -C "$MESON_BUILDDIR" install
+ - ls -l $PWD/prefix-meson/lib64/libevdev.so.2.3.0
+ variables:
+ FEDORA_VERSION: 31
+ needs: ['fedora:31@container-prep']
+
+#################################################################
+# #
+# VM stage #
+# #
+#################################################################
+
+.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
+
+.qemu@fedora:31:
+ stage: VM
+ image: $QEMU_CONTAINER_IMAGE
+ tags:
+ - kvm
+ variables:
+ FEDORA_VERSION: 31
+ MESON_BUILDDIR: build_dir
+ script:
+ # start our vm, no args required
+ - /app/start_vm.sh
+
+ - *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\"" >> 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
+
+ retry:
+ max: 2
+ when: script_failure
+ needs: ['fedora:31@qemu-prep']
+
+qemu:meson:
+ extends: .qemu@fedora:31
+
+qemu:meson:valgrind:
+ extends: .qemu@fedora:31
+ variables:
MESON_TEST_ARGS: '--setup=valgrind'
meson-from-tarball:
- mkdir -p _tarball_dir
- tar xf _build/libevdev-*.tar.xz -C _tarball_dir
- pushd _tarball_dir/libevdev-*/ > /dev/null
- - meson builddir --prefix="$INSTALLDIR"
- - ninja -C builddir test
- - ninja -C builddir install
+ - meson "$MESON_BUILDDIR" --prefix="$INSTALLDIR"
+ - ninja -C "$MESON_BUILDDIR" test
+ - ninja -C "$MESON_BUILDDIR" install
- popd > /dev/null
- ls -lR $INSTALLDIR
variables:
image: $FEDORA_CONTAINER_IMAGE
script:
- export INSTALLDIR="$PWD/_inst"
- - meson builddir
- - ninja -C builddir dist
+ - meson "$MESON_BUILDDIR"
+ - ninja -C "$MESON_BUILDDIR" dist
- mkdir -p _tarball_dir
- - tar xf builddir/meson-dist/libevdev-*.xz -C _tarball_dir
+ - tar xf "$MESON_BUILDDIR"/meson-dist/libevdev-*.xz -C _tarball_dir
- pushd _tarball_dir/libevdev-*/ > /dev/null
- mkdir _build
- pushd _build > /dev/null