#### # 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 - os: osx fast_finish: true # https://blog.travis-ci.com/2013-11-27-fast-finishing-builds include: - os: linux dist: bionic compiler: clang env: - CMAKE_OPTS="-DBUILD_FEM_NETGEN=ON -DBUILD_QT5=ON" - PYTHON_MAJOR_VERSION=3 - os: linux dist: bionic compiler: gcc env: - CMAKE_OPTS="-DBUILD_FEM_NETGEN=ON -DBUILD_QT5=ON" - PYTHON_MAJOR_VERSION=3 - os: linux dist: bionic compiler: gcc env: - PYTHON_MAJOR_VERSION=2 - 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 # 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 # macOS build is failing. See: https://forum.freecadweb.org/viewtopic.php?f=10&t=32272 - os: osx compiler: clang env: - CMAKE_OPTS="-DBUILD_FEM_NETGEN=ON" QT=Qt5 - 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") # 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 \ 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 \ netgen \ netgen-headers \ libmetis-dev \ libspnav-dev 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" 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 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 cp -a ../FreeCADLibs/bin/* 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 15 min (2 hrs 30 min limit). # Preserves created ccache for the next build job. if [ "${TRAVIS_OS_NAME}" == "linux" ]; then sudo timeout -k 140m 135m make -j2 install || true; fi if [ "${TRAVIS_OS_NAME}" == "osx" ]; then sudo make -j2 install; fi ${INSTALLED_APP_PATH} --console --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 ) 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