language: python # The default python version on Travis is 2.7 # But we add this line to show the python version in the Travis UI python: "2.7" os: - linux ## We also use macOS for some networks ## We don't use the build matrix cross-product, because it makes too many jobs ## Instead, we list each job under matrix: include: env: global: ## 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" matrix: ## This matrix entry is required, but it doesn't actually create any jobs ## by itself. All jobs are created by matrix: include: entries ## ## The TOR env var should be kept in sync with the Linux tor version in ## the addons section below ## We use the basic-min network by default, to reduce load and increase ## reliability - TOR="master-nightly" NETWORK_FLAVOUR="basic-min" matrix: # include creates Linux, python 2.7, tor master builds by default # we use tor master to catch tor issues before stable releases # the key(s) in each item override these defaults include: ## Test different network flavours ## We're using the networks from tor master's "make test-network-all" ## ## We need to use macOS to test IPv6 networks, because Travis Linux doesn't ## support IPv6. But macOS is tricky: ## - We use the default python version on macOS, which is currently 2.7. ## (But we don't show the version, because Travis might change it ## without us noticing.) ## - We use language: c, because language: python fails on Travis macOS. ## - We get the tor version in the homebrew cache on the macOS image. ## The latest tor version in homebrew is on this page: ## https://formulae.brew.sh/formula/tor ## The Travis version might be slightly older. - env: TOR="master-nightly" NETWORK_FLAVOUR="bridges-min" - env: TOR="master-nightly" NETWORK_FLAVOUR="hs-v2-min" - env: TOR="master-nightly" NETWORK_FLAVOUR="hs-v3-min" - env: TOR="master-nightly" NETWORK_FLAVOUR="single-onion-v23" - env: TOR="stable-release" NETWORK_FLAVOUR="bridges+ipv6-min" os: osx language: c python: ## The IPv6 exit test doesn't actually require IPv6, see #30182. ## But we'll keep this test, because it does test IPv6 exit config. - env: TOR="master-nightly" NETWORK_FLAVOUR="ipv6-exit-min" - env: TOR="stable-release" NETWORK_FLAVOUR="hs-v23-ipv6-md" os: osx language: c python: ## v3 onion service IPv6 tests - env: TOR="stable-release" NETWORK_FLAVOUR="single-onion-v23-ipv6-md" os: osx language: c python: ## Test all supported and available tor versions on Linux ## If the deb.torproject.org repositories are removed, we will fall back to ## Ubuntu security's tor version (currently 0.2.9.14). We might want to ## automatically fail the job if we can't get a newer tor, see #29741. ## ## The current tor versions in Ubuntu are on this page: ## https://packages.ubuntu.com/search?keywords=tor&searchon=names&exact=1 ## ## We run 0.2.9 on Xenial, because Bionic has an OpenSSL version mismatch - dist: xenial addons: apt: sources: - sourceline: 'deb https://deb.torproject.org/torproject.org tor-nightly-0.2.9.x-xenial main' key_url: 'https://deb.torproject.org/torproject.org/A3C4F0F979CAA22CDBA8F512EE8CBC9E886DDD89.asc' packages: - shellcheck - tor env: TOR="0.2.9-nightly" NETWORK_FLAVOUR="basic-min" - addons: apt: sources: - sourceline: 'deb https://deb.torproject.org/torproject.org tor-nightly-0.3.5.x-bionic main' key_url: 'https://deb.torproject.org/torproject.org/A3C4F0F979CAA22CDBA8F512EE8CBC9E886DDD89.asc' packages: - shellcheck - tor env: TOR="0.3.5-nightly" NETWORK_FLAVOUR="basic-min" - addons: apt: sources: - sourceline: 'deb https://deb.torproject.org/torproject.org tor-nightly-0.4.0.x-bionic main' key_url: 'https://deb.torproject.org/torproject.org/A3C4F0F979CAA22CDBA8F512EE8CBC9E886DDD89.asc' packages: - shellcheck - tor env: TOR="0.4.0-nightly" NETWORK_FLAVOUR="basic-min" ## The current stable release is 0.4.1 - addons: apt: sources: - sourceline: 'deb https://deb.torproject.org/torproject.org bionic main' key_url: 'https://deb.torproject.org/torproject.org/A3C4F0F979CAA22CDBA8F512EE8CBC9E886DDD89.asc' packages: - shellcheck - tor env: TOR="stable-release" NETWORK_FLAVOUR="basic-min" ## We also have 0.4.1 and 0.4.2 nightlies - addons: apt: sources: - sourceline: 'deb https://deb.torproject.org/torproject.org tor-nightly-0.4.1.x-bionic main' key_url: 'https://deb.torproject.org/torproject.org/A3C4F0F979CAA22CDBA8F512EE8CBC9E886DDD89.asc' packages: - shellcheck - tor env: TOR="0.4.1-nightly" NETWORK_FLAVOUR="basic-min" - addons: apt: sources: - sourceline: 'deb https://deb.torproject.org/torproject.org tor-nightly-0.4.2.x-bionic main' key_url: 'https://deb.torproject.org/torproject.org/A3C4F0F979CAA22CDBA8F512EE8CBC9E886DDD89.asc' packages: - shellcheck - tor env: TOR="0.4.2-nightly" NETWORK_FLAVOUR="basic-min" ## Test all supported python releases ## Pre-installed in macOS - os: osx language: c python: ## python 3 is already installed, under this name env: PYTHON="python3" TOR="stable-release" ## Pre-installed in Travis Bionic: ## https://docs.travis-ci.com/user/reference/bionic/#python-support ## End of Life: 1 January 2020 ## https://www.python.org/dev/peps/pep-0373/#update - python: "2.7" ## End of Life: December 2021 ## https://www.python.org/dev/peps/pep-0494/#lifespan - python: "3.6" ## End of Life: June 2023 ## https://www.python.org/dev/peps/pep-0537/#lifespan - python: "3.7" ## Extra Installs ## End of Life: October 2024 ## https://www.python.org/dev/peps/pep-0569/#lifespan - python: "3.8" ## Python 3.9 ## Travis Dev Package: ???? ## (Add 3.9-dev) ## Stable: 10 October 2020 ## (Switch from 3.9-dev to 3.9, and check for {3.10,4.0}-dev) ## End of Life: October 2025 ## https://www.python.org/dev/peps/pep-0596/#lifespan #- python: "3.9-dev" - python: "nightly" ## PyPy versions ## PyPy isn't packaged for Travis Bionic yet ## Tor master doesn't work on Travis Xenial, because it only has ## OpenSSL 1.1.0 ## Pypy 2 ## End of Life: "forever" ## http://doc.pypy.org/en/latest/faq.html#how-long-will-pypy-support-python2 ## But chutney can decide not to support python 2 after 1 Jan 2020. - python: "pypy" dist: xenial addons: apt: sources: - sourceline: 'deb https://deb.torproject.org/torproject.org tor-nightly-0.4.2.x-xenial main' key_url: 'https://deb.torproject.org/torproject.org/A3C4F0F979CAA22CDBA8F512EE8CBC9E886DDD89.asc' packages: - shellcheck - tor env: TOR="0.4.2-nightly" NETWORK_FLAVOUR="basic-min" ## PyPy does not have documented end of life dates - python: "pypy3" dist: xenial addons: apt: sources: - sourceline: 'deb https://deb.torproject.org/torproject.org tor-nightly-0.4.2.x-xenial main' key_url: 'https://deb.torproject.org/torproject.org/A3C4F0F979CAA22CDBA8F512EE8CBC9E886DDD89.asc' packages: - shellcheck - tor env: TOR="0.4.2-nightly" NETWORK_FLAVOUR="basic-min" ## Uncomment to allow the build to report success (with non-required ## sub-builds continuing to run) if all required sub-builds have ## succeeded. This is somewhat buggy currently: it can cause ## duplicate notifications and prematurely report success if a ## single sub-build has succeeded. See ## https://github.com/travis-ci/travis-ci/issues/1696 #fast_finish: true ## These builds fail in Travis at the moment #allow_failures: # - env: TOR="master-nightly" NETWORK_FLAVOUR="basic-min" ## (Linux only) Use the Ubuntu Bionic Linux Image dist: bionic ## (macOS only) Use a recent macOS image ## See https://docs.travis-ci.com/user/reference/osx#os-x-version ## 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 ## Download our dependencies addons: ## (Linux only) apt: sources: - sourceline: 'deb https://deb.torproject.org/torproject.org tor-nightly-master-bionic main' key_url: 'https://deb.torproject.org/torproject.org/A3C4F0F979CAA22CDBA8F512EE8CBC9E886DDD89.asc' packages: - shellcheck - tor ## (macOS only) homebrew: packages: - shellcheck - tor # See ticket #30928 for more information. This key should be removed at # some point to speed up builds. update: true before_install: ## Set pipefail: we may use pipes in future - set -o pipefail || echo "pipefail failed" install: ## Chutney has no dependencies, apart from tor ## List installed package versions - if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then dpkg-query --show; fi - if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then brew list --versions; fi ## Use the default spelling for python, unless it is overridden - export PYTHON=${PYTHON:-python} - $PYTHON --version - if command -v shellcheck ; then shellcheck --version; fi - tor --version ## List the permissions on chutney and chutney/net - ls -al . net script: ## Basic tests - if command -v shellcheck ; then tests/shellcheck-tests.sh; fi - tests/unit-tests.sh ## Quick smoke test - tools/test-network.sh --dry-run ## Now, allow one failure for each test (--allow-failures 1) - export CHUTNEY_ALLOW_FAILURES=1 ## Different data directory - tools/test-network.sh --net-dir "$(mktemp -d)" ## IP address handling - tools/test-network.sh --ipv4 "127.0.0.1" --ipv6 "[::1]" ## Offline mode - tools/test-network.sh --offline ## --data fails on python3, and on some tor versions ## We'll fix this issue in #30071 #- FIVE_MEGABYTES=$((5*1024*1024)) #- tools/test-network.sh --data "$FIVE_MEGABYTES" --connections 2 --rounds 2 --hs-multi-client 1 --start-time 130 --bootstrap-time 70 --stop-time 10 after_failure: ## List the permissions on chutney and chutney/net - ls -al . net ## List the contents of net/nodes - ls -lR net/nodes/ ## Dump the config - cat net/nodes/000a*/torrc ## Dump the important directory documents #- cat net/nodes/000a*/cached-certs - cat net/nodes/000a*/cached-consensus - cat net/nodes/000a*/cached-descriptors* #- cat net/nodes/000a*/cached-extrainfo* - cat net/nodes/000a*/cached-microdesc-consensus - cat net/nodes/000a*/cached-microdescs* #- cat net/nodes/000a*/key-pinning-journal #- cat net/nodes/000a*/router-stability #- cat net/nodes/00*a*/sr-state #- cat net/nodes/00*a*/state - for f in net/nodes/00*a*/v3-status-votes ; do echo "$f"; cat "$f"; done - for f in net/nodes/00*a*/unparseable-descs/* ; do echo "$f"; cat "$f"; done ## And repeat the warnings at the end - tools/test-network.sh --only-warnings 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