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

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

dist: bionic

jobs:
  fast_finish: true
  include:
    - stage: 'style checks'
      python: '3.8'
      os: linux
      language: python
      env: TEST_SUITE=flake8
    - stage: 'unit tests + documentation'
      python: '2.6'
      dist: trusty
      os: linux
      language: python
      addons:
        apt:
          # Everything but patchelf, that is not available for trusty
          packages:
            - ccache
            - gfortran
            - graphviz
            - gnupg2
            - kcov
            - mercurial
            - ninja-build
            - realpath
            - zsh
      env: [ TEST_SUITE=unit, COVERAGE=true ]
    - python: '3.8'
      os: linux
      language: python
      env: [ TEST_SUITE=shell, COVERAGE=true, KCOV_VERSION=38 ]
    - python: '3.8'
      os: linux
      language: python
      env: TEST_SUITE=doc

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


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

# Docs need graphviz to build
addons:
  # for Linux builds, we use APT
  apt:
    packages:
      - ccache
      - coreutils
      - gfortran
      - graphviz
      - gnupg2
      - mercurial
      - ninja-build
      - patchelf
      - zsh
    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

before_install:
  - ccache -M 2G && ccache -z
  # Install kcov manually, since it's not packaged for bionic beaver
  - if [[ "$KCOV_VERSION" ]]; then
        sudo apt-get -y install cmake binutils-dev libcurl4-openssl-dev zlib1g-dev libdw-dev libiberty-dev;
        KCOV_ROOT=$(mktemp -d);
        wget --output-document=${KCOV_ROOT}/${KCOV_VERSION}.tar.gz https://github.com/SimonKagstrom/kcov/archive/v${KCOV_VERSION}.tar.gz;
        tar -C ${KCOV_ROOT} -xzvf ${KCOV_ROOT}/${KCOV_VERSION}.tar.gz;
        mkdir -p ${KCOV_ROOT}/build;
        cd ${KCOV_ROOT}/build && cmake -Wno-dev ${KCOV_ROOT}/kcov-${KCOV_VERSION} && cd - ;
        make -C ${KCOV_ROOT}/build && sudo  make -C ${KCOV_ROOT}/build install;
    fi

# 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
            ;;
        shell)
            codecov --env PYTHON_VERSION
            --required
            --flags "${TEST_SUITE}${TRAVIS_OS_NAME}";
    esac

#=============================================================================
# Notifications
#=============================================================================
notifications:
  email:
    recipients:
    - tgamblin@llnl.gov
    - massimiliano.culpo@gmail.com
    on_success: change
    on_failure: always