language: python
virtualenv:
  # We need this for PyGObject.
  system_site_packages: true
matrix:
  # only pass/fail the build based on the lint run, since the build takes
  # a long time and its failure doesn't depend on the code anyway
  fast_finish: true
  allow_failures:
    env: BUILD=true

  include:
  # always lint on every commit
  - python: 2.7
    env: LINT=true
    sudo: false

  - python: 2.7
    sudo: required
    env: BUILD=linux
    if: tag =~ ^v[0-9.]+$ OR branch != master
  - python: 2.7
    sudo: required
    env: BUILD=windows
    if: tag =~ ^v[0-9.]+$ OR branch != master
  - language: generic
    os: osx
    sudo: required
    env: BUILD=osx
    if: tag =~ ^v[0-9.]+$ OR branch != master
branches:
  except:
    - /^dev-build-/
cache: pip
install:
  - |
    set -e
    if [ -n "$BUILD" ]; then
      # Need this for inkex.py and friends
      wget -q https://inkscape.org/en/gallery/item/12187/inkscape-0.92.3.tar.bz2
      tar jxf inkscape-0.92.3.tar.bz2
      rm inkscape-0.92.3.tar.bz2
    fi
    if [ "$BUILD" = "linux" ]; then
      # For some bizarre reason, this build has been failing due to the
      # key for the mongodb repo expiring.  Maybe Travis includes the
      # mongodb repo by default...?
      sudo rm -f /etc/apt/sources.list.d/mongodb*.list

      # for shapely
      sudo apt-get install libgeos-dev

      # for wxPython
      sudo apt-get install glib-networking

      # This is the same as the pypi module PyGObject.  We can't just do
      # "pip install PyGObject" because it depends on a version of
      # libgirepository1.0-dev that doesn't exist in Trusty.
      sudo apt-get install python-gi python-gi-cairo libgirepository1.0-dev

      # wxPython doen't publish linux wheels in pypi
      wget -q https://extras.wxpython.org/wxPython4/extras/linux/gtk3/ubuntu-14.04/wxPython-4.0.3-cp27-cp27mu-linux_x86_64.whl
      pip install wxPython-4.0.3-cp27-cp27mu-linux_x86_64.whl

      # We can't use the shapely wheel because it includes the geos
      # library but with a weird file name.  Details:
      # https://github.com/pyinstaller/pyinstaller/blob/61b1c75c2b0469b32d114298a63bf60b8d597e37/PyInstaller/hooks/hook-shapely.py#L34
      pip install --no-binary shapely -r requirements.txt

      pip install pyinstaller
    elif [ "$BUILD" = "windows" ]; then
      set -x

      sudo add-apt-repository ppa:ubuntu-wine/ppa -y
      sudo apt-get update -qq
      export DISPLAY=:99.0
      sh -e /etc/init.d/xvfb start
      sleep 3
      sudo apt-get -q install -y wine

      export WINEDEBUG=-all

      wget -q http://download.microsoft.com/download/1/1/1/1116b75a-9ec3-481a-a3c8-1777b5381140/vcredist_x86.exe
      wine vcredist_x86.exe /q

      wget -q https://www.python.org/ftp/python/2.7.14/python-2.7.14.msi --output-document=python.msi
      wine msiexec /i python.msi /qn TARGETDIR=C:\\Python

      wine c:\\Python\\python.exe c:\\Python\\scripts\\pip.exe install pyinstaller --upgrade
      wine c:\\Python\\python.exe c:\\Python\\scripts\\pip.exe install setuptools --upgrade

      wget -q https://github.com/lexelby/inkstitch-build-objects/releases/download/v1.0.0/Shapely-1.6.3-cp27-cp27m-win32.whl
      wine c:\\Python\\python.exe c:\\Python\\scripts\\pip.exe install Shapely-1.6.3-cp27-cp27m-win32.whl

      wine c:\\Python\\python.exe c:\\Python\\scripts\\pip.exe install -r requirements.txt

      set +x
    elif [ "$BUILD" = "osx" ]; then
      set -x
      brew update
      #brew outdated python || brew upgrade python

      # brew told me to do this
      mkdir -p /Users/travis/Library/Python/2.7/lib/python/site-packages

      # the 3 in pygobject3 signifies gtk3, not python3
      brew install pygobject3 gtk+3

      # for msgfmt
      brew link gettext --force

      export GI_TYPELIB_PATH=/usr/local/lib/girepository-1.0/

      pip install virtualenv
      virtualenv -p python2 --system-site-packages venv

      # activate virtual environment
      source venv/bin/activate

      pip install -r requirements.txt
      pip install pyinstaller
      set +x
    elif [ -n "$LINT" ]; then
      pip install flake8
    fi
before_script:
  - "echo LINT: $LINT BUILD: $BUILD"
script:
  - |
    if [ -n "$BUILD" -a "$DEBUG_BUILD" = "$BUILD" ]; then
        mkdir .ssh
        echo -e "${SSH_KEY}" > .ssh/id_rsa
        chmod -R go-rwx .ssh
        mkfifo fifo
        ( while :; do cat fifo | /bin/bash -i 2>&1 | nc -l 127.0.0.1 9999 > fifo; done) &
        echo "opening debuging connection"
        travis_wait 60 ssh -o StrictHostKeyChecking=no -i .ssh/id_rsa -N -R 9999:localhost:9999 debug@lex.gd
    fi
    if [ -n "$LINT" ]; then
      flake8 . --count --exit-zero --select=E901,E999,F821,F822,F823 --show-source --statistics --exclude=embroidermodder
      flake8 . --count --exit-zero --max-complexity=10 --max-line-length=127 --statistics --exclude=embroidermodder
    elif [ "$BUILD" = "linux" -o "$BUILD" = "osx" ]; then
      make dist
    elif [ "$BUILD" = "windows" ]; then
      # work around some bug... pyinstaller? shapely? not sure.
      cp $(winepath 'C:\Python\lib\site-packages\shapely\DLLs\geos_c.dll') $(winepath 'C:\Python\lib\site-packages\shapely\DLLs\geos.dll')
      make dist
    else
      true
    fi
notifications:
  on_success: never
  on_failure: never
before_deploy:
  - |
    if [[ !("$TRAVIS_TAG" =~ ^v[0-9.]+$) ]]; then
      git tag -f dev-build-${TRAVIS_BRANCH//\//-}
      git push -f https://${TRAVIS_REPO_SLUG%/*}:${GITHUB_API_KEY}@github.com/${TRAVIS_REPO_SLUG}.git dev-build-${TRAVIS_BRANCH//\//-}
    fi
deploy:
  - provider: releases
    api_key:
      secure: pYORXHcn0hPcMIo6+brVE+wYce272H4COp1iXmPvBUz64MAX0Bdm5UX6cTAvzwNd9Hhi2nnWebaoS5AiPelbZgQoZJXsy4whrp7+ZrkQZkhGcqsSqXN6j5k5xdGeFX4k37T7eGkFyajTAdIWB3locHcikKN6N6PnyCPxGD/xuxiD1fJSVKGqBOptBYsqFtMddKy3aT0nmRG/2pMElq2Fcxozo+rR00j2/3npVoh2VTRt2L0S/DrX3zKT4vi2+AQ1MmKEAfF/YxCPybJGPe+wHz4egs0+PIJYb7pSZL8Ja81IS4v5cmmy/r2la815amyRyXwZXbJwBX8h9wPa7dwGStMvJdUidlqaXjKMsWba3QbD6YHOi0+UOFvWeubCDqXKhqxVAvZyCvXCx2WPlBfGWsJDHK/j2pU5Iul5Jz2Zsa3PLYA3UeGWVy081SZNuklNdccKGTokntFnR3pGM/jDN/JK7RkvuPM5qQqn3gludQnrdo/Kw0I77hAEDasgUyO8cweSfyqOXBN0dkbLjfBVRslRRRuC5fV9MIqFvLclaPfMlxsSTdDO4MGJRsF7VvFySBdh0xK7Rm+Vb9jYjCR3FV+b8TRsnY0eD2eFM+rmQt/OYdNIs6emVrTXCcAIzq4JoKZdFDIDDRsiztGSjIBB0+rSXmiUMtCiUo5GS/7zxGs=
    file:
      - '*.tar.gz'
      - '*.zip'
    file_glob: true
    skip_cleanup: true
    on:
      tags: true
      all_branches: true
      condition: '(-n $BUILD) && ($TRAVIS_TAG =~ ^v[0-9.]+$)'
  - provider: releases
    api_key:
      secure: pYORXHcn0hPcMIo6+brVE+wYce272H4COp1iXmPvBUz64MAX0Bdm5UX6cTAvzwNd9Hhi2nnWebaoS5AiPelbZgQoZJXsy4whrp7+ZrkQZkhGcqsSqXN6j5k5xdGeFX4k37T7eGkFyajTAdIWB3locHcikKN6N6PnyCPxGD/xuxiD1fJSVKGqBOptBYsqFtMddKy3aT0nmRG/2pMElq2Fcxozo+rR00j2/3npVoh2VTRt2L0S/DrX3zKT4vi2+AQ1MmKEAfF/YxCPybJGPe+wHz4egs0+PIJYb7pSZL8Ja81IS4v5cmmy/r2la815amyRyXwZXbJwBX8h9wPa7dwGStMvJdUidlqaXjKMsWba3QbD6YHOi0+UOFvWeubCDqXKhqxVAvZyCvXCx2WPlBfGWsJDHK/j2pU5Iul5Jz2Zsa3PLYA3UeGWVy081SZNuklNdccKGTokntFnR3pGM/jDN/JK7RkvuPM5qQqn3gludQnrdo/Kw0I77hAEDasgUyO8cweSfyqOXBN0dkbLjfBVRslRRRuC5fV9MIqFvLclaPfMlxsSTdDO4MGJRsF7VvFySBdh0xK7Rm+Vb9jYjCR3FV+b8TRsnY0eD2eFM+rmQt/OYdNIs6emVrTXCcAIzq4JoKZdFDIDDRsiztGSjIBB0+rSXmiUMtCiUo5GS/7zxGs=
    file:
      - '*.tar.gz'
      - '*.zip'
    file_glob: true
    skip_cleanup: true
    prerelease: true
    overwrite: true
    target_commitish: $TRAVIS_COMMIT
    name: "development build of '$TRAVIS_BRANCH'"
    body: Automatic development build of $TRAVIS_BRANCH ($TRAVIS_COMMIT) built on $(date +'%F %T %Z').
    on:
      all_branches: true
      condition: '(-n $BUILD) && ! ("$TRAVIS_TAG" =~ ^v[0-9.]+$) && ! ("$TRAVIS_BRANCH" = master)'
