language: generic

cache:
  - pip

sudo: required

dist: trusty

branches:
  only:
    - master
    - /v\d+\.\d+.\d+/

notifications:
  email: false

env:
  global:
    # used by ci-helpers
    - SETUP_XVFB=true
    - PIP_DEPENDENCIES='hacking pytest pytest-qt'

    - MPLBACKEND=TkAgg  # for osx
matrix:
  include:
    - os: osx
      env:
        - PYTEST_QT_API=pyqt5
        - PYQT_PACKAGE='pyqt=5'
        - PYTHON_VERSION=3.6
        - RUN_PYINSTALLER=true
    - os: linux
      dist: trusty
      env:
        - PYTEST_QT_API=pyqt4v2
        - PYQT_PACKAGE='pyqt=4'
        - PYTHON_VERSION=2.7
    - os: linux
      dist: trusty
      env:
        - PYTEST_QT_API=pyside2
        - CONDA_CHANNELS='conda-forge'
        - PYQT_PACKAGE='pyside2'
        - PYTHON_VERSION=2.7
    - os: linux
      dist: trusty
      env:
        - PYTEST_QT_API=pyside2
        - CONDA_CHANNELS='conda-forge'
        - PYQT_PACKAGE='pyside2'
        - PYTHON_VERSION=3.6
    - os: linux
      dist: trusty
      env:
        - PYTEST_QT_API=pyqt5
        - PYQT_PACKAGE='pyqt=5'
        - PYTHON_VERSION=2.7
    - os: linux
      dist: trusty
      env:
        - PYTEST_QT_API=pyqt5
        - PYQT_PACKAGE='pyqt=5'
        - PYTHON_VERSION=3.6
        - RUN_PYINSTALLER=true

install:
  # Setup X
  - |
    if [ $TRAVIS_OS_NAME = "linux" ]; then
      sudo apt-get update
      # Xvfb / window manager
      sudo apt-get install -y xvfb herbstluftwm
    elif [ $TRAVIS_OS_NAME = "osx" ]; then
      brew cask install xquartz
    fi

  # Setup miniconda
  - git clone --depth 1 git://github.com/astropy/ci-helpers.git
  - CONDA_DEPENDENCIES=$PYQT_PACKAGE source ci-helpers/travis/setup_conda.sh
  - source activate test && export LD_LIBRARY_PATH=$CONDA_PREFIX/lib:$LD_LIBRARY_PATH
  - pip install .
  - rm -rf ci-helpers miniconda.sh

before_script:
  - if [ $TRAVIS_OS_NAME = "linux" ]; then (herbstluftwm )& fi
  - if [ $TRAVIS_OS_NAME = "osx" ]; then (sudo Xvfb :99 -ac -screen 0 1024x768x8 )& fi
  - sleep 1

script:
  # Run flake8
  - flake8 examples labelme setup.py tests

  # Run pytest
  - pytest -v tests

  - labelme --help
  - labelme --version

  - (cd examples/primitives && labelme_json_to_dataset primitives.json && rm -rf primitives_json)
  - (cd examples/tutorial && rm -rf apc2016_obj3_json && labelme_json_to_dataset apc2016_obj3.json && python load_label_png.py && git checkout -- .)
  - (cd examples/semantic_segmentation && rm -rf data_dataset_voc && ./labelme2voc.py data_annotated data_dataset_voc --labels labels.txt && git checkout -- .)
  - (cd examples/instance_segmentation && rm -rf data_dataset_voc && ./labelme2voc.py data_annotated data_dataset_voc --labels labels.txt && git checkout -- .)
  - (cd examples/video_annotation && rm -rf data_dataset_voc && ./labelme2voc.py data_annotated data_dataset_voc --labels labels.txt && git checkout -- .)

  - pip install lxml  # for bbox_detection/labelme2voc.py
  - (cd examples/bbox_detection && rm -rf data_dataset_voc && ./labelme2voc.py data_annotated data_dataset_voc --labels labels.txt && git checkout -- .)

  - pip install cython && pip install pycocotools  # for instance_segmentation/labelme2coco.py
  - (cd examples/instance_segmentation && rm -rf data_dataset_coco && ./labelme2coco.py data_annotated data_dataset_coco --labels labels.txt && git checkout -- .)

  # Run pyinstaller
  - |
    if [ "$RUN_PYINSTALLER" = "true" ]; then
      # Cleanup
      pip uninstall -y $PIP_DEPENDENCIES

      # https://github.com/wkentaro/labelme/issues/183
      if [ $TRAVIS_OS_NAME = "osx" ]; then
        pip uninstall -y Pillow
        conda install -y Pillow
      fi

      # Build the standalone executable
      pip install 'pyinstaller!=3.4'  # 3.4 raises error
      pyinstaller labelme.spec
      dist/labelme --version

      # Create ZIP files for release
      cd dist
      zip labelme-$(uname).zip labelme
      if [ "$TRAVIS_OS_NAME" = "osx" ]; then
        zip -r labelme.app-$(uname).zip labelme.app
      fi
      cd -
    fi

before_deploy:
  - git config --local user.name 'Kentaro Wada'
  - git config --local user.email 'www.kentaro.wada@gmail.com'

deploy:
  provider: releases
  api_key:
    secure: S42xawauDsZqLpdRy5d3nAo5Enh6tcJR6IAKwRp4T5+P/ZgXmoSJ81HQrmiUXLJTdvMMjRRr2H/2GuX+WoNHiFLlGY43bWu8GkK1qRslJxC+Fh8+VdIrhVcOFf7xhvhuV26KZxu4uh2lp95p10Crpj4Y3GkxguHjbF+F9c0vEVlEmmgyVsj6c2tFzIXVa4LPuFFDf9yWPl5Sp1n60Y8fDaEOoVbK63vh8pngFE8t2anQl5oNOcLf29t8IciPyo70p1p0UdKZ5a6YsPgu+/x2rPG1uroUksD9s9kY33vL/2D77frGv1eZFNk7TH31LV1TlG3JWklC8tqVG7Qklm4+Hnk+OEo/1uyWeDLJX8IOwy25hbg5VMFkQTZYWhCYg3IihdHbRJL4FAyTasYbEUrkmxniRnLCD8EL6gFHV1zZuv7ACCcdJHZz70sp/eiKZ5TwGRM+qnSNjd9Y4IyRv25vRsZo/8EPKShcKD1ik5OQNc2hw3uM6KLnV6lRCmZ1WSVz08bkLn5X+lzAyw1Bop2ZNdlS9N8qSfRMn2f30ORCVmNP/EKFFIDbt4wkd1XkAG/bF4LFD9VeSTp6RXcie/C/SfwBjgn0hqhdQ/n6Ptcba77OXWnKAc35GkWPs3+axBrYMZno68ne8DlcWIdT2RAeuMVzQMHT52ddvx3oQ6cUXs4=
  file_glob: true
  file: dist/*.zip
  skip_cleanup: true
  on:
    tags: true
    repo: wkentaro/labelme

after_script:
  - true  # noop
