forked from FreeCAD/FreeCAD
-
Notifications
You must be signed in to change notification settings - Fork 0
/
.travis.yml
executable file
·260 lines (231 loc) · 10.9 KB
/
.travis.yml
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
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
####
# Travis-CI configuration file for FreeCAD.
#
# This build configuration will build and test FreeCAD on both Linux
# and Mac OS X. For Mac OS X, this configuration will also package
# and deploy the build to GitHub provided the following prerequisites
# are satisfied:
#
# GH_TOKEN is defined as a secure environment variable and contains a
# a valid GitHub OAUTH token with repo_deployment scope.
# NOTE: Define this env using the Travis-CI Repo Settings UI
#
# FREECAD_RELEASE: A GitHub Release with this identifier exists in the
# repo. The Travis job will deploy the OS X build to this
# GitHub release name as a release asset.
#
# DEPLOY: Repo setting to deploy (defaults to no deploy to reduce
# Travis build times. Set DEPLOY=1 to enable in repo settings.
##
env:
global:
- FREECAD_RELEASE="0.17"
- DEPLOY_RELEASE=${DEPLOY_RELEASE:-$FREECAD_RELEASE}
- CMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE:-Release}
- OSX_PORTS_CACHE=${OSX_PORTS_CACHE:-FreeCAD/FreeCAD-ports-cache}
- DEPLOY=${DEPLOY:-0}
cache:
ccache: true
language: cpp
python:
- 2.7
- 3.4
# Inject osx build into matrix - needed to specify image/dist
matrix:
include:
- os: linux
dist: trusty
compiler: clang
env:
- CMAKE_OPTS="-DBUILD_FEM_NETGEN=ON"
- PYTHON_MAJOR_VERSION=2
- os: linux
dist: trusty
compiler: gcc
env:
- CMAKE_OPTS="-DBUILD_FEM_NETGEN=ON"
- PYTHON_MAJOR_VERSION=2
- os: linux
dist: trusty
compiler: gcc
env:
- CMAKE_OPTS="-DBUILD_FEM_NETGEN=ON"
- PYTHON_MAJOR_VERSION=3
- os: osx
osx_image: xcode6.4
compiler: clang
env:
- CMAKE_OPTS="-DBUILD_FEM_NETGEN=ON" QT=Qt5
- PYTHON_MAJOR_VERSION=2
- os: osx
osx_image: xcode6.4
compiler: clang
env:
- CMAKE_OPTS="-DBUILD_FEM_NETGEN=ON" QT=Qt4
- PYTHON_MAJOR_VERSION=2
git:
depth: 5000
notifications:
email: false
webhooks:
urls:
- https://webhooks.gitter.im/e/479456663cdf5c84e4d8
on_success: always
on_failure: always
on_start: change
before_install:
- eval "$(curl -fsSL "https://raw.githubusercontent.com/${OSX_PORTS_CACHE}/v${FREECAD_RELEASE}/travis-helpers.sh")"
- |
case "${TRAVIS_OS_NAME}" in
"linux")
sudo apt-get update -qq
sudo apt-get install -y doxygen \
libboost1.55-dev \
libboost-filesystem1.55-dev \
libboost-program-options1.55-dev \
libboost-python1.55-dev \
libboost-regex1.55-dev \
libboost-signals1.55-dev \
libboost-system1.55-dev \
libboost-thread1.55-dev \
libcoin80 \
libcoin80-dev \
liboce-foundation-dev \
liboce-modeling-dev \
liboce-ocaf-dev \
liboce-ocaf-lite-dev \
liboce-visualization-dev \
libpyside-dev \
libqtcore4 \
libshiboken-dev \
libxerces-c-dev \
libxmu-dev \
libxmu-headers \
libxmu6 \
libxmuu-dev \
libxmuu1 \
netgen \
netgen-headers \
oce-draw \
pyside-tools \
python-dev \
python-pyside \
python-matplotlib \
python3-dev \
python3-pyside \
python3-matplotlib \
qt4-dev-tools \
qt4-qmake \
libqt4-opengl-dev \
shiboken \
swig \
libvtk6-dev \
libmed-dev \
libmedc-dev \
asciidoc
#Install Eigen 3.3.3 to reduce compiler warnings
curl -L "http://bitbucket.org/eigen/eigen/get/3.3.3.tar.gz" | tar xvz && cd eigen-*
mkdir build && cd build
cmake -DCMAKE_C_FLAGS_RELEASE=-DNDEBUG -DCMAKE_CXX_FLAGS_RELEASE=-DNDEBUG -DCMAKE_BUILD_TYPE=Release -DCMAKE_VERBOSE_MAKEFILE=ON ..
sudo make -j2 install
cd ${TRAVIS_BUILD_DIR}
#Install ccache to reduce successive build times (use 3.2.5+ to avoid spurious warnings)
curl -L "https://codeload.github.com/ccache/ccache/tar.gz/v3.2.5" | tar xvz && cd ccache-*
./autogen.sh && ./configure CC=gcc && sudo make install
cd ${TRAVIS_BUILD_DIR}
#Patch the system - there is a bug related to invalid location of libs on ubuntu 12.04
sudo ln -s /usr/lib/x86_64-linux-gnu/ /usr/lib/i386-linux-gnu
sudo find /usr/lib -name libpq.so -exec ln -s {} /usr/lib/libpq.so ';'
export DISPLAY=:99.0
sh -e /etc/init.d/xvfb start
export CCACHE_CPP2=YES
if [[ ${PYTHON_MAJOR_VERSION} == 2 ]]
then
export CMAKE_ARGS="${CMAKE_OPTS} -DPYTHON_EXECUTABLE=/usr/bin/python"
else
export CMAKE_ARGS="${CMAKE_OPTS} -DPYTHON_EXECUTABLE=/usr/bin/python3.4 -DPYTHON_BASENAME=.cpython-34m \
-DPYTHON_SUFFIX=.cpython-34m"
fi
export INSTALLED_APP_PATH="/usr/local/bin/FreeCAD"
;;
"osx")
xcodebuild -version -sdk
brew --config
if [ "${OSX_PORTS_CACHE}X" != "X" ]; then
brew install jq
cacheContext=$(create_helper_context repo=${OSX_PORTS_CACHE} auth_token=${GH_TOKEN} release=${FREECAD_RELEASE})
travis_wait prime_local_ports_cache $cacheContext
fi
brew update >/dev/null
brew --config
brew tap FreeCAD/freecad
if [ "${QT}" == "Qt4" ]; then
# Qt4: Replace Qt5 from ports-cache with Qt4, if necessary
brew ls --versions [email protected] > /dev/null && \
brew uninstall --ignore-dependencies --force shiboken pyside pyside-tools [email protected]
brew tap cartr/qt4
brew install --verbose --only-dependencies freecad --with-qt4 --with-packaging-utils
brew install --verbose --only-dependencies freecad --with-qt4 --with-packaging-utils #Ensure all dependencies are satisfied
elif [ "${QT}" == "Qt5" ]; then
# Qt5: Replace Qt4 in ports-cache with Qt5, if necessary
brew ls --versions cartr/qt4/qt > /dev/null && \
brew uninstall --ignore-dependencies --force cartr/qt4/[email protected] cartr/qt4/[email protected] cartr/qt4/[email protected] cartr/qt4/qt
brew install --verbose --only-dependencies freecad --with-packaging-utils
brew install --verbose --only-dependencies freecad --with-packaging-utils #Ensure all dependencies are satisfied
# Qt5: Set Qt5 build flag and CMAKE_PREFIX
QT5_CMAKE_PREFIX=$(ls -d $(brew list -1 | grep qt | tail -1 | xargs brew --cellar)/*/lib/cmake)
CMAKE_OPTS="${CMAKE_OPTS} -DBUILD_QT5=ON -DCMAKE_PREFIX_PATH=${QT5_CMAKE_PREFIX}"
fi
#Install the 3DConnexion frameworks
if [ "${DEPLOY}" == "1" ]; then
if [ ! -d /Library/Frameworks/3DconnexionClient.framework ]; then
curl -o /tmp/3dFW.dmg -L 'http://www.3dconnexion.com/index.php?eID=sdl&ext=tx_iccsoftware&oid=a273bdbc-c289-e10d-816b-567043331c9e&filename=3DxWareMac_v10-4-1_r2428.dmg'
hdiutil attach -readonly /tmp/3dFW.dmg
sudo installer -package /Volumes/3Dconnexion\ Software/Install\ 3Dconnexion\ software.pkg -target /
diskutil eject /Volumes/3Dconnexion\ Software
fi
export CMAKE_OPTS="${CMAKE_OPTS} -DFREECAD_CREATE_MAC_APP=ON"
export INSTALLED_APP_PATH="/usr/local/FreeCAD.app/Contents/MacOS/FreeCAD"
else
export INSTALLED_APP_PATH="/usr/local/MacOS/FreeCAD"
fi
export CMAKE_ARGS="${CMAKE_OPTS} -DFREECAD_USE_EXTERNAL_KDL=ON -DEIGEN3_INCLUDE_DIR=$(brew --prefix [email protected])/include/eigen3"
;;
*)
echo "Invalid or unsupported operating system ${TRAVIS_OS_NAME}"
exit 1
;;
esac
install:
####
# Build FreeCAD with cmake options set above for each platform
##
- mkdir build && cd build && cmake ${CMAKE_ARGS} -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} ../
script:
####
# Install FreeCAD and run unit tests. Test failures will fail the build
##
- sudo make -j2 install
- ${INSTALLED_APP_PATH} --run-test 0
- ${INSTALLED_APP_PATH} --log-file /tmp/FreeCAD_installed.log &
- sleep 10 && pkill FreeCAD
- cat /tmp/FreeCAD_installed.log
- grep --file=../.log_errors /tmp/FreeCAD_installed.log ; [ $? == 1 ] && echo "No errors from .log_errors file found in the log after start from /usr/local/bin" || ( echo "Error from .log_errors found!" && false )
after_success:
####
# Package and deploy the build to GitHub. This will only run for builds on
# master (i.e. pull requests are only built and tested but not deployed).
#
# GH_TOKEN must be set in order to deploy releases to GitHub
##
- |
if [ "${TRAVIS_OS_NAME}" == "osx" -a "${TRAVIS_PULL_REQUEST}" == "false" -a "${DEPLOY}" == "1" ]; then
brew ls --versions jq || brew install jq
npm install -g appdmg
export VSN=$(python ${TRAVIS_BUILD_DIR}/src/Tools/ArchiveNameFromVersionHeader.py ${TRAVIS_BUILD_DIR}/build/src/Build/Version.h)
export DEPLOYMENT_ARCHIVE=${VSN}-${QT}.dmg
appdmg ${TRAVIS_BUILD_DIR}/src/MacAppBundle/DiskImage/layout.json "${DEPLOYMENT_ARCHIVE}"
deployContext=$(create_helper_context repo=${TRAVIS_REPO_SLUG} auth_token=${GH_TOKEN} release=${DEPLOY_RELEASE})
gitHub_deploy_asset_to_release_named $deployContext ${DEPLOYMENT_ARCHIVE}
gitHub_prune_assets_for_release_named $deployContext "-${QT}" 1
fi