From: Peter Hutterer Date: Tue, 18 Feb 2020 10:22:12 +0000 (+1000) Subject: gitlab CI: hook up qemu X-Git-Tag: libevdev-1.8.901~21 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=ada38025a2cb2294ef542bce3968af3021919a0e;p=platform%2Fupstream%2Flibevdev.git gitlab CI: hook up qemu This is mostly copied from libinput's qemu setup with a few minor renames. Signed-off-by: Peter Hutterer --- diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 9857570..81d072b 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -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 diff --git a/.gitlab-ci/gitlab-ci.tmpl b/.gitlab-ci/gitlab-ci.tmpl index 903126f..c54eb06 100644 --- a/.gitlab-ci/gitlab-ci.tmpl +++ b/.gitlab-ci/gitlab-ci.tmpl @@ -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 diff --git a/.gitlab-ci/meson-build.sh b/.gitlab-ci/meson-build.sh new file mode 100755 index 0000000..8fcbe3a --- /dev/null +++ b/.gitlab-ci/meson-build.sh @@ -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