Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
97 changes: 43 additions & 54 deletions .travis.yml
Original file line number Diff line number Diff line change
@@ -1,5 +1,8 @@
language: cpp

sudo: required
services:
- docker
os:
- linux
- osx
Expand All @@ -20,78 +23,64 @@ addons:
- libboost-serialization1.55-dev
- libboost-test1.55-dev
- libboost-regex1.55-dev
- pandoc
env:
global:
- PYTHON=python CONDA_PACKAGES="numpy cython"
- PYTHON=python CONDA_PACKAGES="numpy cython" TWINE_USERNAME=danielh
- secure: "j8Ro21/7h5FKuJHPJRHYfOiZHMoAfD/dfpqXZreGrl79jVSEdPZmmOdvFH++CqrRdttpxOf2Lg5qOfpXfziC5ecJx1USslBSo2qwAG9JwPkwjCK7MhouM64yhVedj9Es/H635aufbyRsDIhKr5poPrrH+UebEq/63QpEdDWIWq8="
matrix:
- PYVER=3.4 PYNUM=3 PYTHON_INSTALL=manual
- PYVER=3.4 PYNUM=3 PYTHON_INSTALL=pip
- PYVER=2.7 PYNUM=2 PYTHON_INSTALL=manual
- PYVER=2.7 PYNUM=2 PYTHON_INSTALL=pip
- PYVER=2.7 PYNUM=2 PYTHON_INSTALL=pip BUILD_ARCH=i686
- PYVER=2.7 PYNUM=2 PYTHON_INSTALL=pip BUILD_ARCH=x86_64
- PYVER=3.4 PYNUM=3 PYTHON_INSTALL=manual
- PYVER=3.4 PYNUM=3 PYTHON_INSTALL=pip BUILD_ARCH=i686
- PYVER=3.4 PYNUM=3 PYTHON_INSTALL=pip BUILD_ARCH=x86_64
- PYVER=3.5 PYNUM=3 PYTHON_INSTALL=manual
- PYVER=3.5 PYNUM=3 PYTHON_INSTALL=pip BUILD_ARCH=i686
- PYVER=3.5 PYNUM=3 PYTHON_INSTALL=pip BUILD_ARCH=x86_64
- PYVER=3.6 PYNUM=3 PYTHON_INSTALL=manual
- PYVER=3.6 PYNUM=3 PYTHON_INSTALL=pip BUILD_ARCH=i686
- PYVER=3.6 PYNUM=3 PYTHON_INSTALL=pip BUILD_ARCH=x86_64
matrix:
exclude:
- os: linux
compiler: clang
- os: osx
compiler: gcc
- os: osx
env: PYVER=2.7 PYNUM=2 PYTHON_INSTALL=pip BUILD_ARCH=i686
- os: osx
env: PYVER=3.4 PYNUM=3 PYTHON_INSTALL=pip BUILD_ARCH=i686
- os: osx
env: PYVER=3.5 PYNUM=3 PYTHON_INSTALL=pip BUILD_ARCH=i686
- os: osx
env: PYVER=3.6 PYNUM=3 PYTHON_INSTALL=pip BUILD_ARCH=i686

before_install:
# We do this conditionally because it saves us some downloading if the
# version is the same.
- if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then
export MINICONDA_OS_NAME=Linux CXX=g++-4.8 CC=gcc-4.8;
elif [[ "$TRAVIS_OS_NAME" == "osx" ]]; then
export MINICONDA_OS_NAME=MacOSX;
fi
- wget https://repo.continuum.io/miniconda/Miniconda$PYNUM-latest-$MINICONDA_OS_NAME-x86_64.sh -O miniconda.sh
- bash miniconda.sh -b -p $HOME/miniconda
- export PATH="$HOME/miniconda/bin:$PATH"
- hash -r
- conda config --set always_yes yes --set changeps1 no
- conda update -q conda
# Useful for debugging any issues with conda
- conda info -a
- travis_retry .travis/install_conda.sh
- export PATH="$PWD/miniconda/bin:$PATH"
- source activate "$PYVER"

install:
- 'if [[ "$PYTHON_INSTALL" == "manual" ]]; then
hg clone https://bitbucket.org/eigen/eigen/ -r 346ecdb || travis_terminate 1;
cd eigen;
mkdir build && cd build;
cmake .. || travis_terminate 1;
sudo make install || travis_terminate 1;
cd ../..;
export EIGEN3_INCLUDE_DIR=/usr/local/include/eigen3;
fi'
- travis_retry .travis/install_eigen.sh
- export EIGEN3_INCLUDE_DIR=/usr/local/include/eigen3

before_script:
- cd $TRAVIS_BUILD_DIR
- conda create -q -n dynet-environment python=$PYVER $CONDA_PACKAGES
- source activate dynet-environment
- 'if [[ "$PYTHON_INSTALL" == "manual" ]]; then
mkdir build;
cd build;
cmake .. -DEIGEN3_INCLUDE_DIR=$EIGEN3_INCLUDE_DIR -DENABLE_BOOST=ON -DENABLE_CPP_EXAMPLES=ON -DPYTHON=$(which python) -DCMAKE_INSTALL_PREFIX=$(dirname $(which python))/.. || travis_terminate 1;
else
pip install -v . || travis_terminate 1;
fi'
- .travis/build_dynet.sh

after_failure:
- cat $TRAVIS_BUILD_DIR/build/CMakeFiles/CMakeError.log

script:
- 'if [[ "$PYTHON_INSTALL" == "manual" ]]; then
if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then
make -j$(nproc) || travis_terminate 1;
elif [[ "$TRAVIS_OS_NAME" == "osx" ]]; then
make -j$(sysctl -n hw.ncpu) || travis_terminate 1;
export DYLD_LIBRARY_PATH=$TRAVIS_BUILD_DIR/build/dynet;
fi;
make install || travis_terminate 1;
make test || travis_terminate 1;
cd python;
python ../../setup.py build --build-dir=.. --skip-build install --user || travis_terminate 1;
elif [[ "$TRAVIS_OS_NAME" == "osx" ]]; then
export DYLD_LIBRARY_PATH=$(dirname $(which python))/../lib:$DYLD_LIBRARY_PATH;
fi'
- cd $TRAVIS_BUILD_DIR/tests/python
- python test.py
- .travis/test_dynet.sh

deploy:
provider: script
skip_cleanup: true
script:
- .travis/build_sdist.sh
- .travis/deploy.sh
on:
repo: clab/dynet
tags: true
condition: "$PYTHON_INSTALL = pip && $TRAVIS_OS_NAME = linux"
21 changes: 21 additions & 0 deletions .travis/build_dynet.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
#!/bin/bash
set -xe

cd "$TRAVIS_BUILD_DIR"
if [[ "$PYTHON_INSTALL" == manual ]]; then
mkdir build
cd build
cmake .. -DEIGEN3_INCLUDE_DIR="$EIGEN3_INCLUDE_DIR" -DENABLE_BOOST=ON -DENABLE_CPP_EXAMPLES=ON -DPYTHON=$(which python) -DCMAKE_INSTALL_PREFIX=$(dirname $(which python))/..
else # pip
if [[ -n "$TRAVIS_TAG" ]]; then
sed -i.bak "s/# version=.*/version=\"$TRAVIS_TAG\",/" setup.py
sed -i.bak "s/ -march=native//" CMakeLists.txt
fi
if [[ "$TRAVIS_OS_NAME" == linux ]]; then
docker build --rm -t "dynet-manylinux1-${BUILD_ARCH}-builder" -f "docker/Dockerfile-$BUILD_ARCH" .
docker run -e PYVER -e TRAVIS_OS_NAME -e CONDA_PACKAGES -e TRAVIS_BUILD_DIR=/build -v "$TRAVIS_BUILD_DIR":/build --rm "dynet-manylinux1-${BUILD_ARCH}-builder" /root/.travis/build_manylinux_wheel.sh
elif [[ "$TRAVIS_OS_NAME" == osx ]]; then
.travis/build_macos_wheel.sh
fi
fi

19 changes: 19 additions & 0 deletions .travis/build_macos_wheel.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
#!/bin/bash
set -xe

cd "$TRAVIS_BUILD_DIR"
source activate "$PYVER"
pip install pypandoc delocate
python setup.py bdist_wheel
DYLIB="$TRAVIS_BUILD_DIR"/miniconda/envs/"$PYVER"/lib/libdynet.dylib
WHEEL=dist/*.whl
echo Trying to relink $DYLIB into $WHEEL...
DEPS_BEFORE="$(delocate-listdeps $WHEEL)"
delocate-wheel -v "$WHEEL"
DEPS_AFTER="$(delocate-listdeps $WHEEL)"
if [[ "$DEPS_BEFORE" == "$DEPS_AFTER" ]]; then
echo "Failed fixing wheel, see https://github.com/clab/dynet/pull/841"
else
echo "Success!"
fi

23 changes: 23 additions & 0 deletions .travis/build_manylinux_wheel.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
#!/bin/bash
set -xe

# To be run inside docker container

"$TRAVIS_BUILD_DIR"/.travis/install_conda.sh
export PATH="$PWD/miniconda/bin:$PATH" CMAKE=cmake28 EIGEN3_INCLUDE_DIR="$TRAVIS_BUILD_DIR/eigen"
cd "$TRAVIS_BUILD_DIR"
source activate "$PYVER"
if [[ -n "$DYNET_TEST" ]]; then
"$TRAVIS_BUILD_DIR"/.travis/test_dynet.sh
else # build
pip install pypandoc # needed to generate the description from the readme
python setup.py bdist_wheel
source deactivate # auditwheel installed in system but not in conda env
export LD_LIBRARY_PATH="$TRAVIS_BUILD_DIR/miniconda/envs/$PYVER/lib"
auditwheel repair dist/*.whl
rm -f dist/*.whl
mv -f wheelhouse/*.whl dist/
chmod -R a+rw . "$TRAVIS_BUILD_DIR/miniconda/envs/$PYVER"
find . "$TRAVIS_BUILD_DIR/miniconda/envs/$PYVER" -type d -exec chmod a+x {} \;
fi

9 changes: 9 additions & 0 deletions .travis/build_sdist.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
#!/bin/bash
set -xe

conda create -q -n sdist
source activate sdist
pip install pypandoc
cd "$TRAVIS_BUILD_DIR"
python setup.py sdist

9 changes: 9 additions & 0 deletions .travis/deploy.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
#!/bin/bash
set -xe

# Upload to PyPI
conda create -q -n twine
source activate twine
pip install twine
cd "$TRAVIS_BUILD_DIR"
twine upload --skip-existing dist/*
22 changes: 22 additions & 0 deletions .travis/install_conda.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
#!/bin/bash
set -xe

if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then
export MINICONDA_OS_NAME=Linux
if [[ `arch` == x86_64 ]]; then
export MINICONDA_ARCH=x86_64
else
export MINICONDA_ARCH=x86
fi
else
export MINICONDA_OS_NAME=MacOSX MINICONDA_ARCH=x86_64
fi
wget "https://repo.continuum.io/miniconda/Miniconda3-latest-$MINICONDA_OS_NAME-$MINICONDA_ARCH.sh" -O miniconda.sh
bash miniconda.sh -b -p miniconda
export PATH="$PWD/miniconda/bin:$PATH"
hash -r
conda config --set always_yes yes --set changeps1 no
conda update -q conda
conda create -q -n "$PYVER" python="$PYVER" $CONDA_PACKAGES
# Useful for debugging any issues with conda
conda info -a
9 changes: 9 additions & 0 deletions .travis/install_eigen.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
#!/bin/bash
set -xe

hg clone https://bitbucket.org/eigen/eigen/ -r 346ecdb
cd eigen
mkdir build && cd build
cmake ..
sudo make install

33 changes: 33 additions & 0 deletions .travis/test_dynet.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
#!/bin/bash
set -xe

if [[ "$BUILD_ARCH" == i686 && `arch` == x86_64 ]]; then
echo Skipping Python test on $BUILD_ARCH
#echo Using Docker to test $BUILD_ARCH build on `arch`
#docker run -e PYVER -e TRAVIS_OS_NAME -e CONDA_PACKAGES -e TRAVIS_BUILD_DIR=/build -e DYNET_TEST=1 -v "$TRAVIS_BUILD_DIR":/build --rm "dynet-manylinux1-${BUILD_ARCH}-builder" /root/.travis/build_manylinux_wheel.sh
else
cd "$TRAVIS_BUILD_DIR"
source activate "$PYVER"

if [[ "$PYTHON_INSTALL" == manual ]]; then
cd build
if [[ "$TRAVIS_OS_NAME" == linux ]]; then
make -j$(nproc)
elif [[ "$TRAVIS_OS_NAME" == osx ]]; then
make -j$(sysctl -n hw.ncpu)
export DYLD_LIBRARY_PATH=$TRAVIS_BUILD_DIR/build/dynet
fi
make install
make test
cd python
python ../../setup.py build --build-dir=.. --skip-build install --user
else
pip install dynet --no-index -f dist
if [[ "$TRAVIS_OS_NAME" == osx ]]; then
export DYLD_LIBRARY_PATH=$(dirname $(which python))/../lib:$DYLD_LIBRARY_PATH
fi
fi

cd "$TRAVIS_BUILD_DIR"/tests/python
python test.py
fi
4 changes: 4 additions & 0 deletions docker/Dockerfile-i686
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
FROM quay.io/pypa/manylinux1_i686
MAINTAINER Daniel Hershcovich
ADD .travis/ /root/.travis
WORKDIR /root/.travis
4 changes: 4 additions & 0 deletions docker/Dockerfile-x86_64
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
FROM quay.io/pypa/manylinux1_x86_64
MAINTAINER Daniel Hershcovich
ADD .travis/ /root/.travis
WORKDIR /root/.travis