summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJulian Andres Klode <jak@debian.org>2017-06-30 15:40:40 +0200
committerJulian Andres Klode <jak@debian.org>2017-06-30 16:02:17 +0200
commit46c31341ef4b09bb3509ebbc49416e34b68e1be4 (patch)
treeed81b16f117ce08e11441d4e0575b53210b5de7e
parent535c06a759dc13c8e2858735973cac24ceaa36fa (diff)
travis: Switch to Docker
This runs parallel builds on docker, based on debian:testing docker images, with ccache enabled and parallel running of the test suite (ccache supports coverage builds these days, and parallel testing just needs unbuffer to handle the stty stuff) This is a huge step up from building on a mix of trusty, wily, and xenial. Most importantly, coverage now correctly detects partial covered lines instead of just reporting almost all of them as fully covered. We use ftp.de.debian.org as deb.debian.org backed by Amazon 503s too often. Gbp-Dch: ignore
-rw-r--r--.travis.yml39
-rw-r--r--Dockerfile10
2 files changed, 23 insertions, 26 deletions
diff --git a/.travis.yml b/.travis.yml
index 8aa8dceb6..b3c4fb806 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -1,34 +1,21 @@
language: cpp
cache: ccache
sudo: required
-dist: trusty
+services:
+ - docker
env:
- - TEST_SUITE=user CMAKE_FLAGS=
- - TEST_SUITE=user CMAKE_FLAGS="-DWITH_DOC=OFF -DWITH_CURL=OFF"
- - TEST_SUITE=root CMAKE_FLAGS=-DWITH_DOC=OFF
-before_install:
- - sudo add-apt-repository 'deb http://archive.ubuntu.com/ubuntu/ wily main universe' -y
- - sudo add-apt-repository 'deb http://archive.ubuntu.com/ubuntu/ xenial main' -y
- - |
- sudo sh -c '/bin/echo -e "Package: *\nPin: release n=wily\nPin-Priority: 1" > /etc/apt/preferences.d/wily'
- sudo sh -c '/bin/echo -e "Package: *\nPin: release n=xenial\nPin-Priority: 1" > /etc/apt/preferences.d/xenial'
- - sudo apt-get update -qq
+ - USER=travis CMAKE_FLAGS=
+ - USER=travis CMAKE_FLAGS="-DWITH_DOC=OFF -DWITH_CURL=OFF"
+ - USER=root CMAKE_FLAGS=-DWITH_DOC=OFF
install:
- - sudo apt-get -qq -y -t wily install gettext liblz4-dev python3-apt
- - sudo apt-get -qq -y -t xenial install cmake ninja-build libgnutls28-dev libcurl4-gnutls-dev
- - sudo ./prepare-release travis-ci
+ - sed -i -e "s#1000#$(id -u)#g" Dockerfile
+ - docker build --tag=apt-ci .
before_script:
- - ( mkdir build && cd build && cmake -DCMAKE_BUILD_TYPE=Coverage -G Ninja $CMAKE_FLAGS .. )
- - ninja -C build
+ - docker run --rm -w $PWD -v $HOME/.ccache:$HOME/.ccache -v $PWD:$PWD --user=travis apt-ci sh -e -c "mkdir build && cd build && env PATH=/usr/lib/ccache:\$PATH cmake -DCMAKE_BUILD_TYPE=Coverage -G Ninja $CMAKE_FLAGS .."
+ - docker run --rm -w $PWD -v $HOME/.ccache:$HOME/.ccache -v $PWD:$PWD --user=travis apt-ci ninja -C build
script:
- - CTEST_OUTPUT_ON_FAILURE=1 ninja -C build test
- - DESTDIR=$PWD/rootdir chronic ninja -C build install
- - test "$TEST_SUITE" != "user" || ./test/integration/run-tests -qq
- - sudo adduser --force-badname --system --home /nonexistent --no-create-home --quiet _apt || true
- - sudo chmod go+x /home/travis
- - sudo chmod -R go+rwX /home/travis/build
- - test "$TEST_SUITE" != "root" || sudo ./test/integration/run-tests -qq
+ - docker run --rm -w $PWD -v $PWD:$PWD --user=travis apt-ci env CTEST_OUTPUT_ON_FAILURE=1 ninja -C build test
+ - docker run --rm -w $PWD -v $PWD:$PWD --user=travis apt-ci env DESTDIR=$PWD/rootdir chronic ninja -C build install
+ - docker run --rm -w $PWD -v $PWD:$PWD --user=$USER apt-ci unbuffer ./test/integration/run-tests -qq -j 4
after_script:
- - cd build
- - gcov -r $(find -name '*.gcno')
- - bash <(curl -s https://codecov.io/bash)
+ - docker run --rm -w $PWD/build -v $PWD:$PWD --user=$USER `bash <(curl -s https://codecov.io/env)` apt-ci bash -c 'bash <(curl -s https://codecov.io/bash)'
diff --git a/Dockerfile b/Dockerfile
new file mode 100644
index 000000000..be7c36e49
--- /dev/null
+++ b/Dockerfile
@@ -0,0 +1,10 @@
+FROM debian:testing
+COPY . /tmp
+WORKDIR /tmp
+RUN sed -i s#deb.debian.org#ftp.de.debian.org# /etc/apt/sources.list \
+ && apt-get update \
+ && adduser --home /home/travis travis --quiet --disabled-login --gecos "" --uid 1000 \
+ && env DEBIAN_FRONTEND=noninteractive apt-get install build-essential ccache ninja-build expect curl git -q -y \
+ && env DEBIAN_FRONTEND=noninteractive ./prepare-release travis-ci \
+ && dpkg-reconfigure ccache \
+ && rm -r /tmp/*