summaryrefslogtreecommitdiff
path: root/.travis.yml
blob: 86b9f4d3dbb91c9c2c7e0ee2eedecc7b1e8bfc72 (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
#=============================================================================
# Project settings
#=============================================================================
# Only build master and develop on push; do not build every branch.
branches:
  only:
    - master
    - develop
    - /^releases\/.*$/

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

dist: xenial

jobs:
  fast_finish: true
  include:
    - stage: 'style checks'
      python: '3.8'
      os: linux
      language: python
      env: TEST_SUITE=flake8
# Shell integration with module files
    - python: '3.8'
      os: linux
      language: python
      env: [ TEST_SUITE=bootstrap ]
    - stage: 'unit tests + documentation'
      python: '2.6'
      dist: trusty
      os: linux
      language: python
      env: [ TEST_SUITE=unit, COVERAGE=true ]
    - python: '2.7'
      os: linux
      language: python
      env: [ TEST_SUITE=unit, COVERAGE=true ]
    - 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
      language: python
      env: TEST_SUITE=unit
    - python: '3.8'
      os: linux
      language: python
      env: [ TEST_SUITE=unit, COVERAGE=true ]
    - python: '3.8'
      os: linux
      language: python
      env: TEST_SUITE=doc
    - os: osx
      language: generic
      env: [ TEST_SUITE=unit, PYTHON_VERSION=2.7, COVERAGE=true ]
      if: type != pull_request

stages:
  - 'style checks'
  - 'unit tests + documentation'


#=============================================================================
# Environment
#=============================================================================

# Docs need graphviz to build
addons:
  # for Linux builds, we use APT
  apt:
    packages:
      - ccache
      - cmake
      - gfortran
      - graphviz
      - gnupg2
      - kcov
      - mercurial
      - ninja-build
      - perl
      - perl-base
      - realpath
      - r-base
      - r-base-core
      - r-base-dev
      - zsh
  # for Mac builds, we use Homebrew
  homebrew:
    packages:
      - python@2
      - gcc
      - gnupg2
      - ccache
      - dash
      - kcov
    update: true

# ~/.ccache needs to be cached directly as Travis is not taking care of it
# (possibly because we use 'language: python' and not 'language: c')
cache:
  pip: true
  ccache: true
  directories:
    - ~/.ccache

# Work around Travis's lack of support for Python on OSX
before_install:
  - if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then
        pip2 install --upgrade pip;
        pip2 install virtualenv;
        virtualenv venv;
        source venv/bin/activate;
    fi
  - ccache -M 2G && ccache -z

# Install various dependencies
install:
  - pip install --upgrade pip
  - pip install --upgrade six
  - pip install --upgrade setuptools
  - pip install --upgrade codecov coverage==4.5.4
  - 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 ${TRAVIS_BRANCH}:${TRAVIS_BRANCH}

#=============================================================================
# Building
#=============================================================================
script:
  - share/spack/qa/run-$TEST_SUITE-tests

after_success:
  - ccache -s
  - case "$TEST_SUITE" in
        unit)
            if [[ "$COVERAGE" == "true" ]]; then
                codecov --env PYTHON_VERSION
                        --required
                        --flags "${TEST_SUITE}${TRAVIS_OS_NAME}";
            fi
            ;;
    esac

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