2017-07-02 23:28:52 +02:00
|
|
|
language: c
|
2017-07-11 22:12:15 +02:00
|
|
|
|
2018-08-09 07:40:27 +02:00
|
|
|
cache:
|
|
|
|
ccache: true
|
2018-08-09 07:41:57 +02:00
|
|
|
## cargo: true
|
|
|
|
directories:
|
|
|
|
- $HOME/.cargo
|
2019-04-01 06:05:14 +02:00
|
|
|
## caching CARGO_TARGET_DIR actually slows down the build over time,
|
|
|
|
## because old build products are never deleted.
|
2018-08-09 07:41:57 +02:00
|
|
|
## where we point CARGO_TARGET_DIR in all our cargo invocations
|
2019-04-01 06:05:14 +02:00
|
|
|
#- $TRAVIS_BUILD_DIR/src/rust/target
|
2018-08-09 07:40:27 +02:00
|
|
|
|
2018-08-09 08:42:05 +02:00
|
|
|
compiler:
|
|
|
|
- gcc
|
2017-07-11 22:12:15 +02:00
|
|
|
|
|
|
|
os:
|
|
|
|
- linux
|
|
|
|
|
2019-09-26 09:25:17 +02:00
|
|
|
## We don't use the build matrix cross-product, because it makes too many jobs
|
|
|
|
## Instead, we list each job under matrix: include:
|
2017-07-11 22:12:15 +02:00
|
|
|
env:
|
|
|
|
global:
|
|
|
|
## The Travis CI environment allows us two cores, so let's use both.
|
|
|
|
- MAKEFLAGS="-j 2"
|
2018-08-09 08:42:05 +02:00
|
|
|
## We turn on hardening by default
|
|
|
|
## Also known as --enable-fragile-hardening in 0.3.0.3-alpha and later
|
|
|
|
- HARDENING_OPTIONS="--enable-expensive-hardening"
|
2018-08-09 10:29:29 +02:00
|
|
|
## We turn off asciidoc by default, because it's slow
|
|
|
|
- ASCIIDOC_OPTIONS="--disable-asciidoc"
|
2018-08-09 08:42:05 +02:00
|
|
|
matrix:
|
2019-09-26 09:25:17 +02:00
|
|
|
## This matrix entry is required, but it doesn't actually create any jobs
|
2018-08-09 08:42:05 +02:00
|
|
|
-
|
2017-07-11 22:12:15 +02:00
|
|
|
|
|
|
|
matrix:
|
2019-09-26 09:25:17 +02:00
|
|
|
## include creates builds with gcc, linux, unless we override those defaults
|
2018-08-09 08:42:05 +02:00
|
|
|
include:
|
Travis: Add a macOS chutney job, but don't wait for it to finish
Since Travis macOS has IPv6 support (and Travis Linux does not), chutney
will now run its IPv6 networks as part of Travis CI.
But since chutney is slow, don't wait for the macOS chutney to finish.
(Travis have fixed the duplicate notification bug in fast_finish. So we
can use fast_finish and allow_failure to finish early. Unfortunately,
allow_failure also means we ignore failures in macOS chutney.)
Also make sure that we have:
* a compile on each platform, with each compiler,
* a check on each platform, and
* a check on each compiler.
Finally, sort builds: allow fail last, macOS first, slowest first.
Closes ticket 30860.
Closes ticket 31859 for 0.2.9.
2019-09-26 09:44:41 +02:00
|
|
|
## We run basic tests on macOS
|
2019-09-26 09:25:17 +02:00
|
|
|
- compiler: clang
|
|
|
|
os: osx
|
2019-10-01 09:32:46 +02:00
|
|
|
## We check NSS
|
|
|
|
## NSS is a fast job, clang is slower on Linux, so we do NSS clang
|
|
|
|
- env: NSS_OPTIONS="--enable-nss"
|
|
|
|
compiler: clang
|
Travis: Add a macOS chutney job, but don't wait for it to finish
Since Travis macOS has IPv6 support (and Travis Linux does not), chutney
will now run its IPv6 networks as part of Travis CI.
But since chutney is slow, don't wait for the macOS chutney to finish.
(Travis have fixed the duplicate notification bug in fast_finish. So we
can use fast_finish and allow_failure to finish early. Unfortunately,
allow_failure also means we ignore failures in macOS chutney.)
Also make sure that we have:
* a compile on each platform, with each compiler,
* a check on each platform, and
* a check on each compiler.
Finally, sort builds: allow fail last, macOS first, slowest first.
Closes ticket 30860.
Closes ticket 31859 for 0.2.9.
2019-09-26 09:44:41 +02:00
|
|
|
## We run chutney on Linux, because it's faster than chutney on macOS
|
|
|
|
- env: CHUTNEY="yes" CHUTNEY_ALLOW_FAILURES="2" SKIP_MAKE_CHECK="yes"
|
|
|
|
## We include a single coverage build with the best options for coverage
|
|
|
|
- env: COVERAGE_OPTIONS="--enable-coverage" HARDENING_OPTIONS=""
|
2019-10-01 09:32:46 +02:00
|
|
|
## We run rust on Linux, because it's faster than rust on macOS
|
|
|
|
## We check rust offline
|
|
|
|
- env: RUST_OPTIONS="--enable-rust" TOR_RUST_DEPENDENCIES=true
|
|
|
|
## We check asciidoc with distcheck, to make sure we remove doc products
|
|
|
|
- env: DISTCHECK="yes" ASCIIDOC_OPTIONS="" SKIP_MAKE_CHECK="yes"
|
2019-10-01 09:28:26 +02:00
|
|
|
## We check disable module dirauth
|
2018-08-23 09:43:03 +02:00
|
|
|
- env: MODULES_OPTIONS="--disable-module-dirauth"
|
2019-10-01 09:28:26 +02:00
|
|
|
## We run rust on macOS, because we have seen macOS rust failures before
|
|
|
|
- env: RUST_OPTIONS="--enable-rust --enable-cargo-online-mode"
|
|
|
|
compiler: clang
|
|
|
|
os: osx
|
2019-10-01 09:32:46 +02:00
|
|
|
## We run chutney on macOS, because macOS Travis has IPv6
|
2019-10-22 11:34:47 +02:00
|
|
|
# Disabled due to slow Travis macOS builds, see #32177
|
|
|
|
#- env: CHUTNEY="yes" CHUTNEY_ALLOW_FAILURES="2" SKIP_MAKE_CHECK="yes"
|
|
|
|
# os: osx
|
2019-10-01 09:32:46 +02:00
|
|
|
## We clone our stem repo and run `make test-stem`
|
|
|
|
- env: TEST_STEM="yes" SKIP_MAKE_CHECK="yes"
|
2018-08-09 08:42:05 +02:00
|
|
|
|
Travis: Add a macOS chutney job, but don't wait for it to finish
Since Travis macOS has IPv6 support (and Travis Linux does not), chutney
will now run its IPv6 networks as part of Travis CI.
But since chutney is slow, don't wait for the macOS chutney to finish.
(Travis have fixed the duplicate notification bug in fast_finish. So we
can use fast_finish and allow_failure to finish early. Unfortunately,
allow_failure also means we ignore failures in macOS chutney.)
Also make sure that we have:
* a compile on each platform, with each compiler,
* a check on each platform, and
* a check on each compiler.
Finally, sort builds: allow fail last, macOS first, slowest first.
Closes ticket 30860.
Closes ticket 31859 for 0.2.9.
2019-09-26 09:44:41 +02:00
|
|
|
## Allow the build to report success (with non-required sub-builds
|
|
|
|
## continuing to run) if all required sub-builds have succeeded.
|
|
|
|
fast_finish: true
|
2018-02-28 19:28:45 +01:00
|
|
|
|
2019-09-26 09:25:17 +02:00
|
|
|
## Careful! We use global envs, which makes it hard to allow failures by env:
|
2018-08-09 08:42:05 +02:00
|
|
|
## https://docs.travis-ci.com/user/customizing-the-build#matching-jobs-with-allow_failures
|
2019-06-10 11:18:35 +02:00
|
|
|
allow_failures:
|
2019-10-01 09:32:46 +02:00
|
|
|
## macOS rust and chutney are very slow, so we let the build finish before
|
|
|
|
## they are done. We'd like to fast finish, but still eventually show
|
|
|
|
## any failures in the build status. But Travis doesn't have that ability.
|
|
|
|
- env: RUST_OPTIONS="--enable-rust --enable-cargo-online-mode"
|
|
|
|
compiler: clang
|
|
|
|
os: osx
|
Travis: Add a macOS chutney job, but don't wait for it to finish
Since Travis macOS has IPv6 support (and Travis Linux does not), chutney
will now run its IPv6 networks as part of Travis CI.
But since chutney is slow, don't wait for the macOS chutney to finish.
(Travis have fixed the duplicate notification bug in fast_finish. So we
can use fast_finish and allow_failure to finish early. Unfortunately,
allow_failure also means we ignore failures in macOS chutney.)
Also make sure that we have:
* a compile on each platform, with each compiler,
* a check on each platform, and
* a check on each compiler.
Finally, sort builds: allow fail last, macOS first, slowest first.
Closes ticket 30860.
Closes ticket 31859 for 0.2.9.
2019-09-26 09:44:41 +02:00
|
|
|
- env: CHUTNEY="yes" CHUTNEY_ALLOW_FAILURES="2" SKIP_MAKE_CHECK="yes"
|
|
|
|
os: osx
|
2019-06-10 11:18:35 +02:00
|
|
|
## test-stem sometimes hangs on Travis
|
2019-07-01 06:33:54 +02:00
|
|
|
- env: TEST_STEM="yes" SKIP_MAKE_CHECK="yes"
|
2019-06-10 11:18:35 +02:00
|
|
|
|
2018-08-09 08:42:05 +02:00
|
|
|
## (Linux only) Use the latest Linux image (Ubuntu Trusty)
|
|
|
|
dist: trusty
|
|
|
|
|
2018-09-18 11:26:54 +02:00
|
|
|
## Download our dependencies
|
2018-08-09 08:42:05 +02:00
|
|
|
addons:
|
2018-09-18 11:26:54 +02:00
|
|
|
## (Linux only)
|
2018-08-09 08:42:05 +02:00
|
|
|
apt:
|
|
|
|
packages:
|
|
|
|
## Required dependencies
|
|
|
|
- libevent-dev
|
2018-09-18 11:26:54 +02:00
|
|
|
## Ubuntu comes with OpenSSL by default
|
|
|
|
#- libssl-dev
|
2018-08-09 08:42:05 +02:00
|
|
|
- zlib1g-dev
|
|
|
|
## Optional dependencies
|
|
|
|
- libcap-dev
|
2018-08-09 11:33:28 +02:00
|
|
|
- liblzma-dev
|
2018-09-25 20:41:19 +02:00
|
|
|
- libnss3-dev
|
2018-08-09 08:42:05 +02:00
|
|
|
- libscrypt-dev
|
|
|
|
- libseccomp-dev
|
2018-08-09 11:33:28 +02:00
|
|
|
## zstd doesn't exist in Ubuntu Trusty
|
|
|
|
#- libzstd
|
2018-09-18 11:26:54 +02:00
|
|
|
## Conditional build dependencies
|
2018-08-09 10:29:29 +02:00
|
|
|
## Always installed, so we don't need sudo
|
|
|
|
- asciidoc
|
|
|
|
- docbook-xsl
|
|
|
|
- docbook-xml
|
|
|
|
- xmlto
|
2019-04-04 05:02:13 +02:00
|
|
|
## Utilities
|
|
|
|
## preventing or diagnosing hangs
|
|
|
|
- timelimit
|
2018-09-18 11:26:54 +02:00
|
|
|
## (OSX only)
|
|
|
|
homebrew:
|
|
|
|
packages:
|
|
|
|
## Required dependencies
|
|
|
|
- libevent
|
|
|
|
## The OSX version of OpenSSL is way too old
|
|
|
|
- openssl
|
|
|
|
## OSX comes with zlib by default
|
|
|
|
## to use a newer zlib, pass the keg path to configure (like OpenSSL)
|
|
|
|
#- zlib
|
|
|
|
## Optional dependencies
|
|
|
|
- libscrypt
|
2018-09-18 11:36:28 +02:00
|
|
|
- xz
|
|
|
|
- zstd
|
2018-09-18 11:26:54 +02:00
|
|
|
## Required build dependencies
|
|
|
|
## Tor needs pkg-config to find some dependencies at build time
|
|
|
|
- pkg-config
|
|
|
|
## Optional build dependencies
|
|
|
|
- ccache
|
|
|
|
## Conditional build dependencies
|
|
|
|
## Always installed, because manual brew installs are hard to get right
|
|
|
|
- asciidoc
|
|
|
|
- xmlto
|
2019-04-04 05:02:13 +02:00
|
|
|
## Utilities
|
|
|
|
## preventing or diagnosing hangs
|
|
|
|
- timelimit
|
2017-07-11 22:12:15 +02:00
|
|
|
|
2018-08-09 10:03:18 +02:00
|
|
|
## (OSX only) Use the default OSX image
|
|
|
|
## See https://docs.travis-ci.com/user/reference/osx#os-x-version
|
|
|
|
## Default is Xcode 9.4 on macOS 10.13 as of August 2018
|
|
|
|
#osx_image: xcode9.4
|
|
|
|
|
|
|
|
before_install:
|
2018-08-09 07:41:57 +02:00
|
|
|
## Create empty rust directories for non-Rust builds, so caching succeeds
|
|
|
|
- if [[ "$RUST_OPTIONS" == "" ]]; then mkdir -p $HOME/.cargo $TRAVIS_BUILD_DIR/src/rust/target; fi
|
2018-08-09 10:03:18 +02:00
|
|
|
|
2017-07-11 22:12:15 +02:00
|
|
|
install:
|
2018-09-18 11:26:54 +02:00
|
|
|
## If we're on OSX, configure ccache (ccache is automatically installed and configured on Linux)
|
2018-08-09 07:40:27 +02:00
|
|
|
- if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then export PATH="/usr/local/opt/ccache/libexec:$PATH"; fi
|
2018-08-09 09:44:11 +02:00
|
|
|
## If we're on OSX, OpenSSL is keg-only, so tor 0.2.9 and later need to be configured --with-openssl-dir= to build
|
|
|
|
- if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then OPENSSL_OPTIONS=--with-openssl-dir=`brew --prefix openssl`; fi
|
2018-08-09 08:42:05 +02:00
|
|
|
## Install conditional features
|
|
|
|
## Install coveralls
|
|
|
|
- if [[ "$COVERAGE_OPTIONS" != "" ]]; then pip install --user cpp-coveralls; fi
|
2018-09-18 11:26:54 +02:00
|
|
|
## If we're on OSX, and using asciidoc, configure asciidoc
|
2018-08-10 10:26:33 +02:00
|
|
|
- if [[ "$ASCIIDOC_OPTIONS" == "" ]] && [[ "$TRAVIS_OS_NAME" == "osx" ]]; then export XML_CATALOG_FILES="/usr/local/etc/xml/catalog"; fi
|
2018-08-09 14:32:20 +02:00
|
|
|
## If we're using Rust, download rustup
|
|
|
|
- if [[ "$RUST_OPTIONS" != "" ]]; then curl -Ssf -o rustup.sh https://sh.rustup.rs; fi
|
2018-10-02 07:48:46 +02:00
|
|
|
## Install the nightly channels of rustc and cargo and setup our toolchain environment
|
|
|
|
- if [[ "$RUST_OPTIONS" != "" ]]; then sh rustup.sh -y --default-toolchain nightly; fi
|
2018-08-09 14:32:20 +02:00
|
|
|
- if [[ "$RUST_OPTIONS" != "" ]]; then source $HOME/.cargo/env; fi
|
2018-08-09 14:52:51 +02:00
|
|
|
## If we're testing rust builds in offline-mode, then set up our vendored dependencies
|
2018-08-10 03:55:50 +02:00
|
|
|
- if [[ "$TOR_RUST_DEPENDENCIES" == "true" ]]; then export TOR_RUST_DEPENDENCIES=$PWD/src/ext/rust/crates; fi
|
2019-02-27 13:59:39 +01:00
|
|
|
## If we're running chutney, install it.
|
|
|
|
- if [[ "$CHUTNEY" != "" ]]; then git clone --depth 1 https://github.com/torproject/chutney.git ; export CHUTNEY_PATH="$(pwd)/chutney"; fi
|
2019-07-01 06:33:54 +02:00
|
|
|
## If we're running stem, install it.
|
2018-10-19 17:30:33 +02:00
|
|
|
- if [[ "$TEST_STEM" != "" ]]; then git clone --depth 1 https://github.com/torproject/stem.git ; export STEM_SOURCE_DIR=`pwd`/stem; fi
|
2018-08-09 14:16:28 +02:00
|
|
|
##
|
|
|
|
## Finally, list installed package versions
|
|
|
|
- if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then dpkg-query --show; fi
|
|
|
|
- if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then brew list --versions; fi
|
2018-08-09 14:32:20 +02:00
|
|
|
## Get some info about rustup, rustc and cargo
|
|
|
|
- if [[ "$RUST_OPTIONS" != "" ]]; then which rustup; fi
|
|
|
|
- if [[ "$RUST_OPTIONS" != "" ]]; then which rustc; fi
|
|
|
|
- if [[ "$RUST_OPTIONS" != "" ]]; then which cargo; fi
|
|
|
|
- if [[ "$RUST_OPTIONS" != "" ]]; then rustup --version; fi
|
|
|
|
- if [[ "$RUST_OPTIONS" != "" ]]; then rustc --version; fi
|
|
|
|
- if [[ "$RUST_OPTIONS" != "" ]]; then cargo --version; fi
|
2019-07-01 06:10:07 +02:00
|
|
|
## Get python version
|
|
|
|
- python --version
|
|
|
|
## If we're running chutney, show the chutney commit
|
|
|
|
- if [[ "$CHUTNEY" != "" ]]; then pushd "$CHUTNEY_PATH"; git log -1 ; popd ; fi
|
2019-07-01 06:33:54 +02:00
|
|
|
## If we're running stem, show the stem version and commit
|
2018-10-19 20:19:39 +02:00
|
|
|
- if [[ "$TEST_STEM" != "" ]]; then pushd stem; python -c "from stem import stem; print(stem.__version__);"; git log -1; popd; fi
|
2017-07-11 22:12:15 +02:00
|
|
|
|
|
|
|
script:
|
2019-06-10 10:59:02 +02:00
|
|
|
# Skip test_rebind on macOS
|
|
|
|
- if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then export TOR_SKIP_TEST_REBIND=true; fi
|
2017-07-11 22:12:15 +02:00
|
|
|
- ./autogen.sh
|
2018-09-25 20:41:19 +02:00
|
|
|
- CONFIGURE_FLAGS="$ASCIIDOC_OPTIONS $COVERAGE_OPTIONS $HARDENING_OPTIONS $MODULES_OPTIONS $NSS_OPTIONS $OPENSSL_OPTIONS $RUST_OPTIONS --enable-fatal-warnings --disable-silent-rules"
|
2018-09-05 05:30:17 +02:00
|
|
|
- echo "Configure flags are $CONFIGURE_FLAGS"
|
2018-08-09 09:06:13 +02:00
|
|
|
- ./configure $CONFIGURE_FLAGS
|
2017-07-11 22:12:15 +02:00
|
|
|
## We run `make check` because that's what https://jenkins.torproject.org does.
|
2019-02-27 13:51:52 +01:00
|
|
|
- if [[ "$SKIP_MAKE_CHECK" == "" ]]; then make check; fi
|
2018-08-09 09:06:13 +02:00
|
|
|
- if [[ "$DISTCHECK" != "" ]]; then make distcheck DISTCHECK_CONFIGURE_FLAGS="$CONFIGURE_FLAGS"; fi
|
2019-02-27 13:59:39 +01:00
|
|
|
- if [[ "$CHUTNEY" != "" ]]; then make test-network-all; fi
|
2019-06-14 04:13:28 +02:00
|
|
|
## Diagnostic for bug 29437: kill stem if it hangs for 9.5 minutes
|
|
|
|
## Travis will kill the job after 10 minutes with no output
|
2019-07-01 05:01:52 +02:00
|
|
|
- if [[ "$TEST_STEM" != "" ]]; then make src/app/tor; timelimit -p -t 540 -s USR1 -T 30 -S ABRT python3 "$STEM_SOURCE_DIR"/run_tests.py --tor src/app/tor --integ --test control.controller --test control.base_controller --test process --log TRACE --log-file stem.log; fi
|
2019-03-18 15:27:14 +01:00
|
|
|
## If this build was one that produced coverage, upload it.
|
2019-03-20 15:44:06 +01:00
|
|
|
- if [[ "$COVERAGE_OPTIONS" != "" ]]; then coveralls -b . --exclude src/test --exclude src/trunnel --gcov-options '\-p' || echo "Coverage failed"; fi
|
2017-07-02 23:28:52 +02:00
|
|
|
|
2017-07-11 22:12:15 +02:00
|
|
|
after_failure:
|
2018-08-09 08:42:05 +02:00
|
|
|
## configure will leave a log file with more details of config failures.
|
|
|
|
## But the log is too long for travis' rendered view, so tail it.
|
2018-09-05 05:12:54 +02:00
|
|
|
- tail -1000 config.log || echo "tail failed"
|
2017-07-11 22:12:15 +02:00
|
|
|
## `make check` will leave a log file with more details of test failures.
|
2019-02-27 13:51:52 +01:00
|
|
|
- if [[ "$SKIP_MAKE_CHECK" == "" ]]; then cat test-suite.log || echo "cat failed"; fi
|
2018-04-26 21:22:52 +02:00
|
|
|
## `make distcheck` puts it somewhere different.
|
2018-09-05 05:12:54 +02:00
|
|
|
- if [[ "$DISTCHECK" != "" ]]; then make show-distdir-testlog || echo "make failed"; fi
|
2018-10-12 03:25:41 +02:00
|
|
|
- if [[ "$DISTCHECK" != "" ]]; then make show-distdir-core || echo "make failed"; fi
|
2019-07-01 06:05:26 +02:00
|
|
|
- if [[ "$CHUTNEY" != "" ]]; then ls test_network_log || echo "ls failed"; cat test_network_log/* || echo "cat failed"; fi
|
2019-05-24 04:06:07 +02:00
|
|
|
- if [[ "$TEST_STEM" != "" ]]; then tail -1000 "$STEM_SOURCE_DIR"/test/data/tor_log || echo "tail failed"; fi
|
2019-07-01 05:01:52 +02:00
|
|
|
- if [[ "$TEST_STEM" != "" ]]; then grep -v "SocketClosed" stem.log | tail -1000 || echo "grep | tail failed"; fi
|
2018-04-16 20:42:28 +02:00
|
|
|
|
2019-03-18 15:27:14 +01:00
|
|
|
before_cache:
|
2019-04-01 05:49:27 +02:00
|
|
|
## Delete all gcov files.
|
2019-03-18 15:27:14 +01:00
|
|
|
- if [[ "$COVERAGE_OPTIONS" != "" ]]; then make reset-gcov; fi
|
2019-04-01 06:05:14 +02:00
|
|
|
## Delete the cargo registry before caching .cargo, because it's cheaper to
|
|
|
|
## download the registry and throw it away, rather than caching it
|
|
|
|
- rm -rf $HOME/.cargo/registry
|
2018-08-09 08:42:05 +02:00
|
|
|
|
|
|
|
notifications:
|
|
|
|
irc:
|
|
|
|
channels:
|
|
|
|
- "irc.oftc.net#tor-ci"
|
|
|
|
template:
|
|
|
|
- "%{repository} %{branch} %{commit} - %{author}: %{commit_subject}"
|
|
|
|
- "Build #%{build_number} %{result}. Details: %{build_url}"
|
|
|
|
on_success: change
|
|
|
|
on_failure: change
|
|
|
|
email:
|
|
|
|
on_success: never
|
|
|
|
on_failure: change
|