mirror of
https://gitlab.freedesktop.org/libevdev/libevdev.git
synced 2026-05-20 07:48:10 +02:00
In the no-check:meson job, the ninja arg was "dist" so the test would be run as part of that anyway (and skipped, since we didn't have check). In the no-doxygen-check:meson job, the ninja arg was zero so the test would be skipped but since we don't have check we might as well just run it as empty test suite. And the same applies to the scan-build job, running the test shouldn't hurt here. Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
536 lines
16 KiB
Text
536 lines
16 KiB
Text
{# You're looking at the template here, so you can ignore the below
|
|
warning. This is the right file to edit #}
|
|
########################################
|
|
# #
|
|
# THIS FILE IS GENERATED, DO NOT EDIT #
|
|
# #
|
|
########################################
|
|
|
|
.templates_sha: &template_sha c1e465762df9d4208a03ed4df6cae15006579838 # see https://docs.gitlab.com/ee/ci/yaml/#includefile
|
|
|
|
include:
|
|
- project: 'freedesktop/ci-templates'
|
|
ref: *template_sha
|
|
file:
|
|
{% for distribution in distributions|map(attribute='name')|unique()|sort() %}
|
|
# {{ distribution.capitalize() }} container builder template
|
|
- '/templates/{{distribution}}.yml'
|
|
{% endfor %}
|
|
|
|
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
|
|
- merge-check # check for a merge request
|
|
|
|
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: always
|
|
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
|
|
|
|
{# Generate templates for every distribution/version combination we want, any
|
|
job can then just extends: .name:version and the images will sort
|
|
themselves out. #}
|
|
{% for distro in distributions %}
|
|
{% for version in distro.versions %}
|
|
.{{distro.name}}:{{version}}:
|
|
extends: .fdo.distribution-image@{{distro.name}}
|
|
variables:
|
|
FDO_DISTRIBUTION_TAG: '{{distro.tag}}'
|
|
FDO_DISTRIBUTION_VERSION: '{{version}}'
|
|
|
|
{% endfor %}
|
|
{% endfor %}
|
|
|
|
|
|
#################################################################
|
|
# #
|
|
# 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 py-pip git
|
|
- pip3 install git+http://gitlab.freedesktop.org/freedesktop/ci-templates
|
|
script:
|
|
- ci-fairy generate-template
|
|
- git diff --exit-code && exit 0 || true
|
|
- echo "Committed gitlab-ci.yml differs from generated gitlab-ci.yml. Please verify"
|
|
- exit 1
|
|
|
|
#
|
|
# Verify that commit messages are as expected, signed-off, etc.
|
|
#
|
|
|
|
check-commit:
|
|
image: golang:alpine
|
|
stage: prep
|
|
before_script:
|
|
- apk add python3 py-pip git
|
|
- pip3 install git+http://gitlab.freedesktop.org/freedesktop/ci-templates
|
|
script:
|
|
- ci-fairy check-commits --signed-off-by --junit-xml=results.xml
|
|
except:
|
|
- master@libevdev/libevdev
|
|
variables:
|
|
GIT_DEPTH: 100
|
|
artifacts:
|
|
reports:
|
|
junit: results.xml
|
|
|
|
#
|
|
# Verify that the merge request has the allow-collaboration checkbox ticked
|
|
#
|
|
|
|
check-merge-request:
|
|
image: golang:alpine
|
|
stage: merge-check
|
|
before_script:
|
|
- apk add python3 py-pip git
|
|
- pip3 install git+http://gitlab.freedesktop.org/freedesktop/ci-templates
|
|
script:
|
|
- ci-fairy check-merge-request --require-allow-collaboration --junit-xml=results.xml
|
|
artifacts:
|
|
when: on_failure
|
|
reports:
|
|
junit: results.xml
|
|
allow_failure: true
|
|
|
|
|
|
{% for distro in distributions %}
|
|
.{{ distro.name }}.packages:
|
|
variables:
|
|
FDO_DISTRIBUTION_PACKAGES: '{{ ' '.join(distro.packages)}}'
|
|
|
|
{% endfor %}
|
|
|
|
{% for distro in distributions if distro.want_qemu %}
|
|
{% set version = "{}".format(distro.versions|last()) %}
|
|
# Pulls in the qemu container from upstream or rebuilds it if missing
|
|
.{{ distro.name }}:{{ version }}@qemu-prep:
|
|
extends:
|
|
- .{{ distro.name }}:{{ version }}
|
|
- .{{ distro.name}}.packages
|
|
- .fdo.qemu-build@{{distro.name}}
|
|
stage: prep
|
|
tags:
|
|
- kvm
|
|
variables:
|
|
GIT_STRATEGY: none
|
|
FDO_DISTRIBUTION_TAG: qemu-{{ distro.tag }}
|
|
allow_failure: true
|
|
|
|
# Always rebuilds the container
|
|
.{{ distro.name }}:{{ version }}@qemu-forced-rebuild:
|
|
extends:
|
|
- .{{ distro.name }}:{{ version }}@qemu-prep
|
|
variables:
|
|
FDO_FORCE_REBUILD: 1
|
|
only:
|
|
- schedules
|
|
|
|
# This is the actual job
|
|
{{distro.name}}:{{version}}@qemu-prep:
|
|
extends: .{{distro.name}}:{{version}}@qemu-prep
|
|
|
|
{{distro.name}}:{{version}}@qemu-forced-rebuild:
|
|
extends: .{{distro.name}}:{{version}}@qemu-forced-rebuild
|
|
{% endfor %}
|
|
|
|
{% for distro in distributions %}
|
|
{% for version in distro.versions %}
|
|
|
|
# Pulls in the container from upstream or rebuilds it if missing
|
|
{{ distro.name }}:{{ version }}@container-prep:
|
|
extends:
|
|
- .{{ distro.name }}:{{ version }}
|
|
- .{{ distro.name}}.packages
|
|
- .fdo.container-build@{{ distro.name }}
|
|
stage: prep
|
|
variables:
|
|
GIT_STRATEGY: none
|
|
|
|
# Always rebuilds the container
|
|
{{ distro.name }}:{{ version }}@container-forced-rebuild:
|
|
extends:
|
|
- {{ distro.name }}:{{ version }}@container-prep
|
|
only:
|
|
- schedules
|
|
variables:
|
|
FDO_FORCE_REBUILD: 1
|
|
|
|
{% endfor %}
|
|
{% endfor %}
|
|
|
|
#################################################################
|
|
# #
|
|
# 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 py-pip git
|
|
- pip3 install git+http://gitlab.freedesktop.org/freedesktop/ci-templates
|
|
script:
|
|
# Go to your Profile, Settings, Access Tokens
|
|
# Create a personal token with 'api' scope, copy the value.
|
|
# Go to CI/CD, Schedules, schedule a new monthly job (or edit the existing one)
|
|
# Define a variable of type File named AUTHFILE. Content is that token
|
|
# value.
|
|
- ci-fairy -v --authfile $AUTHFILE delete-image
|
|
--repository $FDO_DISTRIBUTION_NAME/$FDO_DISTRIBUTION_VERSION
|
|
--exclude-tag $FDO_DISTRIBUTION_TAG
|
|
dependencies: []
|
|
allow_failure: true
|
|
only:
|
|
- schedules
|
|
|
|
{% for distro in distributions %}
|
|
{% for version in distro.versions %}
|
|
### {{ distro.name }} {{ version }}
|
|
{{ distro.name }}:{{ version }}@container-clean:
|
|
extends:
|
|
- .{{ distro.name }}:{{ version }}
|
|
- .container-clean
|
|
needs: ["{{distro.name}}:{{version}}@container-prep"]
|
|
|
|
{% endfor %}
|
|
{% endfor %}
|
|
|
|
#################################################################
|
|
# #
|
|
# 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"
|
|
|
|
{% for distro in distributions %}
|
|
{% for version in distro.versions %}
|
|
|
|
{{ distro.name }}:{{ version }}@autotools-build:
|
|
extends:
|
|
- .{{ distro.name }}:{{ version }}
|
|
- .autotools-build@template
|
|
stage: autotools
|
|
{# Where we have extra_variables defined, add them to the list #}
|
|
{% if distro.build is defined and distro.build.extra_variables is defined %}
|
|
variables:
|
|
{% for key, value in distro.build.extra_variables.items() %}
|
|
{{ key }}: {{ value }}
|
|
{% endfor %}
|
|
{% endif %}
|
|
needs: ['{{ distro.name }}:{{ version }}@container-prep']
|
|
|
|
{% if not distro.build is defined or distro.build.meson|default(True) %}
|
|
{{ distro.name }}:{{ version }}@meson-build:
|
|
extends:
|
|
- .{{ distro.name }}:{{ version }}
|
|
- .meson-build@template
|
|
stage: meson
|
|
{# Where we have extra_variables defined, add them to the list #}
|
|
{% if distro.build is defined and distro.build.extra_variables is defined %}
|
|
variables:
|
|
{% for key, value in distro.build.extra_variables.items() %}
|
|
{{ key }}: {{ value }}
|
|
{% endfor %}
|
|
{% endif %}
|
|
needs: ['{{ distro.name }}:{{ version }}@container-prep']
|
|
{% endif %}
|
|
|
|
{% endfor %}
|
|
{% endfor %}
|
|
|
|
# Build argument tests
|
|
#
|
|
# We only run the build option combinations on one image
|
|
# because they're supposed to fail equally on all
|
|
{% set custom_build_distro = distributions|selectattr("name", "equalto", "fedora")|first() %}
|
|
.fedora-custom-build@autotools-template:
|
|
extends:
|
|
- .{{custom_build_distro.name}}:{{custom_build_distro.versions|first()}}
|
|
- .autotools-build@template
|
|
stage: build
|
|
needs: ['{{custom_build_distro.name}}:{{custom_build_distro.versions|first()}}@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:
|
|
- .{{custom_build_distro.name}}:{{custom_build_distro.versions|first()}}
|
|
- .meson-build@template
|
|
stage: build
|
|
needs: ['{{custom_build_distro.name}}:{{custom_build_distro.versions|first()}}@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
|
|
|
|
# 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: ''
|
|
|
|
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'
|
|
|
|
static-build:meson:
|
|
extends: .fedora-custom-build@meson-template
|
|
script:
|
|
- meson "$MESON_BUILDDIR" --default-library=static --prefix=$PWD/prefix-meson/
|
|
- ninja -C "$MESON_BUILDDIR" install
|
|
- ls -l $PWD/prefix-meson/lib64/libevdev.a
|
|
|
|
soname:
|
|
extends:
|
|
- .{{custom_build_distro.name}}:{{custom_build_distro.versions|first()}}
|
|
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: ['{{custom_build_distro.name}}:{{custom_build_distro.versions|first()}}@container-prep']
|
|
|
|
#################################################################
|
|
# #
|
|
# VM stage #
|
|
# #
|
|
#################################################################
|
|
|
|
.check_tainted: &check_tainted |
|
|
# make sure the kernel is not tainted
|
|
if [[ "$(/app/vmctl exec cat /proc/sys/kernel/tainted)" -gt 0 ]];
|
|
then
|
|
echo tainted kernel ;
|
|
exit 1 ;
|
|
fi
|
|
|
|
{% for distro in distributions if distro.want_qemu %}
|
|
{% set version = "{}".format(distro.versions|last()) %}
|
|
.qemu@{{distro.name}}:{{version}}:
|
|
extends:
|
|
- .{{distro.name}}:{{version}}
|
|
stage: VM
|
|
image: $CI_REGISTRY_IMAGE/$FDO_DISTRIBUTION_NAME/$FDO_DISTRIBUTION_VERSION:qemu-$FDO_DISTRIBUTION_TAG
|
|
tags:
|
|
- kvm
|
|
variables:
|
|
MESON_BUILDDIR: build_dir
|
|
script:
|
|
# start our vm, no args required
|
|
- /app/vmctl start
|
|
|
|
- *check_tainted
|
|
|
|
- "scp -r $PWD vm:"
|
|
- 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 sshenv vm:~/$CI_PROJECT_NAME/.meson_environment"
|
|
- /app/vmctl exec "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 -r vm:$CI_PROJECT_NAME/"$MESON_BUILDDIR" .
|
|
|
|
- *check_tainted
|
|
|
|
- /app/vmctl stop
|
|
|
|
- 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
|
|
needs: ['{{distro.name}}:{{version}}@qemu-prep']
|
|
|
|
qemu:meson:
|
|
extends: .qemu@{{distro.name}}:{{version}}
|
|
|
|
qemu:meson:valgrind:
|
|
extends: .qemu@{{distro.name}}:{{version}}
|
|
variables:
|
|
MESON_TEST_ARGS: '--setup=valgrind'
|
|
{% endfor %}
|
|
|
|
{% for distro in distributions if distro.use_for_tarball_tests %}
|
|
{% set version = "{}".format(distro.versions|last()) %}
|
|
meson-from-tarball:
|
|
extends:
|
|
- .{{distro.name}}:{{version}}
|
|
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: ['{{distro.name}}:{{version}}@container-prep']
|
|
|
|
autotools-from-tarball:
|
|
extends:
|
|
- .{{distro.name}}:{{version}}
|
|
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: ['{{distro.name}}:{{version}}@container-prep']
|
|
{% endfor %}
|