env:
  global:
    - KIVY_USE_SETUPTOOLS=1
    - KIVY_SPLIT_EXAMPLES=1
    - SERVER_IP=159.203.106.198
    - DOC_VERSIONS="stable master"
matrix:
  fast_finish: true
  include:
    - language: python
      python: 2.7
      env: RUN=unit
      os: linux
      dist: trusty
    - language: python
      python: 3.5
      env: RUN=unit COVERALLS=true
      os: linux
      dist: trusty
    - language: python
      python: 3.5
      env: RUN=pep8
      os: linux
      dist: trusty
    - language: python
      python: 3.5
      env: RUN=docs
      os: linux
      dist: trusty
    - language: python
      sudo: required
      env: RUN=wheels DOCKER_IMAGE=markrwilliams/manylinux2:x86_64
      services:
        - docker
    - language: generic
      env: RUN=unit PY=2
      os: osx
    - language: generic
      env: RUN=unit PY=3
      os: osx
    - language: generic
      os: osx
      env: PYVERS="3.5.4 3.6.5 3.7.0 2.7.10 2.7.15" PY=3 RUN=wheels
    - language: generic
      env: RUN=app PY=2
      os: osx
    - language: generic
      env:  PYVERS="3.5.4 3.6.5 3.7.0" PY=3 RUN=app
      os: osx
      #osx_image: xcode9.2

before_install:
  # https://github.com/travis-ci/travis-ci/issues/6307
  - if [ "${TRAVIS_OS_NAME}" == "osx" ]; then
      brew install gpg2;
      brew uninstall gpg;
      gpg2 --keyserver hkp://keys.gnupg.net --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3;
      rvm get stable;
    fi

install:
  - if [ "${TRAVIS_OS_NAME}" == "linux" ] && [ "${RUN}" != "wheels" ]; then
      if [ "${RUN}" != "pep8" ]; then
        yes | sudo add-apt-repository ppa:zoogie/sdl2-snapshots;
        yes | sudo add-apt-repository ppa:gstreamer-developers/ppa;
        sudo apt-get update;
        sudo apt-get -y install libsdl2-dev libsdl2-ttf-dev libsdl2-image-dev libsdl2-mixer-dev;
        sudo apt-get -y install libgstreamer1.0-dev gstreamer1.0-alsa gstreamer1.0-plugins-base;
        sudo apt-get -y install python-dev libsmpeg-dev libswscale-dev libavformat-dev libavcodec-dev libjpeg-dev libtiff4-dev libX11-dev libmtdev-dev;
        sudo apt-get -y install python-setuptools build-essential libgl1-mesa-dev libgles2-mesa-dev;
        sudo apt-get -y install xvfb pulseaudio;
        pip install --upgrade cython pillow nose coveralls docutils;
      fi;
      if [ "${RUN}" == "docs" ]; then
        pip install --upgrade sphinxcontrib-blockdiag sphinxcontrib-seqdiag sphinxcontrib-actdiag sphinxcontrib-nwdiag;
      fi;
    fi;
  - if [ "${TRAVIS_OS_NAME}" == "osx" ]; then
      curl -O -L https://github.com/aria2/aria2/releases/download/release-1.29.0/aria2-1.29.0-osx-darwin.dmg;
      hdiutil attach aria2-1.29.0-osx-darwin.dmg;
      sudo installer -package "/Volumes/aria2 1.29.0 Intel/aria2.pkg" -target /;

      curl -O -L https://www.libsdl.org/release/SDL2-2.0.5.dmg;
      curl -O -L https://www.libsdl.org/projects/SDL_image/release/SDL2_image-2.0.1.dmg;
      curl -O -L https://www.libsdl.org/projects/SDL_mixer/release/SDL2_mixer-2.0.1.dmg;
      curl -O -L https://www.libsdl.org/projects/SDL_ttf/release/SDL2_ttf-2.0.14.dmg;
      /usr/local/aria2/bin/aria2c -x 10 https://gstreamer.freedesktop.org/data/pkg/osx/1.10.2/gstreamer-1.0-1.10.2-x86_64.pkg;
      /usr/local/aria2/bin/aria2c -x 10 https://gstreamer.freedesktop.org/data/pkg/osx/1.10.2/gstreamer-1.0-devel-1.10.2-x86_64.pkg;

      hdiutil attach SDL2-2.0.5.dmg;
      sudo cp -a /Volumes/SDL2/SDL2.framework /Library/Frameworks/;
      hdiutil attach SDL2_image-2.0.1.dmg;
      sudo cp -a /Volumes/SDL2_image/SDL2_image.framework /Library/Frameworks/;
      hdiutil attach SDL2_ttf-2.0.14.dmg;
      sudo cp -a /Volumes/SDL2_ttf/SDL2_ttf.framework /Library/Frameworks/;
      hdiutil attach SDL2_mixer-2.0.1.dmg;
      sudo cp -a /Volumes/SDL2_mixer/SDL2_mixer.framework /Library/Frameworks/;
      sudo installer -package gstreamer-1.0-1.10.2-x86_64.pkg -target /;
      sudo installer -package gstreamer-1.0-devel-1.10.2-x86_64.pkg -target /;
      curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py;
      if [ "${RUN}" == "app" ]  && ([ "${TRAVIS_EVENT_TYPE}" == "cron" ] || [ "${TRAVIS_TAG}" != "" ]  || [[ "$TRAVIS_COMMIT_MESSAGE" =~ "[build app osx]" ]]); then
          curl -O -L http://www.sveinbjorn.org/files/software/platypus/platypus4.8.zip;
          unzip platypus4.8.zip;
          mkdir -p /usr/local/bin;
          mkdir -p /usr/local/share/platypus;
          cp Platypus-4.8/Platypus.app/Contents/Resources/platypus_clt /usr/local/bin/platypus;
          cp Platypus-4.8/Platypus.app/Contents/Resources/ScriptExec /usr/local/share/platypus/ScriptExec;
          cp -a Platypus-4.8/Platypus.app/Contents/Resources/MainMenu.nib /usr/local/share/platypus/MainMenu.nib;
          chmod -R 755 /usr/local/share/platypus;
      fi;
      if [ "${RUN}" == "unit" ]; then
        if [ "${PY}" == "3" ]; then
           curl -O -L https://www.python.org/ftp/python/3.5.2/python-3.5.2-macosx10.6.pkg;
           sudo installer -package python-3.5.2-macosx10.6.pkg -target /;
           python3 get-pip.py --user;
           python3 -m pip install --upgrade --user cython pillow nose mock docutils;
        else
           python get-pip.py --user;
           python -m pip install --upgrade --user cython pillow nose mock docutils;
        fi;
      fi;
    fi;

before_script:
  - if [ "${TRAVIS_OS_NAME}" == "linux" ] && [ "${RUN}" != "pep8" ] && [ "${RUN}" != "wheels" ]; then
      export DISPLAY=:99.0;
      /sbin/start-stop-daemon --start --quiet --pidfile /tmp/custom_xvfb_99.pid --make-pidfile --background --exec /usr/bin/Xvfb -- :99 -screen 0 1280x720x24 -ac +extension GLX;
      export PYTHONPATH=$PYTHONPATH:$(pwd);
    fi;
  - if [ "${TRAVIS_OS_NAME}" == "osx" ]; then
      export CC=clang;
      export CXX=clang;
      export FFLAGS=-ff2c;
      export KIVY_GL_BACKEND=mock;
    fi;

script:
  - if [ "${TRAVIS_OS_NAME}" == "linux" ]; then
      set -ex;
      if [ "${RUN}" == "unit" ]; then
        make;
        make test;
      fi;
      if [ "${COVERALLS}" == "true" ] && [ "${TRAVIS_BRANCH}" == "master" ]; then
        travis_retry coveralls;
      fi;
      if [ "${RUN}" == "pep8" ]; then
        make style;
      fi;
      if [ "${RUN}" == "docs" ]; then
        make html;
      fi;
      if [ "${RUN}" == "wheels" ] && ([ "${TRAVIS_EVENT_TYPE}" == "cron" ] || [ "${TRAVIS_TAG}" != "" ] || [[ "$TRAVIS_COMMIT_MESSAGE" =~ "[build wheel]" ]] || [[ "$TRAVIS_COMMIT_MESSAGE" =~ "[build wheel linux]" ]]); then
        mkdir wheelhouse;
        wheel_date=$(python -c "from datetime import datetime; print(datetime.utcnow().strftime('%Y%m%d'))");
        git_tag=$(git rev-parse --short HEAD);
        wheel_name="dev0.$wheel_date.$git_tag";

        chmod +x .ci/build-wheels-linux.sh;
        docker run --rm -v `pwd`:/io $DOCKER_IMAGE "/io/.ci/build-wheels-linux.sh";
        ls wheelhouse/;
        for name in wheelhouse/*manylinux*.whl; do
          new_name="${name/dev0/$wheel_name}";
          if [ ! -f "$new_name" ]; then
            cp -n $name $new_name;
          fi;
        done;
        ls wheelhouse/;

        openssl aes-256-cbc -K $encrypted_675f1a0c317c_key -iv $encrypted_675f1a0c317c_iv -in ./kivy/tools/travis/id_rsa.enc -out ~/.ssh/id_rsa -d;
        chmod 600 ~/.ssh/id_rsa;
        echo -e "Host $SERVER_IP\n\tStrictHostKeyChecking no\n" >> ~/.ssh/config;
        rsync -avh -e "ssh -p 2458" --include="*/" --include="*manylinux*.whl" --exclude="*" "wheelhouse/" "root@$SERVER_IP:/web/downloads/ci/linux/kivy/";
      fi;
    fi;
  - if [ "${TRAVIS_OS_NAME}" == "osx" ]; then
      set -ex;
      if [ "${RUN}" == "unit" ]; then
        if [ "${PY}" == "3" ]; then
          python3 setup.py build_ext --inplace;
          python3 -m nose.core kivy/tests;
        else
          make;
          make test;
        fi;
      elif [ "${RUN}" == "app" ] && [ "${TRAVIS_PULL_REQUEST}" == "false" ]  && ([ "${TRAVIS_EVENT_TYPE}" == "cron" ] || [ "${TRAVIS_TAG}" != "" ]  || [[ "$TRAVIS_COMMIT_MESSAGE" =~ "[build app osx]" ]]); then
          openssl aes-256-cbc -K $encrypted_675f1a0c317c_key -iv $encrypted_675f1a0c317c_iv -in ./kivy/tools/travis/id_rsa.enc -out ~/.ssh/id_rsa -d;
          chmod 600 ~/.ssh/id_rsa;
          echo -e "Host $SERVER_IP\n\tStrictHostKeyChecking no\n" >> ~/.ssh/config;

          git clone https://github.com/kivy/kivy-sdk-packager;
          pushd kivy-sdk-packager/osx;
          app_date=$(python -c "from datetime import datetime; print(datetime.utcnow().strftime('%Y%m%d'))");
          git_tag=$(git rev-parse --short HEAD);

          if [ "${PY}" == "3" ]; then
             yes | ./create-osx-bundle.sh python3 master > output.txt;
             app_ver=$(Kivy.app/Contents/Resources/script -c 'import kivy; print(kivy.__version__)');
             mv Kivy.app Kivy3.app;
             ./create-osx-dmg.sh Kivy3.app;
             mkdir app;
             mv Kivy3.dmg app/"Kivy-$app_ver-$git_tag-$app_date"-python3.6.5.dmg;
          else
             ./create-osx-bundle.sh python2 master > output.txt;            
              app_ver=$(Kivy.app/Contents/Resources/script -c 'import kivy; print(kivy.__version__)');
              mv Kivy.app Kivy2.app;
             ./create-osx-dmg.sh Kivy2.app;
             mkdir app;
             mv Kivy2.dmg app/"Kivy-$app_ver-$git_tag-$app_date"-python2.dmg;
          fi;
          yes | rsync -avh -e "ssh -p 2458" --include="*/" --include="*.dmg" --exclude="*" "./app/" "root@$SERVER_IP:/web/downloads/ci/osx/app/";
          popd;
      elif [ "${TRAVIS_EVENT_TYPE}" == "cron" ] || [ "${TRAVIS_TAG}" != "" ] || [[ "$TRAVIS_COMMIT_MESSAGE" =~ "[build wheel]" ]] || [[ "$TRAVIS_COMMIT_MESSAGE" =~ "[build wheel osx]" ]]; then
        mkdir ../wheelhouse;

        for pyver in $PYVERS; do
          git reset --hard;
          git clean -d -x -f;
          pyver_short=${pyver:0:3};

          curl -O -L https://www.python.org/ftp/python/$pyver/python-$pyver-macosx10.6.pkg;
          sudo installer -package python-$pyver-macosx10.6.pkg -target /;
          curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py;
          python$pyver_short get-pip.py --user;
          python$pyver_short -m pip install git+http://github.com/tito/osxrelocator --user;

          python$pyver_short -m pip install --upgrade --user pip;
          python$pyver_short -m pip install --upgrade --user cython nose wheel pillow mock docutils;
          python$pyver_short -m pip install --upgrade delocate;

          USE_SDL2=1 USE_GSTREAMER=1 python$pyver_short setup.py build_ext --inplace>output.txt;
          USE_SDL2=1 USE_GSTREAMER=1 python$pyver_short setup.py bdist_wheel>output.txt;

          /Library/Frameworks/Python.framework/Versions/$pyver_short/bin/delocate-wheel dist/*.whl;
          zip_dir="$(basename dist/*.whl .whl)";
          unzip dist/*.whl -d dist/$zip_dir;
          rm dist/$zip_dir/kivy/.dylibs/libg*
          rm dist/$zip_dir/kivy/.dylibs/GStreamer
          cp /Library/Frameworks/SDL2_mixer.framework/Versions/A/Frameworks/FLAC.framework/Versions/A/FLAC dist/$zip_dir/kivy/.dylibs/;
          cp /Library/Frameworks/SDL2_ttf.framework/Versions/A/Frameworks/FreeType.framework/Versions/A/freetype dist/$zip_dir/kivy/.dylibs/;
          cp /Library/Frameworks/SDL2_mixer.framework/Versions/A/Frameworks/Ogg.framework/Versions/A/Ogg dist/$zip_dir/kivy/.dylibs/;
          cp /Library/Frameworks/SDL2_mixer.framework/Versions/A/Frameworks/Vorbis.framework/Versions/A/Vorbis dist/$zip_dir/kivy/.dylibs/;
          cp /Library/Frameworks/SDL2_mixer.framework/Versions/A/Frameworks/modplug.framework/Versions/A/modplug dist/$zip_dir/kivy/.dylibs/;
          cp /Library/Frameworks/SDL2_mixer.framework/Versions/A/Frameworks/smpeg2.framework/Versions/A/smpeg2 dist/$zip_dir/kivy/.dylibs/;
          cp /Library/Frameworks/SDL2_mixer.framework/Versions/A/Frameworks/smpeg2.framework/Versions/A/smpeg2 dist/$zip_dir/kivy/.dylibs/;
          python$pyver_short -m osxrelocator.__init__ dist/$zip_dir/kivy/.dylibs @rpath/SDL2.framework/Versions/A/SDL2 @loader_path/SDL2>output.txt;
          python$pyver_short -m osxrelocator.__init__ dist/$zip_dir/kivy/.dylibs @rpath/FLAC.framework/Versions/A/FLAC @loader_path/FLAC>output.txt;
          python$pyver_short -m osxrelocator.__init__ dist/$zip_dir/kivy/.dylibs @rpath/modplug.framework/Versions/A/modplug @loader_path/modplug>output.txt;
          python$pyver_short -m osxrelocator.__init__ dist/$zip_dir/kivy/.dylibs @rpath/smpeg2.framework/Versions/A/smpeg2 @loader_path/smpeg2>output.txt;
          python$pyver_short -m osxrelocator.__init__ dist/$zip_dir/kivy/.dylibs @rpath/FreeType.framework/Versions/A/FreeType @loader_path/FreeType>output.txt;
          python$pyver_short -m osxrelocator.__init__ dist/$zip_dir/kivy/.dylibs @rpath/webp.framework/Versions/A/webp @loader_path/webp>output.txt;
          python$pyver_short -m osxrelocator.__init__ dist/$zip_dir/kivy/.dylibs @rpath/Vorbis.framework/Versions/A/Vorbis @loader_path/Vorbis>output.txt;
          python$pyver_short -m osxrelocator.__init__ dist/$zip_dir/kivy/.dylibs @rpath/../../../../SDL2.framework/Versions/A/SDL2 @loader_path/SDL2>output.txt;
          python$pyver_short -m osxrelocator.__init__ dist/$zip_dir/kivy/.dylibs @rpath/Ogg.framework/Versions/A/Ogg @loader_path/Ogg>output.txt;
          python$pyver_short -m osxrelocator.__init__ dist/$zip_dir/kivy/.dylibs @rpath/Ogg.framework/Versions/A/Ogg @loader_path/Ogg>output.txt;
          rm dit/$zip_dir.whl;
          pushd dist;
          python$pyver_short -c "from delocate import delocating; delocating.dir2zip('$zip_dir', '$zip_dir.whl')";
          rm -rf $zip_dir;
          popd;
          /Library/Frameworks/Python.framework/Versions/$pyver_short/bin/delocate-addplat --rm-orig -x 10_9 -x 10_10 dist/*.whl;
          cp dist/*.whl ../wheelhouse/;
        done;

        wheel_date=$(python -c "from datetime import datetime; print(datetime.utcnow().strftime('%Y%m%d'))");
        git_tag=$(git rev-parse --short HEAD);
        wheel_name="dev0.$wheel_date.$git_tag";
        ls ../wheelhouse/;

        for name in ../wheelhouse/*.whl; do
          new_name="${name/dev0/$wheel_name}";
          if [ ! -f "$new_name" ]; then
            cp -n "$name" "$new_name";
          fi;
        done;
        ls ../wheelhouse/;

        openssl aes-256-cbc -K $encrypted_675f1a0c317c_key -iv $encrypted_675f1a0c317c_iv -in ./kivy/tools/travis/id_rsa.enc -out ~/.ssh/id_rsa -d;
        chmod 600 ~/.ssh/id_rsa;
        echo -e "Host $SERVER_IP\n\tStrictHostKeyChecking no\n" >> ~/.ssh/config;
        rsync -avh -e "ssh -p 2458" --include="*/" --include="*.whl" --exclude="*" "../wheelhouse/" "root@$SERVER_IP:/web/downloads/ci/osx/kivy/";
      fi;
    fi;


after_success:
  - if [ "${TRAVIS_OS_NAME}" == "linux" ] && [ "${RUN}" == "docs" ] && [ "${TRAVIS_PULL_REQUEST}" == "false" ]; then
      for version in $DOC_VERSIONS; do
        if [ $version == ${TRAVIS_BRANCH} ]; then
          openssl aes-256-cbc -K $encrypted_675f1a0c317c_key -iv $encrypted_675f1a0c317c_iv -in ./kivy/tools/travis/id_rsa.enc -out ~/.ssh/id_rsa -d;
          chmod 600 ~/.ssh/id_rsa;
          echo -e "Host $SERVER_IP\n\tStrictHostKeyChecking no\n" >> ~/.ssh/config;
          echo "[$(echo $DOC_VERSIONS|tr ' ' ', '|sed -s 's/\([^,]\+\)/"\1"/g')]" > versions.json;
          rsync --force -e "ssh -p 2457" versions.json root@$SERVER_IP:/web/doc/;
          rsync --delete --force -r -e "ssh -p 2457" ./doc/build/html/ root@$SERVER_IP:/web/doc/$version;
        fi;
      done;
    fi;

notifications:
  webhooks:
    urls:
      - https://kivy.org:5000/travisevent
    on_success: always
    on_failure: always
    on_start: always