326 lines
14 KiB
YAML
326 lines
14 KiB
YAML
# Copyright Louis Dionne 2013-2022
|
|
# Distributed under the Boost Software License, Version 1.0.
|
|
# (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
|
|
|
|
language: cpp
|
|
os: linux # Jobs are on Linux unless specified otherwise
|
|
dist: xenial
|
|
sudo: false
|
|
|
|
env:
|
|
global:
|
|
# GitHub token for pushing the documentation, logging in with the
|
|
# Travis command line utility and so on. The token is stored in the
|
|
# ${GITHUB_TOKEN} environment variable.
|
|
- secure: "gB1wvjk565j3O4UBGjyN44Vd8IGqcNHzkbvRdFNHp7C+C+JG2vhAeLlpiK0Zd483gdTjq9gPjIDwpwyG2UJ+yjT1kMTJvD1YNWpGcK6vOHYl1yMOwv/LBdnKn+J7i/FnoeULGRCCI2Fpp1qILhxeZgLxTxsdQaYXlAkkR0i8cgQ="
|
|
|
|
matrix:
|
|
include:
|
|
##########################################################################
|
|
# Build with the main configuration on all the supported compilers
|
|
#
|
|
# Note that we only use the memory checker on the main configuration to
|
|
# speed up Travis builds.
|
|
##########################################################################
|
|
# Clang 7
|
|
- env: UNIT_TESTS=true COMPILER=clang++-7 BOOST_VERSION=default ENABLE_MEMCHECK=true
|
|
addons: { apt: { packages: ["clang-7", "valgrind"], sources: ["ubuntu-toolchain-r-test", "llvm-toolchain-xenial-7"] } }
|
|
|
|
# Clang 8
|
|
- env: UNIT_TESTS=true COMPILER=clang++-8 BOOST_VERSION=default ENABLE_MEMCHECK=true
|
|
addons: &defaults { apt: { packages: ["clang-8", "valgrind"], sources: ["ubuntu-toolchain-r-test", "llvm-toolchain-xenial-8"] } }
|
|
|
|
# GCC 8
|
|
- env: UNIT_TESTS=true COMPILER=g++-8 BOOST_VERSION=default ENABLE_MEMCHECK=true
|
|
addons: { apt: { packages: ["g++-8", "valgrind"], sources: ["ubuntu-toolchain-r-test"] } }
|
|
|
|
# Xcode 11
|
|
- os: osx
|
|
env: UNIT_TESTS=true BOOST_VERSION=default
|
|
osx_image: xcode11
|
|
|
|
##########################################################################
|
|
# Build with variations in the configuration
|
|
##########################################################################
|
|
# With C++17, on Clang
|
|
- env: UNIT_TESTS=true COMPILER=default BOOST_VERSION=default CMAKE_OPTIONS="-DCMAKE_CXX_STANDARD=17 -DCMAKE_CXX_STANDARD_REQUIRED=ON"
|
|
addons: *defaults
|
|
|
|
# With C++20, on Clang
|
|
- env: UNIT_TESTS=true COMPILER=default BOOST_VERSION=default CMAKE_OPTIONS="-DCMAKE_CXX_STANDARD=20 -DCMAKE_CXX_STANDARD_REQUIRED=ON"
|
|
addons: *defaults
|
|
|
|
# With C++17, on GCC
|
|
- env: UNIT_TESTS=true COMPILER=g++-8 BOOST_VERSION=default CMAKE_OPTIONS="-DCMAKE_CXX_STANDARD=17 -DCMAKE_CXX_STANDARD_REQUIRED=ON"
|
|
addons: { apt: { packages: ["g++-8", "valgrind"], sources: ["ubuntu-toolchain-r-test"] } }
|
|
|
|
# With C++20, on GCC
|
|
- env: UNIT_TESTS=true COMPILER=g++-8 BOOST_VERSION=default CMAKE_OPTIONS="-DCMAKE_CXX_STANDARD=20 -DCMAKE_CXX_STANDARD_REQUIRED=ON"
|
|
addons: { apt: { packages: ["g++-8", "valgrind"], sources: ["ubuntu-toolchain-r-test"] } }
|
|
|
|
# Without concept checks
|
|
- env: UNIT_TESTS=true COMPILER=default BOOST_VERSION=default CMAKE_OPTIONS="-DBOOST_HANA_ENABLE_CONCEPT_CHECKS=OFF"
|
|
addons: *defaults
|
|
|
|
# With debug mode
|
|
- env: UNIT_TESTS=true COMPILER=default BOOST_VERSION=default CMAKE_OPTIONS="-DBOOST_HANA_ENABLE_DEBUG_MODE=ON"
|
|
addons: *defaults
|
|
|
|
# Without exceptions
|
|
- env: UNIT_TESTS=true COMPILER=default BOOST_VERSION=default CMAKE_OPTIONS="-DBOOST_HANA_ENABLE_EXCEPTIONS=OFF"
|
|
addons: *defaults
|
|
|
|
# Without exceptions on OS X
|
|
- os: osx
|
|
env: UNIT_TESTS=true BOOST_VERSION=default CMAKE_OPTIONS="-DBOOST_HANA_ENABLE_EXCEPTIONS=OFF"
|
|
osx_image: xcode11
|
|
|
|
# With Boost 1.76.0
|
|
- env: UNIT_TESTS=true COMPILER=default BOOST_VERSION=1.76.0
|
|
addons: *defaults
|
|
|
|
# Without Boost (make sure we don't depend on it)
|
|
- env: UNIT_TESTS=true COMPILER=default
|
|
addons: *defaults
|
|
|
|
# With Boost.Build instead of CMake (on Linux)
|
|
- env: BOOST_BUILD=true COMPILER=default BOOST_VERSION=default
|
|
addons: *defaults
|
|
|
|
# With Boost.Build instead of CMake (on OS X)
|
|
- os: osx
|
|
env: BOOST_BUILD=true BOOST_VERSION=default
|
|
osx_image: xcode11
|
|
|
|
##########################################################################
|
|
# Generate the documentation
|
|
##########################################################################
|
|
- os: osx
|
|
env: DOCUMENTATION=true BOOST_VERSION=default
|
|
osx_image: xcode11
|
|
|
|
##########################################################################
|
|
# Benchmarks
|
|
##########################################################################
|
|
- env: BENCHMARKS=true COMPILER=default BOOST_VERSION=default CMAKE_OPTIONS="-DCMAKE_BUILD_TYPE=Release"
|
|
addons: *defaults
|
|
|
|
##########################################################################
|
|
# Jobs that are allowed to fail
|
|
##########################################################################
|
|
# Boost trunk
|
|
- env: UNIT_TESTS=true COMPILER=default BOOST_VERSION=trunk
|
|
addons: *defaults
|
|
|
|
|
|
allow_failures:
|
|
- env: UNIT_TESTS=true COMPILER=default BOOST_VERSION=trunk
|
|
|
|
|
|
install:
|
|
############################################################################
|
|
# All the dependencies are installed in ${HOME}/deps/
|
|
############################################################################
|
|
- DEPS_DIR="${HOME}/deps"
|
|
- mkdir -p ${DEPS_DIR} && cd ${DEPS_DIR}
|
|
|
|
############################################################################
|
|
# Setup default versions and override CXX set by Travis if needed
|
|
############################################################################
|
|
- if [[ "${COMPILER}" == "default" ]]; then COMPILER=clang++-8; fi
|
|
- if [[ "${BOOST_VERSION}" == "default" ]]; then BOOST_VERSION=1.76.0; fi
|
|
|
|
- if [[ "${COMPILER}" != "" ]]; then export CXX=${COMPILER}; fi
|
|
- ${CXX} --version
|
|
|
|
############################################################################
|
|
# Install Boost headers
|
|
############################################################################
|
|
- |
|
|
if [[ "${BOOST_VERSION}" != "" ]]; then
|
|
BOOST_DIR=${DEPS_DIR}/boost-${BOOST_VERSION}
|
|
if [[ "${BOOST_VERSION}" == "trunk" ]]; then
|
|
BOOST_URL="http://github.com/boostorg/boost.git"
|
|
travis_retry git clone --depth 1 --recursive ${BOOST_URL} ${BOOST_DIR} || exit 1
|
|
(cd ${BOOST_DIR} && ./bootstrap.sh && ./b2 headers) || exit 1
|
|
else
|
|
BOOST_URL="https://boostorg.jfrog.io/artifactory/main/release/${BOOST_VERSION}/source/boost_${BOOST_VERSION//\./_}.tar.gz"
|
|
mkdir -p ${BOOST_DIR}
|
|
{ travis_retry wget -O - ${BOOST_URL} | tar --strip-components=1 -xz -C ${BOOST_DIR}; } || exit 1
|
|
fi
|
|
# Make sure we don't conflict with the Hana shipped with Boost
|
|
rm -r ${BOOST_DIR}/boost/{hana,hana.hpp} || exit 1
|
|
|
|
CMAKE_OPTIONS+=" -DBOOST_ROOT=${BOOST_DIR}"
|
|
fi
|
|
|
|
############################################################################
|
|
# Install a recent CMake
|
|
############################################################################
|
|
- |
|
|
if [[ "${TRAVIS_OS_NAME}" == "linux" ]]; then
|
|
CMAKE_URL="https://github.com/Kitware/CMake/releases/download/v3.20.2/cmake-3.20.2.tar.gz"
|
|
mkdir cmake && travis_retry wget --no-check-certificate --quiet -O - ${CMAKE_URL} | tar --strip-components=1 -xz -C cmake
|
|
export PATH=${DEPS_DIR}/cmake/bin:${PATH}
|
|
else
|
|
brew install cmake || brew upgrade cmake
|
|
fi
|
|
- cmake --version
|
|
|
|
############################################################################
|
|
# Install Boost.Build
|
|
############################################################################
|
|
- |
|
|
if [[ "${BOOST_BUILD}" == "true" ]]; then
|
|
(cd ${BOOST_DIR}/tools/build && ./bootstrap.sh && ./b2 install --prefix=${DEPS_DIR}/b2)
|
|
export PATH=${DEPS_DIR}/b2/bin:${PATH}
|
|
b2 --version || true # b2 --version returns 1
|
|
fi
|
|
|
|
############################################################################
|
|
# Install a recent Doxygen
|
|
############################################################################
|
|
- |
|
|
if [[ "${DOCUMENTATION}" == "true" ]]; then
|
|
brew install doxygen
|
|
doxygen --version
|
|
fi
|
|
|
|
############################################################################
|
|
# Install and use a more recent Ruby and install the gems for the benchmarks
|
|
############################################################################
|
|
- |
|
|
if [[ "${BENCHMARKS}" == "true" ]]; then
|
|
rvm use 2.1 --install --binary --fuzzy
|
|
gem install ruby-progressbar tilt
|
|
fi
|
|
|
|
|
|
before_script:
|
|
############################################################################
|
|
# When running with Boost.Build, put Hana in the Boost tree and make that
|
|
# the root of the project
|
|
############################################################################
|
|
- |
|
|
if [[ "${BOOST_BUILD}" == "true" ]]; then
|
|
rm -rf "${BOOST_DIR}/libs/hana"
|
|
mv "${TRAVIS_BUILD_DIR}" "${BOOST_DIR}/libs/hana"
|
|
export TRAVIS_BUILD_DIR="${BOOST_DIR}/libs/hana"
|
|
fi
|
|
|
|
############################################################################
|
|
# Set the git identity (for pushing the documentation and the benchmarks)
|
|
############################################################################
|
|
- git config --global user.name "Travis bot"
|
|
- git config --global user.email "<>"
|
|
|
|
############################################################################
|
|
# Go back to the root of the project and setup the build directory
|
|
############################################################################
|
|
- cd "${TRAVIS_BUILD_DIR}"
|
|
- (mkdir build && cd build && cmake .. ${CMAKE_OPTIONS})
|
|
|
|
|
|
script:
|
|
############################################################################
|
|
# Check for common formatting errors.
|
|
############################################################################
|
|
- sources=($(find include doc test example -name "*.hpp" -or -name "*.cpp"))
|
|
- LANG=POSIX grep '[^[:print:][:cntrl:]]' "${sources[@]}"; [[ $? == 1 ]] || exit 1 # Non-ASCII character
|
|
- LANG=POSIX grep $'\r' "${sources[@]}"; [[ $? == 1 ]] || exit 1 # '\r' (CR) character
|
|
- LANG=POSIX grep $'\t' "${sources[@]}"; [[ $? == 1 ]] || exit 1 # Tab character
|
|
- LANG=POSIX grep '[[:blank:]]$' "${sources[@]}"; [[ $? == 1 ]] || exit 1 # Trailing whitespace
|
|
|
|
############################################################################
|
|
# Only push the documentation when we're on master, otherwise just make sure
|
|
# it builds properly.
|
|
############################################################################
|
|
- |
|
|
if [[ "${DOCUMENTATION}" == "true" ]]; then
|
|
(cd build && ! make doc 2>&1 | grep -E "error") || exit 1
|
|
|
|
if [[ "${TRAVIS_PULL_REQUEST}" == "false" && "${TRAVIS_BRANCH}" == "master" ]]; then
|
|
# Suppress output to avoid leaking the token when the command fails
|
|
git clone https://ldionne:${GITHUB_TOKEN}@github.com/boostorg/hana --depth 1 --branch=gh-pages doc/html &>/dev/null
|
|
|
|
rm -rf doc/html/{search,*.png,*.css,*.js,*.html}
|
|
cp -R build/doc/html/* doc/html/
|
|
|
|
pushd doc/html
|
|
git add --all .
|
|
git commit --allow-empty -m "Update documentation to ${TRAVIS_COMMIT:0:7}"
|
|
# Suppress output to avoid leaking the token
|
|
travis_retry git push origin gh-pages &>/dev/null
|
|
popd
|
|
fi
|
|
fi
|
|
|
|
############################################################################
|
|
# We only run the full benchmarks on `master` when we're not in a pull
|
|
# request, because otherwise it takes too much Travis resources. Otherwise,
|
|
# we only run partial benchmarks to make sure they compile and run properly.
|
|
#
|
|
# Note: The benchmarks associated to a version of the documentation are
|
|
# stored in `doc/html/benchmarks/`.
|
|
############################################################################
|
|
- |
|
|
if [[ "${BENCHMARKS}" == "true" ]]; then
|
|
if [[ "${TRAVIS_PULL_REQUEST}" == "false" && "${TRAVIS_BRANCH}" == "master" ]]; then
|
|
(cd build && make benchmarks) || exit 1
|
|
compiler_slug=$(cd build && make travis_compiler_slug | grep 'travis_compiler_slug:' | cut -d ' ' -f 2)
|
|
config_slug=$(cd build && make travis_config_slug | grep 'travis_config_slug:' | cut -d ' ' -f 2)
|
|
|
|
# Suppress output to avoid leaking the token when the command fails
|
|
git clone https://ldionne:${GITHUB_TOKEN}@github.com/boostorg/hana --depth 1 --branch=gh-pages doc/html &>/dev/null
|
|
rm -rf doc/html/benchmarks/${config_slug}/${compiler_slug}/
|
|
mkdir -p doc/html/benchmarks/${config_slug}/${compiler_slug}/
|
|
for benchmark in $(ls build/benchmark/*.json | grep -v ".erb"); do
|
|
cp ${benchmark} doc/html/benchmarks/${config_slug}/${compiler_slug}/
|
|
done
|
|
|
|
pushd doc/html
|
|
git add --all .
|
|
git commit --allow-empty -m "Update benchmarks to ${TRAVIS_COMMIT:0:7} for build type '${config_slug}' and compiler '${compiler_slug}'"
|
|
# Suppress output to avoid leaking the token
|
|
travis_retry git push origin gh-pages &>/dev/null
|
|
popd
|
|
else
|
|
export BOOST_HANA_JUST_CHECK_BENCHMARKS=true
|
|
(cd build && make benchmarks -j2)
|
|
fi
|
|
fi
|
|
|
|
############################################################################
|
|
# Build and run the unit tests and examples.
|
|
############################################################################
|
|
- |
|
|
if [[ "${UNIT_TESTS}" == "true" ]]; then
|
|
(cd build && make tests examples -j2 -k) &&
|
|
if [[ "${ENABLE_MEMCHECK}" == "true" ]]; then
|
|
(cd build && ctest --output-on-failure -j2 -D ExperimentalMemCheck)
|
|
else
|
|
(cd build && ctest --output-on-failure -j2)
|
|
fi
|
|
fi
|
|
|
|
############################################################################
|
|
# Special Boost.Build job
|
|
############################################################################
|
|
- |
|
|
if [[ "${BOOST_BUILD}" == "true" ]]; then
|
|
# Build documentation
|
|
(cd doc && b2) || exit 1
|
|
if [[ ! -d doc/html ]]; then exit 1; fi
|
|
|
|
# Build tests
|
|
echo "using clang : : ${CXX} ;" > project-config.jam
|
|
(cd test && b2 toolset=clang cxxflags="-std=c++1y" include="${BOOST_DIR}") || exit 1
|
|
fi
|
|
|
|
|
|
notifications:
|
|
webhooks:
|
|
urls: https://webhooks.gitter.im/e/ce1e3a2036d94b4a644f
|
|
on_success: change
|
|
on_failure: always
|