Each build job should now have an unique cache entry. This should increase the reliability and success rate for build jobs, when the maximum time limit is exceeded.
336 lines
15 KiB
YAML
Executable File
336 lines
15 KiB
YAML
Executable File
####
|
|
# 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.18"
|
|
- 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}
|
|
- GENERATOR="Unix Makefiles"
|
|
matrix:
|
|
# chunk.io key (if needed, obtain it with Yorik, PrzemoF, Kunda1)
|
|
secure: MJu0ZU/9Yqut6bUkHoSrXTV/c/WhCLR0KnHKCsnEU081PYoukzH6ngzgKk7/trAH2In080d/ra4B2OmTNl/LAgV6DXKFY9dO1aG8QwcrHgaMPf0pHYUy/OfwQSFYFByQDV2OEMAHcIWc/dtNkzK2QUi44Kn7d0GtSEiN4s816lriWtjg0vmEGAU8MjvcAGss4gKyn05Xm1NUCYPKgpgIHsywLbpE76lv0eOYoosEuKv5Q9Pb4FMQts02+JUlqE8eY4ZZ3nV8iQbgIDdseOSA7Ixn05zWjU/ZRZ74TrYxMnzfUAwQcJe9OcqoESq+pPWQt5HYG66VmeVxQim1gmsiDASH51U/nswKt0Q4bISj3tVk0YZMFV8Ax+SzPvLEmFZJQGfgO1mg7HdNcz9N9G5JHPawrV19DwYIEFbAw8MCSAoIXFOcPQZUWXCbtjm7NO9vCjMrqyVJMDD9L8omvQajHoajuHbOT8KB250gFokeLj3z8yu++Tz+IrZX5inUMrXsARVt/ALXpi8rJPXmoFMpMUjyWmDPqPWlnqUhLtTtEtKpuOWP8ZnWVwkg4QYOUhCy95C1okJSGkG+ylHWncWfY4mS+UBT525laoh+GOhH+sRW+p2xkI21xGFRqg1oHjjgY1yIYF6nnSHPzxMBRYmZwagyXsjkFG5FPMWR2oYk0Yg
|
|
cache:
|
|
ccache: true
|
|
directories:
|
|
- $HOME/.ccache
|
|
|
|
language: cpp
|
|
python:
|
|
- 2.7
|
|
- 3.6
|
|
|
|
# Inject osx build into matrix - needed to specify image/dist
|
|
matrix:
|
|
# allow_failures:
|
|
# - python: 3.7
|
|
fast_finish: true # https://blog.travis-ci.com/2013-11-27-fast-finishing-builds
|
|
include:
|
|
- os: linux
|
|
dist: bionic
|
|
compiler: clang
|
|
addons:
|
|
apt:
|
|
sources:
|
|
- sourceline: 'ppa:ubuntu-toolchain-r/test'
|
|
- sourceline: 'deb http://apt.llvm.org/bionic/ llvm-toolchain-bionic-9 main'
|
|
key_url: 'https://apt.llvm.org/llvm-snapshot.gpg.key'
|
|
packages:
|
|
- clang-9
|
|
env:
|
|
- CC=clang-9
|
|
- CXX=clang++-9
|
|
- CMAKE_OPTS="-DPYTHON_EXECUTABLE=/usr/bin/python3 -DBUILD_FEM_NETGEN=ON -DBUILD_QT5=ON"
|
|
- PYTHON_MAJOR_VERSION=3
|
|
- CACHE_NAME=JOB1
|
|
|
|
# - os: linux
|
|
# dist: bionic
|
|
# compiler: gcc
|
|
# addons:
|
|
# apt:
|
|
# sources:
|
|
# - sourceline: 'ppa:ubuntu-toolchain-r/test'
|
|
# packages:
|
|
# - gcc-9
|
|
# - g++-9
|
|
# env:
|
|
# - CC=gcc-9
|
|
# - CXX=g++-9
|
|
# - CMAKE_OPTS="-DPYTHON_EXECUTABLE=/usr/bin/python3 -DBUILD_FEM_NETGEN=ON -DBUILD_QT5=ON"
|
|
# - PYTHON_MAJOR_VERSION=3
|
|
# - CACHE_NAME=JOB2
|
|
|
|
- os: linux
|
|
dist: bionic
|
|
compiler: gcc
|
|
env:
|
|
- CMAKE_OPTS="-DPYTHON_EXECUTABLE=/usr/bin/python3 -DBUILD_FEM_NETGEN=ON -DBUILD_QT5=ON"
|
|
- PYTHON_MAJOR_VERSION=3
|
|
- CACHE_NAME=JOB3
|
|
|
|
- os: linux
|
|
dist: bionic
|
|
compiler: gcc
|
|
env:
|
|
- PYTHON_MAJOR_VERSION=2
|
|
- CACHE_NAME=JOB4
|
|
|
|
- os: windows
|
|
language: cpp
|
|
filter_secrets: false
|
|
env:
|
|
- CMAKE_OPTS="-DBUILD_FEM_NETGEN=ON -DFREECAD_RELEASE_PDB=OFF"
|
|
- GENERATOR="Visual Studio 15 2017 Win64"
|
|
- PYTHON_MAJOR_VERSION=3
|
|
- MSBUILD_PATH="c:\Program Files (x86)\Microsoft Visual Studio\2017\BuildTools\MSBuild\15.0\Bin"
|
|
- TEST_PATH="C:\Users\travis\build\FreeCAD\FreeCAD\build\bin"
|
|
- CLCACHE_PATH="C:\Users\travis\build\FreeCAD\FreeCAD\"
|
|
- VS15=true
|
|
- CCACHE_TEMPDIR=/tmp/.ccache-temp
|
|
- CCACHE_COMPRESS=1
|
|
- CCACHE_DIR=$HOME/.ccache
|
|
- CACHE_NAME=JOB5
|
|
# enable this if clcache extended log is needed
|
|
#- CLCACHE_LOG=1
|
|
cache:
|
|
directories:
|
|
- $HOME/clcache
|
|
|
|
# - language: python
|
|
# python: 3.7
|
|
# dist: xenial # required for Python >= 3.7 (travis-ci/travis-ci#9069)
|
|
# before_install: true
|
|
# install: python3 -m pip install flake8
|
|
# # fail the build if there are Python syntax errors or undefined names
|
|
# script: flake8 . --count --select=E901,E999,F821,F822,F823 --show-source --statistics
|
|
|
|
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")
|
|
# Daily PPA for OCCT, Pivy, Netgen, PySide ... packages
|
|
sudo apt-add-repository -y ppa:freecad-maintainers/freecad-daily
|
|
sudo apt-get update -qq
|
|
# Build deps
|
|
sudo apt-get install -y --no-install-recommends \
|
|
python-dev \
|
|
python-pyside \
|
|
python-matplotlib \
|
|
python3-dev \
|
|
python3-pyside \
|
|
python3-matplotlib \
|
|
libboost1.65-dev \
|
|
libboost-filesystem1.65-dev \
|
|
libboost-program-options1.65-dev \
|
|
libboost-python1.65-dev \
|
|
libboost-regex1.65-dev \
|
|
libboost-signals1.65-dev \
|
|
libboost-system1.65-dev \
|
|
libboost-thread1.65-dev \
|
|
libxerces-c-dev \
|
|
libocct-data-exchange-dev \
|
|
libocct-ocaf-dev \
|
|
libocct-visualization-dev \
|
|
libvtk7-dev \
|
|
libmedc-dev \
|
|
pybind11-dev \
|
|
swig \
|
|
qt4-qmake \
|
|
libqt4-opengl-dev \
|
|
libqtwebkit-dev \
|
|
qtbase5-dev \
|
|
libqt5xmlpatterns5-dev \
|
|
libqt5svg5-dev \
|
|
libqt5opengl5-dev \
|
|
qttools5-dev \
|
|
qtwebengine5-dev \
|
|
libcoin80-dev \
|
|
libpyside-dev \
|
|
libpyside2-dev \
|
|
libshiboken-dev \
|
|
libshiboken2-dev \
|
|
pyside-tools \
|
|
pyside2-tools \
|
|
doxygen \
|
|
graphviz \
|
|
libnglib-dev \
|
|
netgen \
|
|
netgen-headers \
|
|
libmetis-dev \
|
|
libspnav-dev
|
|
# Runtime deps
|
|
sudo apt-get install -y --no-install-recommends freecad-daily-python3
|
|
|
|
export DISPLAY=:99.0
|
|
sh -e /etc/init.d/xvfb start
|
|
|
|
export LD_LIBRARY_PATH=/usr/lib/x86_64-linux-gnu/netgen/:$LD_LIRBARY_PATH
|
|
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"
|
|
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
|
|
|
|
brew install --verbose --only-dependencies freecad --with-packaging-utils
|
|
pip install six
|
|
# Qt5: Set Qt5 build flag and CMAKE_PREFIX
|
|
QT5_CMAKE_PREFIX=$(ls -d $(brew --cellar)/qt/*/lib/cmake)
|
|
QT5_WEBKIT_CMAKE_PREFIX=$(ls -d $(brew --cellar)/qtwebkit/*/lib/cmake)
|
|
CMAKE_OPTS="${CMAKE_OPTS} -DBUILD_QT5=ON -DCMAKE_PREFIX_PATH=${QT5_CMAKE_PREFIX};${QT5_WEBKIT_CMAKE_PREFIX}"
|
|
|
|
#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"
|
|
;;
|
|
|
|
"windows")
|
|
#choco install -y python
|
|
#py -m pip install --quiet --upgrade pip
|
|
#py -m pip install git+https://github.com/frerich/clcache.git@v4.2.0
|
|
curl -L https://github.com/frerich/clcache/releases/download/v4.2.0/clcache-4.2.0.zip --output clcache-4.2.0.zip
|
|
7z x clcache-4.2.0.zip > /dev/null
|
|
export PATH=$CLCACHE_PATH:$PATH
|
|
export PATH=$TEST_PATH:$PATH
|
|
#reset clcache hit stats
|
|
cmd.exe /C 'C:\Users\travis\build\FreeCAD\FreeCAD\clcache.exe -z'
|
|
# clcache stats before compilation
|
|
cmd.exe /C 'C:\Users\travis\build\FreeCAD\FreeCAD\clcache.exe -s'
|
|
|
|
curl -L https://github.com/apeltauer/FreeCAD/releases/download/LibPack_12.1/FreeCADLibs_12.1.2_x64_VC15.7z --output FreeCADLibs.7z
|
|
7z x FreeCADLibs.7z -oFreeCADLibs > /dev/null
|
|
rm -f FreeCADLibs.7z
|
|
export LIBPACK_DIR="$TRAVIS_BUILD_DIR\FreeCADLibs"
|
|
|
|
export CMAKE_ARGS="${CMAKE_OPTS} -DFREECAD_LIBPACK_DIR=$TRAVIS_BUILD_DIR\FreeCADLibs -DPYTHON_EXECUTABLE=$TRAVIS_BUILD_DIR\FreeCADLibs\bin\python.exe \
|
|
-DBUILD_QT5=TRUE"
|
|
export PATH=$MSBUILD_PATH:$PATH
|
|
;;
|
|
|
|
*)
|
|
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 -G"${GENERATOR}" ${CMAKE_ARGS} -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} ../
|
|
|
|
script:
|
|
####
|
|
# Install FreeCAD and run unit tests. Test failures will fail the build
|
|
##
|
|
# MSBuild.exe /m FreeCAD.sln
|
|
- |
|
|
if [ "${TRAVIS_OS_NAME}" == "windows" ]; then
|
|
# call msbuild using clcache
|
|
#cmd.exe /C '"C:\Program Files (x86)\Microsoft Visual Studio\2017\BuildTools\VC\Auxiliary\Build\vcvarsall.bat" amd64 && MSBuild.exe FreeCAD.sln /p:CLToolExe=clcache.exe /p:TrackFileAccess=false /p:CLToolPath=C:\Users\travis\build\FreeCAD\FreeCAD /m:2 /nologo /verbosity:minimal /p:Configuration=Release /p:Platform=x64'
|
|
cmd.exe /C 'C:\Users\travis\build\FreeCAD\FreeCAD\.travis\build.bat'
|
|
# ls -lahR
|
|
du -hs bin/
|
|
mv ../FreeCADLibs/bin/* bin/
|
|
du -hs bin/
|
|
# show clcache hit stats
|
|
cmd.exe /C 'C:\Users\travis\build\FreeCAD\FreeCAD\clcache.exe -s'
|
|
# run the tests
|
|
#cmd.exe /C 'cd C:\Users\travis\build\FreeCAD\FreeCAD\build\bin && FreeCADCmd.exe --run-test 0'
|
|
# Make build fail if ANY of the following fails
|
|
#set -ev
|
|
winpty.exe -Xallow-non-tty -Xplain /C/Users/travis/build/FreeCAD/FreeCAD/build/bin/FreeCADCmd.exe --run-test 0 | tee runlog.txt
|
|
grep -q FAILED runlog.txt ; [ $? == 1 ] && echo "Build succeeded and tests passed!" || ( echo "Tests failed!" && false )
|
|
else
|
|
# Stop compiling (GCC) after 2 hrs 50 min (3 hrs limit).
|
|
# Preserves created ccache for the next build job.
|
|
if [ "${TRAVIS_OS_NAME}" == "linux" ]; then sudo timeout -k 175m 170m make -j2 install || true; fi
|
|
if [ "${TRAVIS_OS_NAME}" == "osx" ]; then sudo make -j2 install; fi
|
|
# sudo make -j2 install
|
|
${INSTALLED_APP_PATH} --console --run-test 0 || travis_terminate 1
|
|
${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 )
|
|
fi
|
|
|
|
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
|