# Copyright (c) 2016-2017 Martin Donath <martin.donath@squidfunk.com>

# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to
# deal in the Software without restriction, including without limitation the
# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
# sell copies of the Software, and to permit persons to whom the Software is
# furnished to do so, subject to the following conditions:

# The above copyright notice and this permission notice shall be included in
# all copies or substantial portions of the Software.

# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
# IN THE SOFTWARE.

language: node_js
sudo: false

# -----------------------------------------------------------------------------
# Regular builds
# -----------------------------------------------------------------------------

# Node.js versions
node_js:
  - 5
  - 6
  - 7

# Limit clone depth to 5, to speed up build
git:
  depth: 5

# Cache dependencies
cache:
  pip: true
  yarn: true
  directories:
    - node_modules

# Install yarn as Travis doesn't support it out of the box
before_install:
  - npm install -g yarn@v0.22.0

# Install dependencies
install:
  - yarn install --ignore-optional
  - pip install --user -r requirements.txt

# Perform build and tests
script:
  - yarn run build

# -----------------------------------------------------------------------------
# Additional builds
# -----------------------------------------------------------------------------

# Matrix for additional builds
matrix:
  include:

    # Build release and docker image and send to PyPI and Docker Hub.
    - node_js: 5
      services:
        - docker
      env:
        - __TASK=RELEASE

      # If we're not on a release branch, exit early and indicate success
      before_install:
        - echo "$TRAVIS_BRANCH" | grep -qvE "^[0-9.]+$" && exit 0; :;

      # Install wheel for build
      install:
        - pip install wheel

      # Perform build
      script:
        - python setup.py build sdist bdist_wheel --universal
        - docker build -t $TRAVIS_REPO_SLUG .

      # If build was successful, publish
      after_success:

        # Install twine and push release to PyPI
        - pip install twine
        - twine upload -u $PYPI_USERNAME -p $PYPI_PASSWORD dist/*

        # Push to Docker Hub
        - docker login -u $DOCKER_USERNAME -p $DOCKER_PASSWORD
        - docker tag $TRAVIS_REPO_SLUG $TRAVIS_REPO_SLUG:$TRAVIS_BRANCH
        - docker tag $TRAVIS_REPO_SLUG $TRAVIS_REPO_SLUG:latest
        - docker push $TRAVIS_REPO_SLUG

#      # Build visual tests separately - temporary disabled until tests stable
#     - node_js: 5
#       addons:
#         artifacts:
#           paths:
#             - gemini-report
#         apt:
#           sources:
#             - ubuntu-toolchain-r-test
#           packages:
#             - gcc-4.8
#             - g++-4.8
#       env:
#         - CXX=g++-4.8
#       install: yarn install
#       script: yarn run test:visual:run