1#
2# Licensed to the Apache Software Foundation (ASF) under one
3# or more contributor license agreements. See the NOTICE file
4# distributed with this work for additional information
5# regarding copyright ownership. The ASF licenses this file
6# to you under the Apache License, Version 2.0 (the
7# "License"); you may not use this file except in compliance
8# with the License. You may obtain a copy of the License at
9#
10#   http://www.apache.org/licenses/LICENSE-2.0
11#
12# Unless required by applicable law or agreed to in writing,
13# software distributed under the License is distributed on an
14# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15# KIND, either express or implied. See the License for the
16# specific language governing permissions and limitations
17# under the License.
18#
19
20# build Apache Thrift on Travis CI - https://travis-ci.org/
21
22#
23# Docker Integration
24# see: build/docker/README.md
25#
26
27sudo: required
28dist: trusty
29language: cpp
30
31services:
32  - docker
33
34install:
35  - if [[ `uname` == "Linux" ]]; then build/docker/refresh.sh; fi
36
37stages:
38  - docker    # docker images
39  - thrift    # thrift build jobs
40
41env:
42  global:
43    - SCRIPT="cmake.sh"
44    - BUILD_ARG=""
45    - BUILD_ENV="-e CC=gcc -e CXX=g++ -e THRIFT_CROSSTEST_CONCURRENCY=4"
46    - DISTRO=ubuntu-bionic
47    - BUILD_LIBS="CPP C_GLIB HASKELL JAVA PYTHON TESTING TUTORIALS"  # only meaningful for CMake builds
48    - TRAVIS_BUILD_STAGE=test
49    # DOCKER_REPO (this works for all builds as a source for docker images - you can override for fork builds in your Travis settings)
50    - DOCKER_REPO="thrift/thrift-build"
51    # DOCKER_USER (provide in your Travis settings if you want to build and update docker images once, instead of on every job)
52    # DOCKER_PASS (same)
53
54jobs:
55  include:
56    # ========================= stage: docker =========================
57    - stage: docker
58      script: true
59      env:
60        - JOB="Docker Build ubuntu-xenial 16.04 LTS"
61        - DISTRO=ubuntu-xenial
62        - TRAVIS_BUILD_STAGE=docker
63    - script: true
64      env:
65        - JOB="Docker Build ubuntu-bionic 18.04 LTS"
66        - DISTRO=ubuntu-bionic
67        - TRAVIS_BUILD_STAGE=docker
68
69    # ========================= stage: thrift =======================
70    # ------------------------- phase: cross ------------------------
71    - stage: thrift
72      script: build/docker/run.sh
73      env:
74        - JOB="Cross Language Tests (Binary Protocol)"
75        - SCRIPT="cross-test.sh"
76        - BUILD_ARG="-'(binary)'"
77
78    - stage: thrift
79      script: build/docker/run.sh
80      env:
81        - JOB="Cross Language Tests (Header, JSON Protocols)"
82        - SCRIPT="cross-test.sh"
83        - BUILD_ARG="-'(header|json)'"
84
85    - stage: thrift
86      script: build/docker/run.sh
87      env:
88        - JOB="Cross Language Tests (Compact and Multiplexed Protocols)"
89        - SCRIPT="cross-test.sh"
90        - BUILD_ARG="-'(compact|multiplexed)'"
91
92    # ------------------------- phase: sca --------------------------
93    # QA jobs for code analytics and metrics
94    - stage: thrift
95      script: build/docker/run.sh
96      env:
97        - JOB="Static Code Analysis"
98        - SCRIPT="sca.sh"
99
100    # C and C++ undefined behavior.
101    # A binary crashes if undefined behavior occurs and produces a stack trace.
102    # python is disabled, see: THRIFT-4360
103    - script: build/docker/run.sh
104      env:
105        - JOB="UBSan"
106        - SCRIPT="ubsan.sh"
107        - BUILD_ARG="--without-python --without-py3"
108
109    # ------------------------- phase: autotools --------------------
110    # TODO: Remove them once migrated to CMake
111    - script: build/docker/run.sh
112      env:
113        - JOB="Autotools (Ubuntu Bionic)"
114        - SCRIPT="autotools.sh"
115
116    - script: build/docker/run.sh
117      env:
118        - JOB="Autotools (Ubuntu Xenial)"
119        - DISTRO=ubuntu-xenial
120        - SCRIPT="autotools.sh"
121
122    # ------------------------- phase: cmake ------------------------
123    - script: build/docker/run.sh
124      env:
125        - JOB="CMake"
126        - BUILD_ARG="-DCMAKE_BUILD_TYPE=Debug"
127
128    - script: build/docker/run.sh
129      env:
130        - JOB="CMake"
131        - BUILD_ARG="-DCMAKE_BUILD_TYPE=Release"
132
133    # ------------------------- phase: dist -------------------------
134    - script: build/docker/run.sh
135      env:
136        - JOB="make dist"
137        - SCRIPT="make-dist.sh"
138
139    - script: build/docker/run.sh
140      env:
141        - JOB="Debian Packages"
142        - SCRIPT="dpkg.sh"
143
144    # ------------------------- phase: coverity ---------------------
145    # We build the coverity scan build once monthly using a travis cron job
146    - if: (env(COVERITY_SCAN_NOTIFICATION_EMAIL) IS present) AND (branch IN (master)) AND (type IN (cron))
147      script: build/docker/run.sh
148      env:
149        - JOB="Coverity Scan"
150        - SCRIPT="covscan.sh"
151
152    # ------------------------- phase: swift ------------------------
153    # We lint the podspec
154    - os: osx
155      osx_image: xcode10.1
156      language: swift
157      script:
158        - gem update cocoapods
159        - pod lib lint --allow-warnings --swift-version=3
160      env:
161        - JOB="pod lib lint"
162
163    - os: osx
164      osx_image: xcode10.2
165      language: swift
166      script:
167        - gem update cocoapods
168        - pod lib lint --allow-warnings --swift-version=4.0
169        - pod lib lint --allow-warnings --swift-version=4.2
170        - pod lib lint --allow-warnings --swift-version=5.0
171      env:
172        - JOB="pod lib lint"
173
174  ### ------------------------- phase: osx --------------------------
175  # disabled due to the time delays it imposes on build jobs
176  # - os: osx
177  #   osx_image: xcode9
178  #   script: build/docker/scripts/autotools.sh
179
180