summaryrefslogtreecommitdiff
path: root/.travis.yml
blob: 9d26ec83fde3df15426a8c073461c8f5286ae851 (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
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
#=============================================================================
# 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'
      sudo: required
      os: linux
      language: python
      env: TEST_SUITE=flake8
    - stage: 'unit tests + documentation'
      python: '2.6'
      sudo: required
      os: linux
      language: python
      env: TEST_SUITE=unit
    - python: '2.7'
      sudo: required
      os: linux
      language: python
      env: TEST_SUITE=unit
    - python: '3.4'
      sudo: required
      os: linux
      language: python
      env: TEST_SUITE=unit
    - python: '3.5'
      sudo: required
      os: linux
      language: python
      env: TEST_SUITE=unit
    - python: '3.6'
      sudo: required
      os: linux
      language: python
      env: TEST_SUITE=unit
    - python: '3.7'
      sudo: required
      os: linux
      dist: xenial
      language: python
      env: TEST_SUITE=unit
    - python: '3.6'
      sudo: required
      os: linux
      language: python
      env: TEST_SUITE=doc
    - 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' ]
    - stage: 'docker build'
      sudo: required
      os: linux
      language: generic
      env: TEST_SUITE=docker
  allow_failures:
    - dist: xenial
    - env: TEST_SUITE=docker
    # temporary Python 2.6 exception while we figure out why Travis is hanging
    - python: '2.6'

stages:
  - 'style checks'
  - 'unit tests + documentation'
  - 'build tests'
  - name: 'docker build'
    if: type = push AND branch IN (develop, master)


#=============================================================================
# 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 python@2 > /dev/null || brew install python@2;
        brew ls --versions gcc      > /dev/null || brew install gcc;
        brew ls --versions gnupg2   > /dev/null || brew install gnupg2;
        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 deps for build tests, b/c they take too long to compile
  - if [[ "$TEST_SUITE" == "build" ]]; then cp
        share/spack/qa/configuration/packages.yaml etc/spack/packages.yaml;
    fi

#=============================================================================
# Building
#=============================================================================
services:
  - docker

script:
  - share/spack/qa/run-$TEST_SUITE-tests
  - if [[ "$TEST_SUITE" == "docker build" ]]; then
        login_attempted=0; login_success=0;
        for config in share/spack/docker/config/* ; do
            source "$config" ;
            ./share/spack/docker/build-image.sh;
            if [ "$TRAVIS_EVENT_TYPE" != "pull_request" ]; then
                if [ "$login_attempted" '=' '0' ]; then
                    if echo "$DOCKER_PASSWORD" | docker login -u "$DOCKER_USERNAME" --password-stdin; then
                        login_success=1;
                    fi;
                    login_attempted=1;
                fi;
                if [ "$login_success" '=' '1' ]; then
                    ./share/spack/docker/push-image.sh;
                fi
            fi
        done;
    fi
  - 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