diff --git a/.travis.yml b/.travis.yml index 54b308f2efb..b277c30b725 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,32 +1,62 @@ -os: linux -dist: trusty -sudo: required -language: python -python: - - "2.7" - - "3.6" - -addons: - apt: - packages: - - dos2unix +language: generic + +matrix: + include: + - os: linux + sudo: required + env: PYTHON_VERSION=python2 + language: python + python: "2.7" + - os: linux + sudo: required + env: PYTHON_VERSION=python3 + language: python + python: "3.6" + - os: osx + osx_image: xcode9.3beta + env: PYTHON_VERSION=python2 + - os: osx + osx_image: xcode9.3beta + env: PYTHON_VERSION=python3 + - os: linux + sudo: required + env: PYTHON_VERSION=python2 ONNX_ML=1 + language: python + python: "2.7" + - os: linux + sudo: required + env: PYTHON_VERSION=python3 ONNX_ML=1 + language: python + python: "3.6" + - os: osx + osx_image: xcode9.3beta + env: PYTHON_VERSION=python2 ONNX_ML=1 + - os: osx + osx_image: xcode9.3beta + env: PYTHON_VERSION=python3 ONNX_ML=1 + +env: + global: + - PB_VERSION=2.6.1 + +before_install: + - ./.travis/before_install.sh install: - ./.travis/install.sh script: - - ./.travis/build.sh + - ./.travis/script.sh + +after_success: + - ./.travis/after_success.sh + +after_failure: + - ./.travis/after_failure.sh cache: + - timeout: 300 - directories: - - $HOME/.build_cache + - $BUILD_CCACHE_DIR - $HOME/.ccache - -env: - global: - - PB_VERSION=2.6.1 - matrix: - - USE_NINJA=false - - USE_NINJA=true - - ONNX_ML=1 USE_NINJA=false - - ONNX_ML=1 USE_NINJA=true + - $HOME/.cache/pb diff --git a/.travis/after_failure.sh b/.travis/after_failure.sh new file mode 100755 index 00000000000..3a22393faf1 --- /dev/null +++ b/.travis/after_failure.sh @@ -0,0 +1,4 @@ +#!/bin/bash + +script_path=$(python -c "import os; import sys; print(os.path.realpath(sys.argv[1]))" "${BASH_SOURCE[0]}") +source "${script_path%/*}/setup.sh" diff --git a/.travis/after_success.sh b/.travis/after_success.sh new file mode 100755 index 00000000000..3a22393faf1 --- /dev/null +++ b/.travis/after_success.sh @@ -0,0 +1,4 @@ +#!/bin/bash + +script_path=$(python -c "import os; import sys; print(os.path.realpath(sys.argv[1]))" "${BASH_SOURCE[0]}") +source "${script_path%/*}/setup.sh" diff --git a/.travis/before_install.sh b/.travis/before_install.sh new file mode 100755 index 00000000000..81bbdf6e473 --- /dev/null +++ b/.travis/before_install.sh @@ -0,0 +1,50 @@ +#!/bin/bash + +# Don't source setup.sh here, because the virtualenv might not be set up yet + +export NUMCORES=`grep -c ^processor /proc/cpuinfo` +if [ ! -n "$NUMCORES" ]; then + export NUMCORES=`sysctl -n hw.ncpu` +fi +echo Using $NUMCORES cores + +# Install dependencies +if [ "$TRAVIS_OS_NAME" == "linux" ]; then + sudo apt-get update + APT_INSTALL_CMD='sudo apt-get install -y --no-install-recommends' + $APT_INSTALL_CMD dos2unix + + function install_protobuf() { + # Install protobuf + pb_dir="~/.cache/pb" + mkdir -p "$pb_dir" + wget -qO- "https://github.com/google/protobuf/releases/download/v${PB_VERSION}/protobuf-${PB_VERSION}.tar.gz" | tar -xz -C "$pb_dir" --strip-components 1 + ccache -z + cd "$pb_dir" && ./configure && make -j${NUMCORES} && make check && sudo make install && sudo ldconfig + ccache -s + } + + install_protobuf + +elif [ "$TRAVIS_OS_NAME" == "osx" ]; then + brew install ccache protobuf + if [ "${PYTHON_VERSION}" == "python3" ]; then + brew upgrade python + fi +else + echo Unknown OS: $TRAVIS_OS_NAME + exit 1 +fi + +# TODO consider using "python3.6 -m venv" +# which is recommended by python3.6 and may make some difference +if [ "$TRAVIS_OS_NAME" == "osx" ]; then + pip install virtualenv + virtualenv -p "${PYTHON_VERSION}" "${HOME}/virtualenv" + source "${HOME}/virtualenv/bin/activate" +fi + +# Update all existing python packages +pip list --outdated --format=freeze | grep -v '^\-e' | cut -d = -f 1 | xargs -n1 pip install -U + +pip install pytest-cov nbval diff --git a/.travis/common b/.travis/common deleted file mode 100644 index 55e94b61e1b..00000000000 --- a/.travis/common +++ /dev/null @@ -1,14 +0,0 @@ -set -ex - -die() { - echo >&2 "$@" - exit 1 -} - -workdir="$HOME/work" -mkdir -p "$workdir" -build_cache_dir="$HOME/.build_cache/pb-$PB_VERSION" -mkdir -p "$build_cache_dir" - -# setup ccache -export PATH="/usr/lib/ccache:$PATH" diff --git a/.travis/install.sh b/.travis/install.sh index 7d3bb400f72..2d2d2574689 100755 --- a/.travis/install.sh +++ b/.travis/install.sh @@ -1,17 +1,6 @@ #!/bin/bash -scripts_dir=$(dirname $(readlink -e "${BASH_SOURCE[0]}")) -source "$scripts_dir/common" +script_path=$(python -c "import os; import sys; print(os.path.realpath(sys.argv[1]))" "${BASH_SOURCE[0]}") +source "${script_path%/*}/setup.sh" -# install protobuf -pb_dir="$build_cache_dir/pb" -mkdir -p $pb_dir -wget -qO- "https://github.com/google/protobuf/releases/download/v$PB_VERSION/protobuf-$PB_VERSION.tar.gz" | tar -xvz -C "$pb_dir" --strip-components 1 -ccache -z -cd "$pb_dir" && ./configure && make && make check && sudo make install && sudo ldconfig -ccache -s - - -if [[ $USE_NINJA == true ]]; then - pip install ninja -fi +time ONNX_NAMESPACE=ONNX_NAMESPACE_FOO_BAR_FOR_CI pip install -v . diff --git a/.travis/build.sh b/.travis/script.sh similarity index 77% rename from .travis/build.sh rename to .travis/script.sh index 7d1a5b01617..cd638eb1f9c 100755 --- a/.travis/build.sh +++ b/.travis/script.sh @@ -1,16 +1,10 @@ #!/bin/bash -scripts_dir=$(dirname $(readlink -e "${BASH_SOURCE[0]}")) -source "$scripts_dir/common"; +script_path=$(python -c "import os; import sys; print(os.path.realpath(sys.argv[1]))" "${BASH_SOURCE[0]}") +source "${script_path%/*}/setup.sh" onnx_dir="$PWD" -# install onnx -cd $onnx_dir -ccache -z -ONNX_NAMESPACE=ONNX_NAMESPACE_FOO_BAR_FOR_CI pip install -v . -ccache -s - # onnx tests cd $onnx_dir pip install pytest-cov nbval diff --git a/.travis/setup.sh b/.travis/setup.sh new file mode 100644 index 00000000000..0306ad5b7fc --- /dev/null +++ b/.travis/setup.sh @@ -0,0 +1,18 @@ +set -ex + +export top_dir=$(dirname ${0%/*}) + +if [ "$TRAVIS_OS_NAME" == "osx" ]; then + source "${HOME}/virtualenv/bin/activate" +fi + +# setup ccache +if [ "$TRAVIS_OS_NAME" == "linux" ]; then + export PATH="/usr/lib/ccache:$PATH" +elif [ "$TRAVIS_OS_NAME" == "osx" ]; then + export PATH="/usr/local/opt/ccache/libexec:$PATH" +else + echo Unknown OS: $TRAVIS_OS_NAME + exit 1 +fi +ccache --max-size 1G