[libvirt] [PATCH] CI: also run tests using updated distro(s)

Martin Kletzander mkletzan at redhat.com
Mon May 29 11:54:55 UTC 2017


On Sun, May 28, 2017 at 11:07:41PM -0300, claudioandre.br at gmail.com wrote:
>From: Claudio André <claudioandre.br at gmail.com>
>
>It is possible to test libvirt using other distros in Travis via Docker; including (but not limited to) Fedora and Ubuntu.
>---
>Notes:
>* see it working at: https://travis-ci.org/claudioandre/libvirt/builds/237015534
>* now, I introduced an error: https://travis-ci.org/claudioandre/libvirt/builds/237018298
>* I'm using Ubuntu 17.04 because I need to pick something. Could be Xenial and/or Fedora and/or ...;
>
>* One test is failing in Ubuntu 17.04 in Travis. The error log says:
>  -----
>    TEST: virkmodtest
>          Failed to get config
>    !...                                     4   FAIL
>    FAIL virkmodtest (exit status: 1)
>  -----
>* Since it is failing, I used the 'allow_failures'.
>

'modprobe -c' fails for some reason.  Is the user inside the container
root?  I don't think so.  Some more info output could be nice, like
'uname -a', 'id', and so on, so that we can gather as much info about
the system as possible.  At least for people who don't want to pull the
docker image just to try it out.

> .travis.yml        | 19 +++++++++-------
> tests/travis-ci.sh | 64 ++++++++++++++++++++++++++++++++++++++++++++++++++++++

One disadvantage for using the script is that it couples al output
together.  I know it's needed for running that inside the container, but
the installation and configuration parts take lot of output that I had
to scroll through.  Could _that_ be separated at least?

The less there needs to be in the script the better as with this you
cannot see the configuration from the Web UI, which is sometimes pretty
convenient.

> 2 files changed, 75 insertions(+), 8 deletions(-)
> create mode 100755 tests/travis-ci.sh
>
>diff --git a/.travis.yml b/.travis.yml
>index 5a3e765..7b73761 100644
>--- a/.travis.yml
>+++ b/.travis.yml
>@@ -62,11 +62,8 @@ git:
> before_install:
>   - if [ "$TRAVIS_OS_NAME" == "osx" ]; then brew update && brew install gnutls libgcrypt yajl gettext rpcgen ; fi
>
>-# the custom PATH is just to pick up OS-X homebrew & its harmless on Linux
>-before_script:
>-  - PATH="/usr/local/opt/gettext/bin:/usr/local/opt/rpcgen/bin:$PATH" ./autogen.sh
> script:
>-  - VIR_TEST_DEBUG=1 make -j3 && make -j3 syntax-check && make -j3 check
>+  - tests/travis-ci.sh
>

Maybe doing the setup part inside the before_script, so that it is not
taken as a part of the output.  I'm not that familiar with Travis, though.

Also in your config (not here), you have some differences, for example
compiler: ["gcc"] even though it doesn't take arrays.  It doesn't
matter, I know, it just confused me a bit :D

> # Environments here are run in addition to the main environment defined above
> matrix:
>@@ -79,10 +76,16 @@ matrix:
>       dist: trusty
>     - compiler: clang
>       os: osx
>-      script:
>-        # many unit tests fail & so does syntax-check, so skip for now
>-        # one day we must fix it though....
>-        - make -j3
>+    - services: docker
>+      env: IMAGE=ubuntu:17.04 CCO=gcc
>+      dist: trusty
>+    - services: docker
>+      env: IMAGE=ubuntu:17.04 CCO=clang
>+      dist: trusty
>+
>+  allow_failures:
>+    - env: IMAGE=ubuntu:17.04 CCO=gcc
>+    - env: IMAGE=ubuntu:17.04 CCO=clang
>
> after_failure:
>   - echo '============================================================================'
>diff --git a/tests/travis-ci.sh b/tests/travis-ci.sh
>new file mode 100755
>index 0000000..d115564
>--- /dev/null
>+++ b/tests/travis-ci.sh
>@@ -0,0 +1,64 @@
>+#!/bin/bash -e
>+
>+function do_Install_Dependencies(){
>+    echo
>+    echo '-- Installing Dependencies --'
>+
>+    apt-get update -qq
>+    apt-get -y -qq install \

Somehow the -qq didn't work, or you didn't have it in the script in the
build you sent the link to.  That's ione of the things hidden fromt he
Web UI.

>+            build-essential git clang autoconf libtool libcmpicppimpl0 gettext \
>+            xsltproc autopoint libxml2-dev libncurses5-dev libreadline-dev \
>+            zlib1g-dev libgnutls28-dev libgcrypt11-dev libavahi-client-dev libsasl2-dev \
>+            libxen-dev lvm2 libgcrypt11-dev libparted0-dev libdevmapper-dev uuid-dev \
>+            libudev-dev libpciaccess-dev libcap-ng-dev libnl-3-dev libnl-route-3-dev \
>+            libyajl-dev libpcap0.8-dev libnuma-dev libnetcf-dev libaudit-dev \
>+            libxml2-utils libapparmor-dev dnsmasq-base librbd-dev w3c-markup-validator

If there is no way how to make output of this command collapsed in the
travis output, I suggest (although others might disagree), to create a
wrapper that does something like the following:

COUNTER=0

silent_if_passes() {
    tmp_name="/tmp/$$_$COUNTER_$RANDOM"
    COUNTER=$((COUNTER+1))
    "$@" >$tmp_name.1.txt 2>$tmp_name.2.txt;
    if [[ "$?" -ne "0" ]]; then
        echo "Command $* failed" >&2
        echo "  stdout:" >&2
        cat $tmp_name.1.txt >&2
        cat $tmp_name.2.txt >&2
    fi
}

And then call not really important setup commands with the
silent_if_passes prefix.  That's just a suggestion, though.  Also it
might not work at all, I just typed it in the mail without actually
trying it out.

You can also print the output of all commands at the end in case the
build fails, but that might be too much data.

>+}
>+
>+
>+function do_Show_Info(){
>+    echo
>+    echo '-- Environment --'
>+    echo "Running on Docker: $DISTRO"
>+}
>+
>+
>+function do_Show_Compiler(){
>+
>+    if [[ -n $CC ]]; then
>+        echo
>+        echo '-- Compiler in use --'
>+        "$CC" --version
>+    fi
>+}
>+
>+
>+# ----------- Build and Test libvirt -----------
>+
>+if [[ -n $IMAGE ]]; then
>+    # Run docker using the selected image; then build and test
>+    docker run -v "$(pwd)":/cwd -e CC=$CCO -e DISTRO=$IMAGE "$IMAGE" sh -e -c " \
>+        cd /cwd; \
>+        tests/travis-ci.sh"
>+    exit $?
>+fi
>+
>+if [[ -n $DISTRO ]]; then
>+    do_Show_Info
>+    do_Install_Dependencies
>+    do_Show_Compiler
>+fi
>+
>+# The custom PATH is just to pick up OS-X homebrew & its harmless on Linux
>+PATH="/usr/local/opt/gettext/bin:/usr/local/opt/rpcgen/bin:$PATH" ./autogen.sh
>+
>+# Build and test
>+if [[ "$TRAVIS_OS_NAME" = "osx" ]]; then
>+    # many unit tests fail & so does syntax-check, so skip for now
>+    # one day we must fix it though....
>+    make -j3
>+else
>+    VIR_TEST_DEBUG=1 make -j3 && make -j3 syntax-check && make -j3 check
>+fi
>+
>+exit $?
>--
>2.11.0
>
>--
>libvir-list mailing list
>libvir-list at redhat.com
>https://www.redhat.com/mailman/listinfo/libvir-list
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 833 bytes
Desc: Digital signature
URL: <http://listman.redhat.com/archives/libvir-list/attachments/20170529/52af510a/attachment-0001.sig>


More information about the libvir-list mailing list