aboutsummaryrefslogtreecommitdiff
path: root/.travis.yml
blob: 42fa653d8cfb744149283f852cb69f317471dcae (plain)
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
# Travis caches can be manually removed if necessary. This is one of the very
# few manual operations that is possible with Travis, and it can be done by a
# Bitcoin Core GitHub member via the Travis web interface [0].
#
# Travis CI uploads the cache after the script phase of the build [1].
# However, the build is terminated without saving the cache if it takes over
# 50 minutes [2]. Thus, if we spent too much time in early build stages, fail
# with an error and save the cache.
#
# [0] https://travis-ci.org/bitcoin/bitcoin/caches
# [1] https://docs.travis-ci.com/user/caching/#build-phases
# [2] https://docs.travis-ci.com/user/customizing-the-build#build-timeouts

version: ~> 1.0

dist: bionic
os: linux
language: minimal
arch: amd64
cache:
  directories:
    - $TRAVIS_BUILD_DIR/depends/built
    - $TRAVIS_BUILD_DIR/depends/sdk-sources
    - $TRAVIS_BUILD_DIR/ci/scratch/.ccache
    - $TRAVIS_BUILD_DIR/releases/$HOST
stages:
  - lint
  - test
env:
  global:
    - CI_RETRY_EXE="travis_retry"
    - CACHE_ERR_MSG="Error! Initial build successful, but not enough time remains to run later build stages and tests. See https://docs.travis-ci.com/user/customizing-the-build#build-timeouts . Please manually re-run this job by using the travis restart button. The next run should not time out because the build cache has been saved."
before_install:
  - set -o errexit; source ./ci/test/00_setup_env.sh
  - set -o errexit; source ./ci/test/03_before_install.sh
install:
  - set -o errexit; source ./ci/test/04_install.sh
before_script:
  # Temporary workaround for https://github.com/bitcoin/bitcoin/issues/16368
  - for i in {1..4}; do echo "$(sleep 500)" ; done &
  - set -o errexit; source ./ci/test/05_before_script.sh &> "/dev/null"
script:
  - export CONTINUE=1
  - if [ $SECONDS -gt 1200 ]; then export CONTINUE=0; fi  # Likely the depends build took very long
  - if [ $TRAVIS_REPO_SLUG = "bitcoin/bitcoin" ]; then export CONTINUE=1; fi  # continue on repos with extended build time (90 minutes)
  - if [ $CONTINUE = "1" ]; then set -o errexit; source ./ci/test/06_script_a.sh; else set +o errexit; echo "$CACHE_ERR_MSG"; false; fi
  - if [[ $SECONDS -gt 50*60-$EXPECTED_TESTS_DURATION_IN_SECONDS ]]; then export CONTINUE=0; fi
  - if [ $TRAVIS_REPO_SLUG = "bitcoin/bitcoin" ]; then export CONTINUE=1; fi  # continue on repos with extended build time (90 minutes)
  - if [ $CONTINUE = "1" ]; then set -o errexit; source ./ci/test/06_script_b.sh; else set +o errexit; echo "$CACHE_ERR_MSG"; false; fi
after_script:
  - echo $TRAVIS_COMMIT_RANGE
jobs:
  include:

    - stage: lint
      name: 'lint'
      env:
      cache: pip
      language: python
      python: '3.5' # Oldest supported version according to doc/dependencies.md
      install:
        - set -o errexit; source ./ci/lint/04_install.sh
      before_script:
        - set -o errexit; source ./ci/lint/05_before_script.sh
      script:
        - set -o errexit; source ./ci/lint/06_script.sh

    - stage: test
      name: 'ARM  [GOAL: install]  [buster]  [unit tests, no functional tests]'
      arch: arm64  # Can disable QEMU_USER_CMD and run the tests natively without qemu
      env: >-
        FILE_ENV="./ci/test/00_setup_env_arm.sh"
        QEMU_USER_CMD=""

    - stage: test
      name: 'S390x  [GOAL: install]  [buster]  [unit tests, functional tests]'
      arch: s390x  # Can disable QEMU_USER_CMD and run the tests natively without qemu
      env: >-
        FILE_ENV="./ci/test/00_setup_env_s390x.sh"
        QEMU_USER_CMD=""

    - stage: test
      name: 'Win64  [GOAL: deploy]  [unit tests, no gui, no boost::process, no functional tests]'
      env: >-
        FILE_ENV="./ci/test/00_setup_env_win64.sh"

    - stage: test
      name: '32-bit + dash  [GOAL: install]  [CentOS 7]  [gui]'
      env: >-
        FILE_ENV="./ci/test/00_setup_env_i686_centos.sh"

    - stage: test
      name: 'x86_64 Linux  [GOAL: install]  [bionic]  [C++17, previous releases, uses qt5 dev package and some depends packages] [unsigned char]'
      env: >-
        FILE_ENV="./ci/test/00_setup_env_native_qt5.sh"

    - stage: test
      name: 'x86_64 Linux  [GOAL: install]  [focal]  [depends, sanitizers: memory (MSan)]'
      env: >-
        FILE_ENV="./ci/test/00_setup_env_native_msan.sh"

    - stage: test
      name: 'x86_64 Linux  [GOAL: install]  [focal]  [no depends, only system libs, sanitizers: fuzzer,address,undefined]'
      env: >-
        FILE_ENV="./ci/test/00_setup_env_native_fuzz.sh"

    - stage: test
      name: 'x86_64 Linux [GOAL: install]  [focal]  [multiprocess]'
      env: >-
        FILE_ENV="./ci/test/00_setup_env_native_multiprocess.sh"

    - stage: test
      name: 'x86_64 Linux  [GOAL: install]  [xenial]  [no wallet]'
      env: >-
        FILE_ENV="./ci/test/00_setup_env_native_nowallet.sh"

    - stage: test
      name: 'macOS 10.12  [GOAL: deploy] [no functional tests]'
      env: >-
        FILE_ENV="./ci/test/00_setup_env_mac.sh"

    - stage: test
      name: 'macOS 10.14 native [GOAL: install] [GUI] [no depends]'
      os: osx
      # Use the most recent version:
      # Xcode 11.3.1, macOS 10.14, SDK 10.15
      # https://docs.travis-ci.com/user/reference/osx/#macos-version
      osx_image: xcode11.3
      addons:
        homebrew:
          packages:
          - berkeley-db4
          - miniupnpc
          - qrencode
          - sqlite
          - ccache
          - zeromq
      env: >-
        DANGER_RUN_CI_ON_HOST=true
        CI_USE_APT_INSTALL=no
        FILE_ENV="./ci/test/00_setup_env_mac_host.sh"