summaryrefslogtreecommitdiff
path: root/.travis.yml
blob: d5242f5ca9539c4b95751b0a19f13e7bafc9c913 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
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
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
#=============================================================================
# Project settings
#=============================================================================
# Only build master and develop on push; do not build every branch.
branches:
  only:
    - master
    - develop
    - /^releases\/.*$/

#=============================================================================
# Build matrix
#=============================================================================

# Adding the keyword dist to permit an `allow_failures` section
# under `matrix.include`. More information here:
#
# https://docs.travis-ci.com/user/customizing-the-build/#Rows-that-are-Allowed-to-Fail
dist: trusty

jobs:
  fast_finish: true
  include:
    - stage: 'style checks'
      python: '2.7'
      os: linux
      language: python
      env: TEST_SUITE=flake8
    - stage: 'unit tests + documentation'
      python: '2.6'
      os: linux
      language: python
      env: TEST_SUITE=unit
    - python: '2.7'
      os: linux
      language: python
      env: TEST_SUITE=unit
    - python: '3.4'
      os: linux
      language: python
      env: TEST_SUITE=unit
    - python: '3.5'
      os: linux
      language: python
      env: TEST_SUITE=unit
    - python: '3.6'
      os: linux
      language: python
      env: TEST_SUITE=unit
    - python: '3.7'
      os: linux
      dist: xenial
      sudo: true
      language: python
      env: TEST_SUITE=unit
    - python: '3.6'
      os: linux
      language: python
      env: TEST_SUITE=doc
    - stage: 'unit tests - osx'
      os: osx
      language: generic
      env: [ TEST_SUITE=unit, PYTHON_VERSION=2.7 ]
# mpich (AutotoolsPackage)
    - stage: 'build tests'
      python: '2.7'
      os: linux
      language: python
      env: [ TEST_SUITE=build, 'SPEC=mpich' ]
# astyle (MakefilePackage)
    - python: '2.7'
      os: linux
      language: python
      env: [ TEST_SUITE=build, 'SPEC=astyle' ]
# tut (WafPackage)
    - python: '2.7'
      os: linux
      language: python
      env: [ TEST_SUITE=build, 'SPEC=tut' ]
# py-setuptools (PythonPackage)
    - python: '2.7'
      os: linux
      language: python
      env: [ TEST_SUITE=build, 'SPEC=py-setuptools' ]
# perl-dbi (PerlPackage)
#    - python: '2.7'
#      os: linux
#      language: python
#      env: [ TEST_SUITE=build, 'SPEC=perl-dbi' ]
# openjpeg (CMakePackage + external cmake)
    - python: '2.7'
      os: linux
      language: python
      env: [ TEST_SUITE=build, 'SPEC=openjpeg' ]
# r-rcpp (RPackage + external R)
    - python: '2.7'
      os: linux
      language: python
      env: [ TEST_SUITE=build, 'SPEC=r-rcpp' ]
# mpich (AutotoolsPackage)
    - python: '3.6'
      os: linux
      language: python
      env: [ TEST_SUITE=build, 'SPEC=mpich' ]
  allow_failures:
    - dist: xenial

stages:
  - 'style checks'
  - 'unit tests + documentation'
  - 'build tests'
  - name: 'unit tests - osx'
    if: type IN (cron)


#=============================================================================
# Environment
#=============================================================================
# Use new Travis infrastructure (Docker can't sudo yet)
sudo: false

# Docs need graphviz to build
addons:
  apt:
    packages:
      - gfortran
      - mercurial
      - graphviz
      - gnupg2
      - cmake
      - ninja-build
      - r-base
      - r-base-core
      - r-base-dev
      - perl
      - perl-base

cache:
  pip: true
  directories:
    - ~/.mirror

# Work around Travis's lack of support for Python on OSX
before_install:
  - if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then
        brew update;
        export HOMEBREW_NO_AUTO_UPDATE=1;
        rm /usr/local/include/c++ ;
        brew ls --versions gcc    > /dev/null || brew install gcc;
        brew ls --versions gnupg2 > /dev/null || brew install gnupg2;
        brew install python@2;
        pip2 install --upgrade pip;
        pip2 install virtualenv;
        virtualenv venv;
        source venv/bin/activate;
    fi

# Install various dependencies
install:
  - pip install --upgrade pip
  - pip install --upgrade six
  - pip install --upgrade setuptools
  - pip install --upgrade codecov
  - pip install --upgrade flake8
  - pip install --upgrade pep8-naming
  - if [[ "$TEST_SUITE" == "doc" ]]; then pip install --upgrade -r lib/spack/docs/requirements.txt; fi

before_script:
  # Need this for the git tests to succeed.
  - git config --global user.email "spack@example.com"
  - git config --global user.name "Test User"

  # Need this to be able to compute the list of changed files
  - git fetch origin develop:develop

  # Set up external dependencies for build tests, because the take too long to compile
  - if [[ "$TEST_SUITE" == "build" ]]; then cp share/spack/qa/configuration/packages.yaml etc/spack/packages.yaml; fi

#=============================================================================
# Building
#=============================================================================
script:
  - share/spack/qa/run-$TEST_SUITE-tests
  - if [[ "$TEST_SUITE" == "unit" || "$TEST_SUITE" == "build" ]]; then codecov --env PYTHON_VERSION --required --flags "${TEST_SUITE}${TRAVIS_OS_NAME}"; fi

#=============================================================================
# Notifications
#=============================================================================
notifications:
  email:
    recipients: tgamblin@llnl.gov
    on_success: change
    on_failure: always