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 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
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
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
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:
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
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
#
# 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
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
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
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 }}
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
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
--- /dev/null
+#!/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