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 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:
|
2019-09-23 21:04:54 +02:00
|
|
|
## The Travis CI environment allows us two cores, so let's use both. Also,
|
|
|
|
## let's use the "-k" flag so that we get all of the compilation failures,
|
|
|
|
## not just the first one.
|
|
|
|
- MAKEFLAGS="-k -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
|
2020-03-14 15:11:00 +01:00
|
|
|
- HARDENING_OPTIONS="--enable-all-bugs-are-fatal --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"
|
2019-12-16 00:01:45 +01:00
|
|
|
## Turn off tor's sandbox in chutney, until we fix sandbox errors that are
|
|
|
|
## triggered by Ubuntu Xenial and Bionic. See #32722.
|
|
|
|
- CHUTNEY_TOR_SANDBOX="0"
|
2020-02-13 04:06:17 +01:00
|
|
|
## The default target for chutney jobs
|
2020-02-14 01:38:40 +01:00
|
|
|
- CHUTNEY_MAKE="test-network-all"
|
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:
|
2020-02-13 04:37:02 +01:00
|
|
|
## We run chutney on macOS, because macOS Travis has IPv6
|
|
|
|
## But we only run the IPv6 chutney tests, to speed up the job
|
2020-02-14 01:38:40 +01:00
|
|
|
- env: CHUTNEY_MAKE="test-network-ipv6" CHUTNEY="yes" CHUTNEY_ALLOW_FAILURES="2" SKIP_MAKE_CHECK="yes"
|
2020-02-13 04:37:02 +01:00
|
|
|
os: osx
|
|
|
|
|
|
|
|
## We also run basic tests on macOS
|
2019-09-26 09:25:17 +02:00
|
|
|
- compiler: clang
|
|
|
|
os: osx
|
2019-11-15 01:17:32 +01:00
|
|
|
## Turn off some newer features, turn on clang's -Wtypedef-redefinition
|
2020-03-14 15:25:59 +01:00
|
|
|
## Also, disable ALL_BUGS_ARE_FATAL macro.
|
2020-03-14 15:11:00 +01:00
|
|
|
env: C_DIALECT_OPTIONS="-std=gnu99" HARDENING_OPTIONS="--enable-expensive-hardening"
|
2020-02-13 04:37:02 +01: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
|
|
|
## We run chutney on Linux, because it's faster than chutney on macOS
|
2019-11-28 02:38:48 +01:00
|
|
|
## Chutney is a fast job, clang is slower on Linux, so we do Chutney 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
|
|
|
- env: CHUTNEY="yes" CHUTNEY_ALLOW_FAILURES="2" SKIP_MAKE_CHECK="yes"
|
2019-11-28 02:38:48 +01:00
|
|
|
compiler: clang
|
2020-02-13 04:37:02 +01:00
|
|
|
|
2018-08-09 10:29:29 +02:00
|
|
|
## We check asciidoc with distcheck, to make sure we remove doc products
|
2019-02-27 13:51:52 +01:00
|
|
|
- env: DISTCHECK="yes" ASCIIDOC_OPTIONS="" SKIP_MAKE_CHECK="yes"
|
2020-02-13 04:37:02 +01:00
|
|
|
|
2019-10-18 06:22:36 +02:00
|
|
|
## We check disable module relay
|
2020-03-14 15:11:00 +01:00
|
|
|
- env: MODULES_OPTIONS="--disable-module-relay" HARDENING_OPTIONS="--enable-expensive-hardening"
|
2019-10-01 09:28:26 +02:00
|
|
|
## We check disable module dirauth
|
2020-03-14 15:11:00 +01:00
|
|
|
- env: MODULES_OPTIONS="--disable-module-dirauth" HARDENING_OPTIONS="--enable-expensive-hardening"
|
2020-02-13 04:37:02 +01:00
|
|
|
|
|
|
|
## We check NSS
|
|
|
|
## Use -std=gnu99 to turn off some newer features, and maybe turn on some
|
|
|
|
## extra gcc warnings?
|
2020-03-14 15:11:00 +01:00
|
|
|
- env: NSS_OPTIONS="--enable-nss" C_DIALECT_OPTIONS="-std=gnu99" HARDENING_OPTIONS="--enable-expensive-hardening"
|
2020-02-13 04:37:02 +01:00
|
|
|
|
|
|
|
## We include a single coverage build with the best options for coverage
|
|
|
|
- env: COVERAGE_OPTIONS="--enable-coverage" HARDENING_OPTIONS="" TOR_TEST_RNG_SEED="636f766572616765"
|
|
|
|
|
|
|
|
## We clone our stem repo and run `make test-stem`
|
|
|
|
- env: TEST_STEM="yes" SKIP_MAKE_CHECK="yes"
|
|
|
|
|
|
|
|
## We run `make doxygen` without `make check`.
|
|
|
|
- env: SKIP_MAKE_CHECK="yes" DOXYGEN="yes"
|
|
|
|
|
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:
|
2020-02-13 04:13:40 +01:00
|
|
|
## Since we're actively developing IPv6, we want to require the IPv6
|
|
|
|
## chutney tests
|
2020-02-14 01:38:40 +01:00
|
|
|
#- env: CHUTNEY_MAKE="test-network-ipv6" CHUTNEY="yes" CHUTNEY_ALLOW_FAILURES="2" SKIP_MAKE_CHECK="yes"
|
2020-02-13 04:13:40 +01:00
|
|
|
# os: osx
|
2019-06-10 11:18:35 +02:00
|
|
|
|
2019-10-23 14:31:05 +02:00
|
|
|
## (Linux only) Use a recent Linux image (Ubuntu Bionic)
|
|
|
|
dist: bionic
|
2018-08-09 08:42:05 +02:00
|
|
|
|
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
|
2019-10-23 14:35:24 +02:00
|
|
|
- libzstd-dev
|
2019-10-23 05:49:50 +02:00
|
|
|
## Optional build dependencies
|
|
|
|
- coccinelle
|
2019-04-04 05:23:26 +02:00
|
|
|
- shellcheck
|
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
|
2020-01-22 12:42:47 +01:00
|
|
|
- doxygen
|
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
|
2019-10-23 05:49:50 +02:00
|
|
|
- coccinelle
|
2019-04-04 05:23:26 +02:00
|
|
|
- shellcheck
|
2018-09-18 11:26:54 +02:00
|
|
|
## 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
|
|
|
|
2019-10-23 14:41:17 +02:00
|
|
|
## (OSX only) Use a recent macOS image
|
2018-08-09 10:03:18 +02:00
|
|
|
## See https://docs.travis-ci.com/user/reference/osx#os-x-version
|
2019-10-23 14:41:17 +02:00
|
|
|
## Default is Xcode 9.4 on macOS 10.13 as of October 2019
|
|
|
|
## Recent is Xcode 11.2 on macOS 10.14 as of October 2019
|
|
|
|
osx_image: xcode11.2
|
2018-08-09 10:03:18 +02:00
|
|
|
|
|
|
|
before_install:
|
2019-12-02 02:58:54 +01:00
|
|
|
## Set pipefail: we use pipes
|
|
|
|
- set -o pipefail || echo "pipefail failed"
|
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
|
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.
|
2020-06-03 20:48:05 +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-12-06 14:26:34 +01:00
|
|
|
## Get python version
|
|
|
|
- python --version
|
2019-07-01 06:10:07 +02:00
|
|
|
## 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
|
2019-10-23 05:49:50 +02:00
|
|
|
## Get the coccinelle version
|
|
|
|
## Installs are unreliable on macOS, so we just rely on brew list --versions
|
|
|
|
- if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then spatch --version; fi
|
2019-06-23 13:12:05 +02:00
|
|
|
## We don't want Tor tests to depend on default configuration file at
|
|
|
|
## ~/.torrc. So we put some random bytes in there, to make sure we get build
|
|
|
|
## failures in case Tor is reading it during CI jobs.
|
2019-06-23 12:31:47 +02:00
|
|
|
- dd ibs=1 count=1024 if=/dev/urandom > ~/.torrc
|
2017-07-11 22:12:15 +02:00
|
|
|
|
|
|
|
script:
|
2020-06-03 23:09:51 +02:00
|
|
|
# Skip test_rebind and test_include on macOS
|
|
|
|
- if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then export TOR_SKIP_TEST_REBIND=true; export TOR_SKIP_TEST_INCLUDE=true; fi
|
2017-07-11 22:12:15 +02:00
|
|
|
- ./autogen.sh
|
2021-09-14 17:03:00 +02:00
|
|
|
- CONFIGURE_FLAGS="$ASCIIDOC_OPTIONS $COVERAGE_OPTIONS $HARDENING_OPTIONS $MODULES_OPTIONS $NSS_OPTIONS $OPENSSL_OPTIONS --enable-fatal-warnings --disable-silent-rules"
|
2019-11-15 01:17:32 +01:00
|
|
|
- echo "Configure flags are $CONFIGURE_FLAGS CC=\"$CC $C_DIALECT_OPTIONS\""
|
2020-03-13 19:24:54 +01:00
|
|
|
- ./configure $CONFIGURE_FLAGS CC="$CC $C_DIALECT_OPTIONS";
|
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
|
2020-02-14 01:38:40 +01:00
|
|
|
- if [[ "$CHUTNEY" != "" ]]; then make "$CHUTNEY_MAKE"; 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
|
2020-01-22 12:42:47 +01:00
|
|
|
- if [[ "$DOXYGEN" != "" ]]; then make doxygen; 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
|
2020-02-17 08:21:13 +01:00
|
|
|
- if [[ "$CHUTNEY" != "" ]]; then "$CHUTNEY_PATH/tools/diagnostics.sh" || echo "diagnostics failed"; 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
|
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
|