tor

The Tor anonymity network
git clone https://git.dasho.dev/tor.git
Log | Files | Refs | README | LICENSE

.travis.yml (10566B)


      1 language: c
      2 
      3 cache:
      4  ccache: true
      5 
      6 compiler:
      7  - gcc
      8 
      9 os:
     10  - linux
     11 
     12 ## We don't use the build matrix cross-product, because it makes too many jobs
     13 ## Instead, we list each job under matrix: include:
     14 env:
     15  global:
     16    ## The Travis CI environment allows us two cores, so let's use both.  Also,
     17    ## let's use the "-k" flag so that we get all of the compilation failures,
     18    ## not just the first one.
     19    - MAKEFLAGS="-k -j 2"
     20    ## We turn on hardening by default
     21    ## Also known as --enable-fragile-hardening in 0.3.0.3-alpha and later
     22    - HARDENING_OPTIONS="--enable-all-bugs-are-fatal --enable-expensive-hardening"
     23    ## We turn off asciidoc by default, because it's slow
     24    - ASCIIDOC_OPTIONS="--disable-asciidoc"
     25    ## Turn off tor's sandbox in chutney, until we fix sandbox errors that are
     26    ## triggered by Ubuntu Xenial and Bionic. See #32722.
     27    - CHUTNEY_TOR_SANDBOX="0"
     28    ## The default target for chutney jobs
     29    - CHUTNEY_MAKE="test-network-all"
     30  matrix:
     31    ## This matrix entry is required, but it doesn't actually create any jobs
     32    -
     33 
     34 matrix:
     35  ## include creates builds with gcc, linux, unless we override those defaults
     36  include:
     37    ## We run chutney on macOS, because macOS Travis has IPv6
     38    ## But we only run the IPv6 chutney tests, to speed up the job
     39    - env: CHUTNEY_MAKE="test-network-ipv6" CHUTNEY="yes" CHUTNEY_ALLOW_FAILURES="2" SKIP_MAKE_CHECK="yes"
     40      os: osx
     41 
     42    ## We also run basic tests on macOS
     43    - compiler: clang
     44      os: osx
     45      ## Turn off some newer features, turn on clang's -Wtypedef-redefinition
     46      ## Also, disable ALL_BUGS_ARE_FATAL macro.
     47      env: C_DIALECT_OPTIONS="-std=gnu99" HARDENING_OPTIONS="--enable-expensive-hardening"
     48 
     49    ## We run chutney on Linux, because it's faster than chutney on macOS
     50    ## Chutney is a fast job, clang is slower on Linux, so we do Chutney clang
     51    - env: CHUTNEY="yes" CHUTNEY_ALLOW_FAILURES="2" SKIP_MAKE_CHECK="yes"
     52      compiler: clang
     53 
     54    ## We check asciidoc with distcheck, to make sure we remove doc products
     55    - env: DISTCHECK="yes" ASCIIDOC_OPTIONS="" SKIP_MAKE_CHECK="yes"
     56 
     57    ## We check disable module relay
     58    - env: MODULES_OPTIONS="--disable-module-relay" HARDENING_OPTIONS="--enable-expensive-hardening"
     59    ## We check disable module dirauth
     60    - env: MODULES_OPTIONS="--disable-module-dirauth" HARDENING_OPTIONS="--enable-expensive-hardening"
     61 
     62    ## We check NSS
     63    ## Use -std=gnu99 to turn off some newer features, and maybe turn on some
     64    ## extra gcc warnings?
     65    - env: NSS_OPTIONS="--enable-nss" C_DIALECT_OPTIONS="-std=gnu99" HARDENING_OPTIONS="--enable-expensive-hardening"
     66 
     67    ## We include a single coverage build with the best options for coverage
     68    - env: COVERAGE_OPTIONS="--enable-coverage" HARDENING_OPTIONS="" TOR_TEST_RNG_SEED="636f766572616765"
     69 
     70    ## We clone our stem repo and run `make test-stem`
     71    - env: TEST_STEM="yes" SKIP_MAKE_CHECK="yes"
     72 
     73    ## We run `make doxygen` without `make check`.
     74    - env: SKIP_MAKE_CHECK="yes" DOXYGEN="yes"
     75 
     76  ## Allow the build to report success (with non-required sub-builds
     77  ## continuing to run) if all required sub-builds have succeeded.
     78  fast_finish: true
     79 
     80  ## Careful! We use global envs, which makes it hard to allow failures by env:
     81  ## https://docs.travis-ci.com/user/customizing-the-build#matching-jobs-with-allow_failures
     82  allow_failures:
     83    ## Since we're actively developing IPv6, we want to require the IPv6
     84    ## chutney tests
     85    #- env: CHUTNEY_MAKE="test-network-ipv6" CHUTNEY="yes" CHUTNEY_ALLOW_FAILURES="2" SKIP_MAKE_CHECK="yes"
     86    #  os: osx
     87 
     88 ## (Linux only) Use a recent Linux image (Ubuntu Bionic)
     89 dist: bionic
     90 
     91 ## Download our dependencies
     92 addons:
     93  ## (Linux only)
     94  apt:
     95    packages:
     96      ## Required dependencies
     97      - libevent-dev
     98      ## Ubuntu comes with OpenSSL by default
     99      #- libssl-dev
    100      - zlib1g-dev
    101      ## Optional dependencies
    102      - libcap-dev
    103      - liblzma-dev
    104      - libnss3-dev
    105      - libscrypt-dev
    106      - libseccomp-dev
    107      - libzstd-dev
    108      ## Optional build dependencies
    109      - coccinelle
    110      - shellcheck
    111      ## Conditional build dependencies
    112      ## Always installed, so we don't need sudo
    113      - asciidoc
    114      - docbook-xsl
    115      - docbook-xml
    116      - xmlto
    117      - doxygen
    118      ## Utilities
    119      ## preventing or diagnosing hangs
    120      - timelimit
    121  ## (OSX only)
    122  homebrew:
    123    packages:
    124      ## Required dependencies
    125      - libevent
    126      ## The OSX version of OpenSSL is way too old
    127      - openssl
    128      ## OSX comes with zlib by default
    129      ## to use a newer zlib, pass the keg path to configure (like OpenSSL)
    130      #- zlib
    131      ## Optional dependencies
    132      - libscrypt
    133      - xz
    134      - zstd
    135      ## Required build dependencies
    136      ## Tor needs pkg-config to find some dependencies at build time
    137      - pkg-config
    138      ## Optional build dependencies
    139      - ccache
    140      - coccinelle
    141      - shellcheck
    142      ## Conditional build dependencies
    143      ## Always installed, because manual brew installs are hard to get right
    144      - asciidoc
    145      - xmlto
    146      ## Utilities
    147      ## preventing or diagnosing hangs
    148      - timelimit
    149 
    150 ## (OSX only) Use a recent macOS image
    151 ## See https://docs.travis-ci.com/user/reference/osx#os-x-version
    152 ## Default is Xcode 9.4 on macOS 10.13 as of October 2019
    153 ## Recent is Xcode 11.2 on macOS 10.14 as of October 2019
    154 osx_image: xcode11.2
    155 
    156 before_install:
    157  ## Set pipefail: we use pipes
    158  - set -o pipefail || echo "pipefail failed"
    159 
    160 install:
    161  ## If we're on OSX, configure ccache (ccache is automatically installed and configured on Linux)
    162  - if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then export PATH="/usr/local/opt/ccache/libexec:$PATH"; fi
    163  ## 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
    164  - if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then OPENSSL_OPTIONS=--with-openssl-dir=`brew --prefix openssl`; fi
    165  ## Install conditional features
    166  ## Install coveralls
    167  - if [[ "$COVERAGE_OPTIONS" != "" ]]; then pip install --user cpp-coveralls; fi
    168  ## If we're on OSX, and using asciidoc, configure asciidoc
    169  - if [[ "$ASCIIDOC_OPTIONS" == "" ]] && [[ "$TRAVIS_OS_NAME" == "osx" ]]; then export XML_CATALOG_FILES="/usr/local/etc/xml/catalog"; fi
    170  ## If we're running chutney, install it.
    171  - if [[ "$CHUTNEY" != "" ]]; then git clone --depth 1 https://github.com/torproject/chutney.git ; export CHUTNEY_PATH="$(pwd)/chutney"; fi
    172  ## If we're running stem, install it.
    173  - if [[ "$TEST_STEM" != "" ]]; then git clone --depth 1 https://github.com/torproject/stem.git ; export STEM_SOURCE_DIR=`pwd`/stem; fi
    174  ##
    175  ## Finally, list installed package versions
    176  - if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then dpkg-query --show; fi
    177  - if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then brew list --versions; fi
    178  ## Get python version
    179  - python --version
    180  ## If we're running chutney, show the chutney commit
    181  - if [[ "$CHUTNEY" != "" ]]; then pushd "$CHUTNEY_PATH"; git log -1 ; popd ; fi
    182  ## If we're running stem, show the stem version and commit
    183  - if [[ "$TEST_STEM" != "" ]]; then pushd stem; python -c "from stem import stem; print(stem.__version__);"; git log -1; popd; fi
    184  ## Get the coccinelle version
    185  ## Installs are unreliable on macOS, so we just rely on brew list --versions
    186  - if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then spatch --version; fi
    187  ## We don't want Tor tests to depend on default configuration file at
    188  ## ~/.torrc. So we put some random bytes in there, to make sure we get build
    189  ## failures in case Tor is reading it during CI jobs.
    190  - dd ibs=1 count=1024 if=/dev/urandom > ~/.torrc
    191 
    192 script:
    193  # Skip test_rebind and test_include on macOS
    194  - if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then export TOR_SKIP_TEST_REBIND=true; export TOR_SKIP_TEST_INCLUDE=true; fi
    195  - ./autogen.sh
    196  - CONFIGURE_FLAGS="$ASCIIDOC_OPTIONS $COVERAGE_OPTIONS $HARDENING_OPTIONS $MODULES_OPTIONS $NSS_OPTIONS $OPENSSL_OPTIONS --enable-fatal-warnings --disable-silent-rules"
    197  - echo "Configure flags are $CONFIGURE_FLAGS CC=\"$CC $C_DIALECT_OPTIONS\""
    198  - ./configure $CONFIGURE_FLAGS CC="$CC $C_DIALECT_OPTIONS";
    199  ## We run `make check` because that's what https://jenkins.torproject.org does.
    200  - if [[ "$SKIP_MAKE_CHECK" == "" ]]; then make check; fi
    201  - if [[ "$DISTCHECK" != "" ]]; then make distcheck DISTCHECK_CONFIGURE_FLAGS="$CONFIGURE_FLAGS"; fi
    202  - if [[ "$CHUTNEY" != "" ]]; then make "$CHUTNEY_MAKE"; fi
    203  ## Diagnostic for bug 29437: kill stem if it hangs for 9.5 minutes
    204  ## Travis will kill the job after 10 minutes with no output
    205  - 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
    206  - if [[ "$DOXYGEN" != "" ]]; then make doxygen; fi
    207  ## If this build was one that produced coverage, upload it.
    208  - if [[ "$COVERAGE_OPTIONS" != "" ]]; then coveralls -b . --exclude src/test --exclude src/trunnel --gcov-options '\-p' || echo "Coverage failed"; fi
    209 
    210 after_failure:
    211  ## configure will leave a log file with more details of config failures.
    212  ## But the log is too long for travis' rendered view, so tail it.
    213  - tail -1000 config.log || echo "tail failed"
    214  ## `make check` will leave a log file with more details of test failures.
    215  - if [[ "$SKIP_MAKE_CHECK" == "" ]]; then cat test-suite.log || echo "cat failed"; fi
    216  ## `make distcheck` puts it somewhere different.
    217  - if [[ "$DISTCHECK" != "" ]]; then make show-distdir-testlog || echo "make failed"; fi
    218  - if [[ "$DISTCHECK" != "" ]]; then make show-distdir-core || echo "make failed"; fi
    219  - 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
    220  - if [[ "$TEST_STEM" != "" ]]; then tail -1000 "$STEM_SOURCE_DIR"/test/data/tor_log || echo "tail failed"; fi
    221  - if [[ "$TEST_STEM" != "" ]]; then grep -v "SocketClosed" stem.log | tail -1000 || echo "grep | tail failed"; fi
    222 
    223 before_cache:
    224  ## Delete all gcov files.
    225  - if [[ "$COVERAGE_OPTIONS" != "" ]]; then make reset-gcov; fi
    226 
    227 notifications:
    228  irc:
    229    channels:
    230      - "irc.oftc.net#tor-ci"
    231    template:
    232      - "%{repository} %{branch} %{commit} - %{author}: %{commit_subject}"
    233      - "Build #%{build_number} %{result}. Details: %{build_url}"
    234    on_success: change
    235    on_failure: change
    236  email:
    237    on_success: never
    238    on_failure: change