.travis.yml 7.01 KB
Newer Older
1
language: c
2

teor's avatar
teor committed
3
4
5
cache:
  ccache: true

teor's avatar
teor committed
6
7
8
compiler:
  - gcc
  - clang
9
10
11

os:
  - linux
teor's avatar
teor committed
12
  - osx
13

teor's avatar
teor committed
14
15
## The build matrix in the following stanza expands into builds for each
## OS and compiler.
16
17
18
19
env:
  global:
    ## The Travis CI environment allows us two cores, so let's use both.
    - MAKEFLAGS="-j 2"
teor's avatar
teor committed
20
21
22
    ## 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"
teor's avatar
teor committed
23
24
    ## We turn off asciidoc by default, because it's slow
    - ASCIIDOC_OPTIONS="--disable-asciidoc"
teor's avatar
teor committed
25
26
27
28
29
30
  matrix:
    ## We want to use each build option at least once
    ##
    ## We don't list default variable values, because we set the defaults
    ## in global (or the default is unset)
    -
31
32

matrix:
teor's avatar
teor committed
33
34
35
36
37
38
  ## include creates builds with gcc, linux, sudo: false
  include:
    ## We include a single coverage build with the best options for coverage
    - env: COVERAGE_OPTIONS="--enable-coverage" HARDENING_OPTIONS=""
    ## We only want to check these build option combinations once
    ## (they shouldn't vary by compiler or OS)
39
40
    ## We run coverage with hardening off, which seems like enough
    # - env: HARDENING_OPTIONS=""
teor's avatar
teor committed
41
    ## We check asciidoc with distcheck, to make sure we remove doc products
42
    - env: DISTCHECK="yes" ASCIIDOC_OPTIONS=""
teor's avatar
teor committed
43

44
45
46
47
48
49
50
51
  ## 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

teor's avatar
teor committed
52
53
54
55
56
  ## Careful! We use global envs, which makes it hard to exclude or
  ## allow failures by env:
  ## https://docs.travis-ci.com/user/customizing-the-build#matching-jobs-with-allow_failures
  exclude:
    ## Clang doesn't work in containerized builds, see below.
57
    - compiler: clang
teor's avatar
teor committed
58
      sudo: false
59
    ## Non-containerized gcc are slow and redundant.
teor's avatar
teor committed
60
    - compiler: gcc
61
      sudo: required
62
    ## gcc on OSX is less useful, because the default compiler is clang.
63
64
    - compiler: gcc
      os: osx
65
66
67
68
69
    ## gcc on Linux with no env is redundant, because all the custom builds use
    ## gcc on Linux
    - compiler: gcc
      os: linux
      env:
70

teor's avatar
teor committed
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
## We don't need sudo. (The "apt:" stanza after this allows us to not need
## sudo; otherwise, we would need it for getting dependencies.)
##
## But we use "sudo: required" to force non-containerized builds, working
## around a Travis CI environment issue: clang LeakAnalyzer fails
## because it requires ptrace and the containerized environment no
## longer allows ptrace.
## https://github.com/travis-ci/travis-ci/issues/9033
##
## In the matrix above, we exclude redundant combinations.
sudo:
  - false
  - required

## (Linux only) Use the latest Linux image (Ubuntu Trusty)
dist: trusty

## (Linux only) Download our dependencies
addons:
  apt:
    packages:
      ## Required dependencies
      - libevent-dev
      - zlib1g-dev
      ## Optional dependencies
      - libcap-dev
      - libscrypt-dev
      - libseccomp-dev
teor's avatar
teor committed
99
100
101
102
103
104
      ## Conditional dependencies
      ## Always installed, so we don't need sudo
      - asciidoc
      - docbook-xsl
      - docbook-xml
      - xmlto
105

teor's avatar
teor committed
106
107
108
109
110
111
## (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:
teor's avatar
teor committed
112
  ## If we're on OSX, homebrew usually needs to be updated first
teor's avatar
teor committed
113
114
115
116
  - if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then brew update; fi
  ## We might be upgrading some useless packages, but that's better than missing an upgrade
  - if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then brew upgrade; fi

117
install:
teor's avatar
teor committed
118
119
120
  ## If we're on OSX use brew to install ccache (ccache is automatically installed on Linux)
  - if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then brew install ccache; fi
  - if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then export PATH="/usr/local/opt/ccache/libexec:$PATH"; fi
teor's avatar
teor committed
121
122
123
124
125
126
127
128
  ## If we're on OSX use brew to install required dependencies (for Linux, see the "apt:" section above)
  - if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then brew install libevent; fi
  - if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then brew install openssl; fi
  - if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then brew install pkg-config; fi
  ## macOS comes with zlib by default, so the homebrew install is keg-only
  # - if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then brew install zlib; fi
  ## If we're on OSX also install the optional dependencies
  - if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then brew install libscrypt; fi
129
130
  ## 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
teor's avatar
teor committed
131
132
133
  ## Install conditional features
  ## Install coveralls
  - if [[ "$COVERAGE_OPTIONS" != "" ]]; then pip install --user cpp-coveralls; fi
teor's avatar
teor committed
134
135
  ## If we're on OSX, and using asciidoc, install asciidoc
  - if [[ "$ASCIIDOC_OPTIONS" == "" ]] && [[ "$TRAVIS_OS_NAME" == "osx" ]]; then brew install asciidoc; fi
136
  - if [[ "$ASCIIDOC_OPTIONS" == "" ]] && [[ "$TRAVIS_OS_NAME" == "osx" ]]; then brew install xmlto; fi
137
  - if [[ "$ASCIIDOC_OPTIONS" == "" ]] && [[ "$TRAVIS_OS_NAME" == "osx" ]]; then export XML_CATALOG_FILES="/usr/local/etc/xml/catalog"; fi
138
139
140
141
  ##
  ## 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
142
143
144

script:
  - ./autogen.sh
teor's avatar
teor committed
145
  - CONFIGURE_FLAGS="$ASCIIDOC_OPTIONS $COVERAGE_OPTIONS $HARDENING_OPTIONS $OPENSSL_OPTIONS --enable-fatal-warnings --disable-silent-rules"
146
  - echo "Configure flags are $CONFIGURE_FLAGS"
147
  - ./configure $CONFIGURE_FLAGS
148
  ## We run `make check` because that's what https://jenkins.torproject.org does.
149
  - if [[ "$DISTCHECK" == "" ]]; then make check; fi
150
  - if [[ "$DISTCHECK" != "" ]]; then make distcheck DISTCHECK_CONFIGURE_FLAGS="$CONFIGURE_FLAGS"; fi
151

152
after_failure:
teor's avatar
teor committed
153
154
  ## 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.
155
  - tail -1000 config.log || echo "tail failed"
156
  ## `make check` will leave a log file with more details of test failures.
157
  - if [[ "$DISTCHECK" == "" ]]; then cat test-suite.log || echo "cat failed"; fi
158
  ## `make distcheck` puts it somewhere different.
159
  - if [[ "$DISTCHECK" != "" ]]; then make show-distdir-testlog || echo "make failed"; fi
160
161
162
163

after_success:
  ## If this build was one that produced coverage, upload it.
  - if [[ "$COVERAGE_OPTIONS" != "" ]]; then coveralls -b . --exclude src/test --exclude src/trunnel --gcov-options '\-p'; fi
teor's avatar
teor committed
164
165
166
167
168
169
170
171
172
173
174
175
176

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