gitlab CI: hook up qemu

This is mostly copied from libinput's qemu setup with a few minor renames.

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
This commit is contained in:
Peter Hutterer 2020-02-18 20:22:12 +10:00
parent f795694b2e
commit ada38025a2
3 changed files with 224 additions and 12 deletions

View file

@ -2,7 +2,7 @@
#
# 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 b7030c2cd0d6ccc5f6d4f8299bafa4daa9240d71 # see https://docs.gitlab.com/ee/ci/yaml/#includefile
include:
# Alpine container builder template
@ -63,6 +63,7 @@ variables:
UBUNTU_TAG: '2020-02-17.1'
ARCH_TAG: '2020-02-17.1'
ALPINE_TAG: '2020-02-17.1'
QEMU_TAG: 'qemu-2020-02-18.0'
UPSTREAM_REPO: libevdev/libevdev
BUILDAH_IMAGE: $CI_REGISTRY/wayland/ci-templates/buildah:latest
@ -72,6 +73,7 @@ variables:
DEBIAN_CONTAINER_IMAGE: $CI_REGISTRY_IMAGE/debian/$DEBIAN_VERSION:$DEBIAN_TAG
ARCH_CONTAINER_IMAGE: $CI_REGISTRY_IMAGE/archlinux/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
@ -172,6 +174,22 @@ check-commit:
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_FLAVOR: fedora
DISTRIB_VERSION: $FEDORA_VERSION
TAG: $QEMU_TAG
allow_failure: true
### fedora 30
fedora:30@container-prep:
@ -755,11 +773,6 @@ enable-gcov:meson:
variables:
MESON_ARGS: '-Dcoverity=true'
valgrind:meson:
extends: .fedora-custom-build@meson-template
variables:
MESON_TEST_ARGS: '--setup=valgrind'
soname:
stage: build
image: $FEDORA_CONTAINER_IMAGE
@ -774,6 +787,77 @@ soname:
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
allow_failure: true
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:
stage: tarballs
image: $FEDORA_CONTAINER_IMAGE

View file

@ -2,7 +2,7 @@
#
# 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 b7030c2cd0d6ccc5f6d4f8299bafa4daa9240d71 # see https://docs.gitlab.com/ee/ci/yaml/#includefile
include:
# Alpine container builder template
@ -63,6 +63,7 @@ variables:
UBUNTU_TAG: '2020-02-17.1'
ARCH_TAG: '2020-02-17.1'
ALPINE_TAG: '2020-02-17.1'
QEMU_TAG: 'qemu-2020-02-18.0'
UPSTREAM_REPO: libevdev/libevdev
BUILDAH_IMAGE: $CI_REGISTRY/wayland/ci-templates/buildah:latest
@ -72,6 +73,7 @@ variables:
DEBIAN_CONTAINER_IMAGE: $CI_REGISTRY_IMAGE/debian/$DEBIAN_VERSION:$DEBIAN_TAG
ARCH_CONTAINER_IMAGE: $CI_REGISTRY_IMAGE/archlinux/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
@ -172,6 +174,22 @@ check-commit:
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_FLAVOR: fedora
DISTRIB_VERSION: $FEDORA_VERSION
TAG: $QEMU_TAG
allow_failure: true
{% for distro in distributions %}
### {{ distro.name }} {{ distro.version }}
@ -427,11 +445,6 @@ enable-gcov:meson:
variables:
MESON_ARGS: '-Dcoverity=true'
valgrind:meson:
extends: .fedora-custom-build@meson-template
variables:
MESON_TEST_ARGS: '--setup=valgrind'
soname:
stage: build
image: $FEDORA_CONTAINER_IMAGE
@ -446,6 +459,77 @@ soname:
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
allow_failure: true
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:
stage: tarballs
image: $FEDORA_CONTAINER_IMAGE

44
.gitlab-ci/meson-build.sh Executable file
View file

@ -0,0 +1,44 @@
#!/bin/bash
if [[ -f .meson_environment ]]; then
. .meson_environment
fi
if [[ -z "$MESON_BUILDDIR" ]]; then
echo "\$MESON_BUILDDIR undefined."
exit 1
fi
# emulate a few gitlab variables to make it easier to
# run and debug locally.
if [[ -z "$CI_JOB_ID" ]] || [[ -z "$CI_JOB_NAME" ]]; then
echo "Missing \$CI_JOB_ID or \$CI_JOB_NAME".
CI_JOB_ID=$(date +%s)
CI_JOB_NAME='libevdev-job-local'
echo "Simulating gitlab environment: "
echo " CI_JOB_ID=$CI_JOB_ID"
echo " CI_JOB_NAME=$CI_JOB_NAME"
fi
echo "*************************************************"
echo "builddir: $MESON_BUILDDIR"
echo "meson args: $MESON_ARGS"
echo "ninja args: $NINJA_ARGS"
echo "meson test args: $MESON_TEST_ARGS"
echo "*************************************************"
set -e
rm -rf "$MESON_BUILDDIR"
meson "$MESON_BUILDDIR" $MESON_ARGS
meson configure "$MESON_BUILDDIR"
ninja -C "$MESON_BUILDDIR" $NINJA_ARGS
# we still want to generate the reports, even if meson test fails
set +e
meson test -C "$MESON_BUILDDIR" $MESON_TEST_ARGS --print-errorlogs
exit_code=$?
set -e
exit $exit_code