libevdev/.gitlab-ci.yml
Peter Hutterer da5bfe22d2 gitlab ci: add a helper script for container deletion
Rather than raw curl requests to the API, use a python script using the gitlab
python package to access everything. This makes things a bit more readable.

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2020-03-09 08:52:02 +10:00

862 lines
No EOL
22 KiB
YAML

########################################
# #
# THIS FILE IS GENERATED, DO NOT EDIT #
# #
########################################
.templates_sha: &template_sha df52af2195b052325daf5d715c88be90f8ec7d86 # 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'
# Centos container builder template
- project: 'wayland/ci-templates'
ref: *template_sha
file: '/templates/centos.yml'
# Debian container builder template
- project: 'wayland/ci-templates'
ref: *template_sha
file: '/templates/debian.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 # rebuild 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
- autotools # distribution builds with autotools
- meson # distribution builds with meson
- tarballs # tarball builds
- container_clean # clean up unused container images
variables:
# The upstrem repository we will check for images
FDO_UPSTREAM_REPO: libevdev/libevdev
LIBEVDEV_SKIP_ROOT_TESTS: 1
GIT_DEPTH: 1
MESON_BUILDDIR: 'build dir'
.default_artifacts:
artifacts:
paths:
- _build/test/test-suite.log
- $MESON_BUILDDIR/meson-logs/
expire_in: 1 week
when: on_failure
reports:
junit: $MESON_BUILDDIR/junit-*.xml
.autotools_build:
extends:
- .default_artifacts
script:
- mkdir _build
- pushd _build > /dev/null
- ../autogen.sh --disable-silent-rules $CONFIGURE_FLAGS
- make
- make check
- if ! [[ -z "$MAKE_ARGS" ]]; then make $MAKE_ARGS; fi
- popd > /dev/null
.meson_build:
extends:
- .default_artifacts
script:
- .gitlab-ci/meson-build.sh
# Base image for a given distribution, provides
# - the image of that distribution
# - DISTRO_CONTAINER_IMAGE for any manipulation the job needs to be
.distribution_image:
image: $CI_REGISTRY_IMAGE/$DISTRIB_NAME/$FDO_DISTRIBUTION_VERSION:$FDO_DISTRIBUTION_TAG
variables:
DISTRO_CONTAINER_IMAGE: $CI_REGISTRY_IMAGE/$DISTRIB_NAME/$FDO_DISTRIBUTION_VERSION:$FDO_DISTRIBUTION_TAG
.fedora:30:
extends: .distribution_image
variables:
DISTRIB_NAME: 'fedora'
FDO_DISTRIBUTION_TAG: '2020-03-06.0'
FDO_DISTRIBUTION_VERSION: '30'
.fedora:31:
extends: .distribution_image
variables:
DISTRIB_NAME: 'fedora'
FDO_DISTRIBUTION_TAG: '2020-03-06.0'
FDO_DISTRIBUTION_VERSION: '31'
.ubuntu:19.10:
extends: .distribution_image
variables:
DISTRIB_NAME: 'ubuntu'
FDO_DISTRIBUTION_TAG: '2020-03-06.0'
FDO_DISTRIBUTION_VERSION: '19.10'
.ubuntu:19.04:
extends: .distribution_image
variables:
DISTRIB_NAME: 'ubuntu'
FDO_DISTRIBUTION_TAG: '2020-03-06.0'
FDO_DISTRIBUTION_VERSION: '19.04'
.debian:stable:
extends: .distribution_image
variables:
DISTRIB_NAME: 'debian'
FDO_DISTRIBUTION_TAG: '2020-03-06.0'
FDO_DISTRIBUTION_VERSION: 'stable'
.debian:sid:
extends: .distribution_image
variables:
DISTRIB_NAME: 'debian'
FDO_DISTRIBUTION_TAG: '2020-03-06.0'
FDO_DISTRIBUTION_VERSION: 'sid'
.centos:7:
extends: .distribution_image
variables:
DISTRIB_NAME: 'centos'
FDO_DISTRIBUTION_TAG: '2020-03-06.0'
FDO_DISTRIBUTION_VERSION: '7'
.centos:8:
extends: .distribution_image
variables:
DISTRIB_NAME: 'centos'
FDO_DISTRIBUTION_TAG: '2020-03-06.0'
FDO_DISTRIBUTION_VERSION: '8'
.arch:rolling:
extends: .distribution_image
variables:
DISTRIB_NAME: 'arch'
FDO_DISTRIBUTION_TAG: '2020-03-06.0'
FDO_DISTRIBUTION_VERSION: 'rolling'
.alpine:latest:
extends: .distribution_image
variables:
DISTRIB_NAME: 'alpine'
FDO_DISTRIBUTION_TAG: '2020-03-06.0'
FDO_DISTRIBUTION_VERSION: 'latest'
#################################################################
# #
# prep stage #
# #
#################################################################
# Re-generate the CI script and make sure it's the one currently checked in
# If this job fails, re-generate the gitlab-ci.yml script, see
# $SRCDIR/.gitlab-ci/generate-gitlab-ci.py
#
check-ci-script:
image: golang:alpine
stage: prep
before_script:
- apk add python3 git
- pip3 install --user jinja2 PyYAML
script:
- python3 ./.gitlab-ci/generate-gitlab-ci.py
- git diff --exit-code && exit 0 || true
- echo "Committed gitlab-ci.yml differs from generated gitlab-ci.yml. Please verify"
- exit 1
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@libevdev/libevdev
variables:
GIT_DEPTH: 100
artifacts:
expire_in: 1 week
when: on_failure
paths:
- results.xml
reports:
junit: results.xml
.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 (FDO_DISTRIBUTION_VERSION still has indirections)
- IMAGE=$(eval echo "$DISTRIB_NAME/$FDO_DISTRIBUTION_VERSION:$FDO_DISTRIBUTION_TAG")
- |
# force rebuild if schedule, reuse otherwise
if [[ $CI_PIPELINE_SOURCE != "schedule" ]] ;
then
# pull the latest upstream image if it exists
skopeo copy docker://$CI_REGISTRY/$FDO_UPSTREAM_REPO/$IMAGE \
docker://$CI_REGISTRY_IMAGE/$IMAGE && exit 0 || true ;
# check if our image is already in the current registry
skopeo inspect docker://$CI_REGISTRY_IMAGE/$IMAGE > /dev/null && exit 0 || true ;
fi
.fedora:30@qemu-prep:
extends:
- .fedora:30
- .fdo.qemu-build@fedora
- .pull_upstream_or_rebuild
stage: prep
tags:
- kvm
variables:
GIT_STRATEGY: none
FDO_DISTRIBUTION_TAG: qemu-2020-03-06.0
FDO_DISTRIBUTION_PACKAGES: 'git gcc gcc-c++ meson automake autoconf libtool make pkgconfig python3 check-devel valgrind binutils doxygen xz clang-analyzer'
allow_failure: true
.fedora:31@qemu-prep:
extends:
- .fedora:31
- .fdo.qemu-build@fedora
- .pull_upstream_or_rebuild
stage: prep
tags:
- kvm
variables:
GIT_STRATEGY: none
FDO_DISTRIBUTION_TAG: qemu-2020-03-06.0
FDO_DISTRIBUTION_PACKAGES: 'git gcc gcc-c++ meson automake autoconf libtool make pkgconfig python3 check-devel valgrind binutils doxygen xz clang-analyzer'
allow_failure: true
fedora:31@qemu-prep:
extends: .fedora:31@qemu-prep
### fedora 30
fedora:30@container-prep:
extends:
- .fedora:30
- .fdo.container-build@fedora
- .pull_upstream_or_rebuild
stage: prep
variables:
GIT_STRATEGY: none
FDO_DISTRIBUTION_PACKAGES: 'git gcc gcc-c++ meson automake autoconf libtool make pkgconfig python3 check-devel valgrind binutils doxygen xz clang-analyzer'
### fedora 31
fedora:31@container-prep:
extends:
- .fedora:31
- .fdo.container-build@fedora
- .pull_upstream_or_rebuild
stage: prep
variables:
GIT_STRATEGY: none
FDO_DISTRIBUTION_PACKAGES: 'git gcc gcc-c++ meson automake autoconf libtool make pkgconfig python3 check-devel valgrind binutils doxygen xz clang-analyzer'
### ubuntu 19.10
ubuntu:19.10@container-prep:
extends:
- .ubuntu:19.10
- .fdo.container-build@ubuntu
- .pull_upstream_or_rebuild
stage: prep
variables:
GIT_STRATEGY: none
FDO_DISTRIBUTION_PACKAGES: 'git gcc g++ meson automake autoconf libtool make pkg-config python3 check valgrind binutils doxygen xz-utils'
### ubuntu 19.04
ubuntu:19.04@container-prep:
extends:
- .ubuntu:19.04
- .fdo.container-build@ubuntu
- .pull_upstream_or_rebuild
stage: prep
variables:
GIT_STRATEGY: none
FDO_DISTRIBUTION_PACKAGES: 'git gcc g++ meson automake autoconf libtool make pkg-config python3 check valgrind binutils doxygen xz-utils'
### debian stable
debian:stable@container-prep:
extends:
- .debian:stable
- .fdo.container-build@debian
- .pull_upstream_or_rebuild
stage: prep
variables:
GIT_STRATEGY: none
FDO_DISTRIBUTION_PACKAGES: 'git gcc g++ meson automake autoconf libtool make pkg-config python3 check valgrind binutils doxygen xz-utils'
### debian sid
debian:sid@container-prep:
extends:
- .debian:sid
- .fdo.container-build@debian
- .pull_upstream_or_rebuild
stage: prep
variables:
GIT_STRATEGY: none
FDO_DISTRIBUTION_PACKAGES: 'git gcc g++ meson automake autoconf libtool make pkg-config python3 check valgrind binutils doxygen xz-utils'
### centos 7
centos:7@container-prep:
extends:
- .centos:7
- .fdo.container-build@centos
- .pull_upstream_or_rebuild
stage: prep
variables:
GIT_STRATEGY: none
FDO_DISTRIBUTION_PACKAGES: 'git gcc gcc-c++ automake autoconf libtool make pkgconfig python3 check-devel valgrind binutils xz'
### centos 8
centos:8@container-prep:
extends:
- .centos:8
- .fdo.container-build@centos
- .pull_upstream_or_rebuild
stage: prep
variables:
GIT_STRATEGY: none
FDO_DISTRIBUTION_PACKAGES: 'git gcc gcc-c++ automake autoconf libtool make pkgconfig python3 check-devel valgrind binutils xz'
### arch rolling
arch:rolling@container-prep:
extends:
- .arch:rolling
- .fdo.container-build@arch
- .pull_upstream_or_rebuild
stage: prep
variables:
GIT_STRATEGY: none
FDO_DISTRIBUTION_PACKAGES: 'git gcc meson automake autoconf libtool make pkgconfig python3 check valgrind binutils doxygen'
### alpine latest
alpine:latest@container-prep:
extends:
- .alpine:latest
- .fdo.container-build@alpine
- .pull_upstream_or_rebuild
stage: prep
variables:
GIT_STRATEGY: none
FDO_DISTRIBUTION_PACKAGES: 'git gcc g++ meson automake autoconf libtool make pkgconfig python3 check-dev valgrind binutils doxygen xz linux-headers'
#################################################################
# #
# 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:
stage: container_clean
image: golang:alpine
before_script:
- apk add python3
- pip3 install --user python-gitlab
script:
- LATEST_TAG=$(echo $DISTRO_CONTAINER_IMAGE | cut -f2 -d:)
# Go to your Profile, Settings, Access Tokens
# Create a personal token with 'api' scope, copy the value.
# Go to Settings, CI/CD, Variables
# Define a variable of type File named AUTHFILE. Content is that token
# value.
- python3 .gitlab-ci/gitlab-container-delete $CI_SERVER_URL $CI_PROJECT_PATH
--repository $DISTRIB_NAME/$FDO_DISTRIBUTION_VERSION
--authfile $AUTHFILE --exclude-tag "$LATEST_TAG"
dependencies: []
allow_failure: true
only:
- schedules
### fedora 30
fedora:30@container-clean:
extends:
- .fedora:30
- .container-clean
### fedora 31
fedora:31@container-clean:
extends:
- .fedora:31
- .container-clean
### ubuntu 19.10
ubuntu:19.10@container-clean:
extends:
- .ubuntu:19.10
- .container-clean
### ubuntu 19.04
ubuntu:19.04@container-clean:
extends:
- .ubuntu:19.04
- .container-clean
### debian stable
debian:stable@container-clean:
extends:
- .debian:stable
- .container-clean
### debian sid
debian:sid@container-clean:
extends:
- .debian:sid
- .container-clean
### centos 7
centos:7@container-clean:
extends:
- .centos:7
- .container-clean
### centos 8
centos:8@container-clean:
extends:
- .centos:8
- .container-clean
### arch rolling
arch:rolling@container-clean:
extends:
- .arch:rolling
- .container-clean
### alpine latest
alpine:latest@container-clean:
extends:
- .alpine:latest
- .container-clean
#################################################################
# #
# build stage #
# #
#################################################################
.autotools-build@template:
extends:
- .autotools_build
stage: build
dependencies: []
variables:
MAKE_ARGS: "distcheck"
.meson-build@template:
extends:
- .meson_build
stage: build
dependencies: []
variables:
NINJA_ARGS: "dist"
fedora:30@autotools-build:
extends:
- .fedora:30
- .autotools-build@template
stage: autotools
needs: ['fedora:30@container-prep']
fedora:30@meson-build:
extends:
- .fedora:30
- .meson-build@template
stage: meson
needs: ['fedora:30@container-prep']
fedora:31@autotools-build:
extends:
- .fedora:31
- .autotools-build@template
stage: autotools
needs: ['fedora:31@container-prep']
fedora:31@meson-build:
extends:
- .fedora:31
- .meson-build@template
stage: meson
needs: ['fedora:31@container-prep']
ubuntu:19.10@autotools-build:
extends:
- .ubuntu:19.10
- .autotools-build@template
stage: autotools
needs: ['ubuntu:19.10@container-prep']
ubuntu:19.10@meson-build:
extends:
- .ubuntu:19.10
- .meson-build@template
stage: meson
needs: ['ubuntu:19.10@container-prep']
ubuntu:19.04@autotools-build:
extends:
- .ubuntu:19.04
- .autotools-build@template
stage: autotools
needs: ['ubuntu:19.04@container-prep']
ubuntu:19.04@meson-build:
extends:
- .ubuntu:19.04
- .meson-build@template
stage: meson
needs: ['ubuntu:19.04@container-prep']
debian:stable@autotools-build:
extends:
- .debian:stable
- .autotools-build@template
stage: autotools
needs: ['debian:stable@container-prep']
debian:stable@meson-build:
extends:
- .debian:stable
- .meson-build@template
stage: meson
needs: ['debian:stable@container-prep']
debian:sid@autotools-build:
extends:
- .debian:sid
- .autotools-build@template
stage: autotools
needs: ['debian:sid@container-prep']
debian:sid@meson-build:
extends:
- .debian:sid
- .meson-build@template
stage: meson
needs: ['debian:sid@container-prep']
centos:7@autotools-build:
extends:
- .centos:7
- .autotools-build@template
stage: autotools
variables:
MAKE_ARGS: '' # disable distcheck, requires doxygen
needs: ['centos:7@container-prep']
centos:8@autotools-build:
extends:
- .centos:8
- .autotools-build@template
stage: autotools
variables:
MAKE_ARGS: '' # disable distcheck, requires doxygen
needs: ['centos:8@container-prep']
arch:rolling@autotools-build:
extends:
- .arch:rolling
- .autotools-build@template
stage: autotools
needs: ['arch:rolling@container-prep']
arch:rolling@meson-build:
extends:
- .arch:rolling
- .meson-build@template
stage: meson
needs: ['arch:rolling@container-prep']
alpine:latest@autotools-build:
extends:
- .alpine:latest
- .autotools-build@template
stage: autotools
needs: ['alpine:latest@container-prep']
alpine:latest@meson-build:
extends:
- .alpine:latest
- .meson-build@template
stage: meson
needs: ['alpine:latest@container-prep']
# Build argument tests
#
# We only run the build option combinations on one image
# because they're supposed to fail equally on all
.fedora-custom-build@autotools-template:
extends:
- .fedora:31
- .autotools-build@template
stage: build
needs: ['fedora:31@container-prep']
no-valgrind:autotools:
extends: .fedora-custom-build@autotools-template
before_script:
- dnf remove -y valgrind
no-check:autotools:
extends: .fedora-custom-build@autotools-template
before_script:
- dnf remove -y check check-devel
no-doxygen:autotools:
extends: .fedora-custom-build@autotools-template
before_script:
- dnf remove -y doxygen
variables:
MAKE_ARGS: '' # disable distcheck, requires doxygen
# doxygen is required for distcheck
no-doxygen-check-valgrind:autotools:
extends: .fedora-custom-build@autotools-template
before_script:
- dnf remove -y doxygen valgrind check check-devel
variables:
MAKE_ARGS: '' # disable distcheck, requires doxygen
no-nm:autotools:
extends: .fedora-custom-build@autotools-template
before_script:
- mv /usr/bin/nm /usr/bin/nm.moved
enable-gcov:autotools:
extends: .fedora-custom-build@autotools-template
variables:
CONFIGURE_FLAGS: "--enable-gcov"
.fedora-custom-build@meson-template:
extends:
- .fedora:31
- .meson-build@template
stage: build
needs: ['fedora:31@container-prep']
no-valgrind:meson:
extends: .fedora-custom-build@meson-template
before_script:
- dnf remove -y valgrind
no-check:meson:
extends: .fedora-custom-build@meson-template
before_script:
- dnf remove -y check check-devel
variables:
MESON_ARGS: -Dtests=disabled
SKIP_MESON_TEST: 1
# doxygen is required for dist
no-doxygen:meson:
extends: .fedora-custom-build@meson-template
before_script:
- dnf remove -y doxygen
variables:
MESON_ARGS: -Ddocumentation=disabled
NINJA_ARGS: ''
# doxygen is required for dist
no-doxygen-check-valgrind:meson:
extends: .fedora-custom-build@meson-template
before_script:
- dnf remove -y doxygen valgrind check check-devel
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'
scan-build:meson:
extends: .fedora-custom-build@meson-template
variables:
NINJA_ARGS: 'scan-build'
SKIP_MESON_TEST: 1
soname:
extends:
- .fedora:31
stage: build
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
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:
extends:
- .fedora:31
stage: VM
image:
$CI_REGISTRY_IMAGE/$DISTRIB_NAME/$FDO_DISTRIBUTION_VERSION:qemu-$FDO_DISTRIBUTION_TAG
tags:
- kvm
variables:
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:
extends:
- .fedora:31
stage: tarballs
script:
- export INSTALLDIR="$PWD/_inst"
- mkdir _build
- pushd _build > /dev/null
- ../autogen.sh --disable-silent-rules $CONFIGURE_FLAGS
- make
- make distcheck
- popd > /dev/null
- mkdir -p _tarball_dir
- tar xf _build/libevdev-*.tar.xz -C _tarball_dir
- pushd _tarball_dir/libevdev-*/ > /dev/null
- meson "$MESON_BUILDDIR" --prefix="$INSTALLDIR"
- ninja -C "$MESON_BUILDDIR" test
- ninja -C "$MESON_BUILDDIR" install
- popd > /dev/null
- ls -lR $INSTALLDIR
needs: ['fedora:31@container-prep']
autotools-from-tarball:
extends:
- .fedora:31
stage: tarballs
script:
- export INSTALLDIR="$PWD/_inst"
- meson "$MESON_BUILDDIR"
- ninja -C "$MESON_BUILDDIR" dist
- mkdir -p _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
- ../autogen.sh --disable-silent-rules --prefix="$INSTALLDIR" $CONFIGURE_FLAGS
- make
- make install
- make distcheck
- popd > /dev/null
- popd > /dev/null
- ls -lR $INSTALLDIR
needs: ['fedora:31@container-prep']