dist: trusty
language: python
cache:
  directories:
  - "$HOME/.cache/pip"
  - "$TRAVIS_BUILD_DIR/.tox"
os:
- linux
matrix:
  fast_finish: true
  allow_failures:
  - os: osx
  include:
  - python: 2.7
    env: TOX_ENV=py27-aws
  - python: 2.7
    env: TOX_ENV=py27-azure
  - python: 2.7
    env: TOX_ENV=py27-gcp
  - python: 2.7
    env: TOX_ENV=py27-mock
  - python: 2.7
    env: TOX_ENV=py27-openstack
  - python: 3.6
    env: TOX_ENV=py36-aws
  - python: 3.6
    env: TOX_ENV=py36-azure
  - python: 3.6
    env: TOX_ENV=py36-gcp
  - python: 3.6
    env: TOX_ENV=py36-mock
  - python: 3.6
    env: TOX_ENV=py36-openstack
env:
  global:
    - PYTHONUNBUFFERED=True
before_install:
    - |
      case "$TRAVIS_EVENT_TYPE" in
        push|pull_request)
           # Check whether we need to run a test for this provider
           DOCS_REGEX='(\.rst$)|(^(docs))/'
           FILES_IN_CHANGESET="`git diff --name-only $TRAVIS_COMMIT_RANGE`"
           echo "$FILES_IN_CHANGESET" | grep -qvE "$DOCS_REGEX" || {
              echo "Only docs were updated. Stopping build process."
              exit
           }
           echo "$FILES_IN_CHANGESET" | grep -qvE "$DOCS_REGEX|(^(cloudbridge/cloud/providers))" || {
              echo "Only docs and providers were updated. Checking whether this provider was changed."
              # Extract env and provider from $TOXENV into $PYENV and $PROVIDER respectively
              IFS=- read PYENV PROVIDER <<< "$TOX_ENV"
              echo "$FILES_IN_CHANGESET" | grep -qE "^(cloudbridge/cloud/providers/$PROVIDER)" && {
                 echo "This provider was affected by this changeset. Running tests."
              } || {
                 echo "This provider was not affected by this changeset. Stopping build process."
                 exit
              }
           }
           ;;
        *)
           echo "Build triggered through API or CRON job. Running regardless of changes."
           ;;
      esac
install:
    - pip install -U pip
    - pip install -U setuptools
    - pip install tox
    - pip install coveralls
    - pip install codecov
script:
    - tox -e $TOX_ENV
after_script:
    - |
      case "$TRAVIS_EVENT_TYPE" in
        push|pull_request)
           # Don't run coverage if tests or cloudbridge interface was not affected
           DOCS_REGEX='(\.rst$)|(^(docs))/'
           FILES_IN_CHANGESET="`git diff --name-only $TRAVIS_COMMIT_RANGE`"
           echo "$FILES_IN_CHANGESET" | grep -qvE "$DOCS_REGEX|(^(cloudbridge/cloud/providers))" && {
              coveralls; codecov;
           } || {
              echo "Only docs and providers were updated. Not running coverage."
           }
           ;;
        *)
           echo "Build triggered through API or CRON job. Running regardless of changes"
           coveralls; codecov;
           ;;
      esac
