gitlab CI: expire the results.xml artifacts
[platform/upstream/libevdev.git] / .gitlab-ci.yml
index 78a0799..fa8457f 100644 (file)
@@ -1,33 +1,36 @@
-# vim: set expandtab shiftwidth=2 tabstop=8 textwidth=0:
-#
-# THIS FILE IS GENERATED, DO NOT EDIT
+########################################
+#                                      #
+# 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 8410d3382c4ba5e83da76a027cb332169f2a95ad # 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'
-  # Fedora container builder template
-  - project: 'wayland/ci-templates'
-    ref: *template_sha
-    file: '/templates/fedora.yml'
-  # Ubuntu container builder template
+  # Centos container builder template
   - project: 'wayland/ci-templates'
     ref: *template_sha
-    file: '/templates/ubuntu.yml'
+    file: '/templates/centos.yml'
   # Debian container builder template
   - project: 'wayland/ci-templates'
     ref: *template_sha
     file: '/templates/debian.yml'
-  # CentOS container builder template
+  # Fedora container builder template
   - project: 'wayland/ci-templates'
     ref: *template_sha
-    file: '/templates/centos.yml'
+    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
@@ -46,7 +49,7 @@ variables:
   # Run dnf install/apt-get install/.. with the list of packages for your       #
   # distribution                                                                #
   ###############################################################################
-  FEDORA_RPMS: 'git gcc gcc-c++ meson automake autoconf libtool make pkgconfig  python3 check-devel valgrind binutils doxygen xz'
+  FEDORA_RPMS: 'git gcc gcc-c++ meson automake autoconf libtool make pkgconfig  python3 check-devel valgrind binutils doxygen xz clang-analyzer'
   CENTOS_RPMS: 'git gcc gcc-c++       automake autoconf libtool make pkgconfig  python3 check-devel valgrind binutils xz'
   UBUNTU_DEBS: 'git gcc g++     meson automake autoconf libtool make pkg-config python3 check       valgrind binutils doxygen xz-utils'
   DEBIAN_DEBS: $UBUNTU_DEBS
@@ -57,12 +60,13 @@ variables:
   # changing these will force rebuilding the associated image
   # Note: these tags have no meaning and are not tied to a particular
   # libevdev version
-  FEDORA_TAG: '2020-02-17.1'
-  CENTOS_TAG: '2020-02-17.1'
-  DEBIAN_TAG: '2020-02-17.1'
-  UBUNTU_TAG: '2020-02-17.1'
-  ARCH_TAG:   '2020-02-17.1'
-  ALPINE_TAG: '2020-02-17.1'
+  FEDORA_TAG: '2020-02-26.4'
+  CENTOS_TAG: '2020-02-26.4'
+  DEBIAN_TAG: '2020-02-26.4'
+  UBUNTU_TAG: '2020-02-26.4'
+  ARCH_TAG:   '2020-02-26.4'
+  ALPINE_TAG: '2020-02-26.4'
+  QEMU_TAG:   'qemu-2020-02-26.4'
 
   UPSTREAM_REPO: libevdev/libevdev
   BUILDAH_IMAGE: $CI_REGISTRY/wayland/ci-templates/buildah:latest
@@ -70,21 +74,23 @@ variables:
   CENTOS_CONTAINER_IMAGE: $CI_REGISTRY_IMAGE/centos/$CENTOS_VERSION:$CENTOS_TAG
   UBUNTU_CONTAINER_IMAGE: $CI_REGISTRY_IMAGE/ubuntu/$UBUNTU_VERSION:$UBUNTU_TAG
   DEBIAN_CONTAINER_IMAGE: $CI_REGISTRY_IMAGE/debian/$DEBIAN_VERSION:$DEBIAN_TAG
-  ARCH_CONTAINER_IMAGE:   $CI_REGISTRY_IMAGE/archlinux/rolling:$ARCH_TAG
+  ARCH_CONTAINER_IMAGE:   $CI_REGISTRY_IMAGE/arch/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
+  MESON_BUILDDIR: 'build dir'
 
 .default_artifacts:
   artifacts:
     paths:
       - _build/test/test-suite.log
-      - builddir/meson-logs/testlog*.txt
+      - $MESON_BUILDDIR/meson-logs/
     expire_in: 1 week
     when: on_failure
     reports:
-      junit: junit-*.xml
+      junit: $MESON_BUILDDIR/junit-*.xml
 
 .autotools_build:
   extends:
@@ -102,11 +108,7 @@ variables:
   extends:
     - .default_artifacts
   script:
-    - meson builddir $MESON_ARGS
-    - ninja -C builddir $NINJA_ARGS
-    - if ! [[ -z '$MESON_TEST_ARGS' ]]; then
-        meson test -C builddir $MESON_TEST_ARGS;
-      fi
+    - .gitlab-ci/meson-build.sh
 
 #################################################################
 #                                                               #
@@ -123,7 +125,7 @@ check-ci-script:
   stage: prep
   before_script:
     - apk add python3 git
-    - pip3 install --user jinja2
+    - pip3 install --user jinja2 PyYAML
   script:
     - python3 ./.gitlab-ci/generate-gitlab-ci.py
     - git diff --exit-code && exit 0 || true
@@ -148,6 +150,10 @@ check-commit:
   variables:
     GIT_DEPTH: 100
   artifacts:
+    expire_in: 1 week
+    when: on_failure
+    paths:
+      - results.xml
     reports:
       junit: results.xml
 
@@ -157,7 +163,7 @@ check-commit:
     - podman login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY
 
     # get the full container image name (DISTRIB_VERSION still has indirections)
-    - IMAGE=$(eval echo "$DISTRIB_FLAVOR/$DISTRIB_VERSION:$TAG")
+    - IMAGE=$(eval echo "$DISTRIB_NAME/$DISTRIB_VERSION:$TAG")
 
     - |
       # force rebuild if schedule, reuse otherwise
@@ -171,6 +177,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_NAME: fedora
+    DISTRIB_VERSION: $FEDORA_VERSION
+    TAG: $QEMU_TAG
+  allow_failure: true
+
 
 ### fedora 30
 fedora:30@container-prep:
@@ -181,7 +203,7 @@ fedora:30@container-prep:
   variables:
     GIT_STRATEGY: none
     FEDORA_VERSION: '30'
-    DISTRIB_FLAVOR: fedora
+    DISTRIB_NAME: fedora
     DISTRIB_VERSION: $FEDORA_VERSION
     TAG: $FEDORA_TAG
 
@@ -195,7 +217,7 @@ fedora:31@container-prep:
   variables:
     GIT_STRATEGY: none
     FEDORA_VERSION: '31'
-    DISTRIB_FLAVOR: fedora
+    DISTRIB_NAME: fedora
     DISTRIB_VERSION: $FEDORA_VERSION
     TAG: $FEDORA_TAG
 
@@ -209,7 +231,7 @@ ubuntu:19.10@container-prep:
   variables:
     GIT_STRATEGY: none
     UBUNTU_VERSION: '19.10'
-    DISTRIB_FLAVOR: ubuntu
+    DISTRIB_NAME: ubuntu
     DISTRIB_VERSION: $UBUNTU_VERSION
     TAG: $UBUNTU_TAG
 
@@ -223,7 +245,7 @@ ubuntu:19.04@container-prep:
   variables:
     GIT_STRATEGY: none
     UBUNTU_VERSION: '19.04'
-    DISTRIB_FLAVOR: ubuntu
+    DISTRIB_NAME: ubuntu
     DISTRIB_VERSION: $UBUNTU_VERSION
     TAG: $UBUNTU_TAG
 
@@ -237,7 +259,7 @@ debian:stable@container-prep:
   variables:
     GIT_STRATEGY: none
     DEBIAN_VERSION: 'stable'
-    DISTRIB_FLAVOR: debian
+    DISTRIB_NAME: debian
     DISTRIB_VERSION: $DEBIAN_VERSION
     TAG: $DEBIAN_TAG
 
@@ -251,7 +273,7 @@ debian:sid@container-prep:
   variables:
     GIT_STRATEGY: none
     DEBIAN_VERSION: 'sid'
-    DISTRIB_FLAVOR: debian
+    DISTRIB_NAME: debian
     DISTRIB_VERSION: $DEBIAN_VERSION
     TAG: $DEBIAN_TAG
 
@@ -265,7 +287,7 @@ centos:7@container-prep:
   variables:
     GIT_STRATEGY: none
     CENTOS_VERSION: '7'
-    DISTRIB_FLAVOR: centos
+    DISTRIB_NAME: centos
     DISTRIB_VERSION: $CENTOS_VERSION
     TAG: $CENTOS_TAG
 
@@ -279,7 +301,7 @@ centos:8@container-prep:
   variables:
     GIT_STRATEGY: none
     CENTOS_VERSION: '8'
-    DISTRIB_FLAVOR: centos
+    DISTRIB_NAME: centos
     DISTRIB_VERSION: $CENTOS_VERSION
     TAG: $CENTOS_TAG
 
@@ -293,7 +315,7 @@ arch:rolling@container-prep:
   variables:
     GIT_STRATEGY: none
     ARCH_VERSION: 'rolling'
-    DISTRIB_FLAVOR: archlinux
+    DISTRIB_NAME: arch
     DISTRIB_VERSION: $ARCH_VERSION
     TAG: $ARCH_TAG
 
@@ -307,7 +329,7 @@ alpine:latest@container-prep:
   variables:
     GIT_STRATEGY: none
     ALPINE_VERSION: 'latest'
-    DISTRIB_FLAVOR: alpine
+    DISTRIB_NAME: alpine
     DISTRIB_VERSION: $ALPINE_VERSION
     TAG: $ALPINE_TAG
 
@@ -391,13 +413,14 @@ alpine:latest@container-prep:
   allow_failure: true
   only:
     - schedules
+  variables:
+    GIT_STRATEGY: none
 
 
 ### fedora 30
 fedora:30@container-clean:
   extends: .container-clean
   variables:
-    GIT_STRATEGY: none
     FEDORA_VERSION: '30'
     CURRENT_CONTAINER_IMAGE: $FEDORA_CONTAINER_IMAGE
 
@@ -406,7 +429,6 @@ fedora:30@container-clean:
 fedora:31@container-clean:
   extends: .container-clean
   variables:
-    GIT_STRATEGY: none
     FEDORA_VERSION: '31'
     CURRENT_CONTAINER_IMAGE: $FEDORA_CONTAINER_IMAGE
 
@@ -415,7 +437,6 @@ fedora:31@container-clean:
 ubuntu:19.10@container-clean:
   extends: .container-clean
   variables:
-    GIT_STRATEGY: none
     UBUNTU_VERSION: '19.10'
     CURRENT_CONTAINER_IMAGE: $UBUNTU_CONTAINER_IMAGE
 
@@ -424,7 +445,6 @@ ubuntu:19.10@container-clean:
 ubuntu:19.04@container-clean:
   extends: .container-clean
   variables:
-    GIT_STRATEGY: none
     UBUNTU_VERSION: '19.04'
     CURRENT_CONTAINER_IMAGE: $UBUNTU_CONTAINER_IMAGE
 
@@ -433,7 +453,6 @@ ubuntu:19.04@container-clean:
 debian:stable@container-clean:
   extends: .container-clean
   variables:
-    GIT_STRATEGY: none
     DEBIAN_VERSION: 'stable'
     CURRENT_CONTAINER_IMAGE: $DEBIAN_CONTAINER_IMAGE
 
@@ -442,7 +461,6 @@ debian:stable@container-clean:
 debian:sid@container-clean:
   extends: .container-clean
   variables:
-    GIT_STRATEGY: none
     DEBIAN_VERSION: 'sid'
     CURRENT_CONTAINER_IMAGE: $DEBIAN_CONTAINER_IMAGE
 
@@ -451,7 +469,6 @@ debian:sid@container-clean:
 centos:7@container-clean:
   extends: .container-clean
   variables:
-    GIT_STRATEGY: none
     CENTOS_VERSION: '7'
     CURRENT_CONTAINER_IMAGE: $CENTOS_CONTAINER_IMAGE
 
@@ -460,7 +477,6 @@ centos:7@container-clean:
 centos:8@container-clean:
   extends: .container-clean
   variables:
-    GIT_STRATEGY: none
     CENTOS_VERSION: '8'
     CURRENT_CONTAINER_IMAGE: $CENTOS_CONTAINER_IMAGE
 
@@ -469,7 +485,6 @@ centos:8@container-clean:
 arch:rolling@container-clean:
   extends: .container-clean
   variables:
-    GIT_STRATEGY: none
     ARCH_VERSION: 'rolling'
     CURRENT_CONTAINER_IMAGE: $ARCH_CONTAINER_IMAGE
 
@@ -478,7 +493,6 @@ arch:rolling@container-clean:
 alpine:latest@container-clean:
   extends: .container-clean
   variables:
-    GIT_STRATEGY: none
     ALPINE_VERSION: 'latest'
     CURRENT_CONTAINER_IMAGE: $ALPINE_CONTAINER_IMAGE
 
@@ -730,6 +744,7 @@ no-check:meson:
     - dnf remove -y check check-devel
   variables:
     MESON_ARGS: -Dtests=disabled
+    SKIP_MESON_TEST: 1
 
 # doxygen is required for dist
 no-doxygen:meson:
@@ -748,15 +763,103 @@ no-doxygen-check-valgrind:meson:
   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'
 
-valgrind:meson:
+scan-build:meson:
   extends: .fedora-custom-build@meson-template
   variables:
+    NINJA_ARGS: 'scan-build'
+    SKIP_MESON_TEST: 1
+
+soname:
+  stage: build
+  image: $FEDORA_CONTAINER_IMAGE
+  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
+  variables:
+    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
+    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:
@@ -773,9 +876,9 @@ meson-from-tarball:
     - mkdir -p _tarball_dir
     - tar xf _build/libevdev-*.tar.xz -C _tarball_dir
     - pushd _tarball_dir/libevdev-*/ > /dev/null
-    - meson builddir --prefix="$INSTALLDIR"
-    - ninja -C builddir test
-    - ninja -C builddir install
+    - meson "$MESON_BUILDDIR" --prefix="$INSTALLDIR"
+    - ninja -C "$MESON_BUILDDIR" test
+    - ninja -C "$MESON_BUILDDIR" install
     - popd > /dev/null
     - ls -lR $INSTALLDIR
   variables:
@@ -787,10 +890,10 @@ autotools-from-tarball:
   image: $FEDORA_CONTAINER_IMAGE
   script:
     - export INSTALLDIR="$PWD/_inst"
-    - meson builddir
-    - ninja -C builddir dist
+    - meson "$MESON_BUILDDIR"
+    - ninja -C "$MESON_BUILDDIR" dist
     - mkdir -p _tarball_dir
-    - tar xf builddir/meson-dist/libevdev-*.xz -C _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