#
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements.  See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License.  You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#

sudo: required
group: deprecated-2017Q3
language: scala
services:
- docker

notifications:
  email: false
  webhooks:
    urls:
      # travis2slack webhook to enable DMs on openwhisk-team.slack.com to PR authors with TravisCI results
      secure: "ZGbbsXqN4Vv0Vkz5USmtKa43X3/OpLtVm0ELME2vVTei09O41qhsF3Tm0MIm/EIKQkt/wdUXoF5GFImdzn9dXYevhapHBA3qOjzhyv0nMWMBYddb/b8kfGnRuhd1YpNMc1VMTj21CPE0zhlUe1NsfOW1KF901pKxaNg6pAHC8M7ngTI1vMJI2Y3B1gG2jgJBpbjxZsERo4FhFwmcYUZXNWFwqk7ERnwJPs5AxrLHb4d9+l20TgCQe+q/PKd7cyIGbeemxrDxjxijUV3tOFwN0aOrSjBOUDHUFiF7+UqzTUkjUtu3x0gOwS5dF8Dcg9sAGXZaal66bS1ckzNNnYvgGPO8NvnTll6Ootr/qC5pLw3+zh9TiXzrcQR7rIDeeei35SLyy1szWl67lGaVWXHSGXluCip+EbRixvTxK/Fyiztgq1S1SoNNvTX5J5wTSy2klEM7ZnCoT9iFMFr51nmcsmDZwD3abiO4rjFGI2G0ZewDy3gqOo87eoHksT46up4jmDlEz6XjQlPe8Of10ZrHRkIsETzMFeE+AMUX0aLFQ5QJPMlx1iUOhQcDzonstcOUV3F8+fVWkfeF2LTO1pJcyVtGr0wy6s1R+89U27IHTORoYHLi2YJY5a4Y0KUkT8E9Ni2CSL5sLicirsKsj2uL4rMx5zrS/1YjnXnp1DO27fw="

env:
  global:
    - secure: "mcetIxtKfafXO2995cC5qZJ6XEjftm7zC+GV639SB+AAiXznrr7vrf0//kYiPvqLW5a8xouPH3TU4nr81ncRdhml3zG4Du2ee0vLdLD8AytJ44vsThhazzsX6ALXC3A0E8WnOK5jmsyBkM7LK5efGhhB0IXByAnpHa2YIo6wR217Q4VkxbknNT+xInMmvQT+VRJTfrkhPgeF9HB1uCaiBRs4wyor8rhwQdxwGL6Ox5CyGjI/CT+YkpuaJP+fIgoZm4b0Gfwko5jVwsj8Rpttstwf7xxTMUCZ8OvDxTHao6NgMXn3NZ/rtjqzTerRuyKAYhZr3qc/G2WnbsUwukF3vV//2FfkLdu7H/AkaWpDK4T9o3vPrxPitGwCMIIz0IQPK2JNgWGt2L1r7J3WJn4BSwWDHGLY/AvFHj9QAPbl5X1pO4UBPO9oo3LQdE+qyCQQwz2pZRU6RFqVH5N8Ux6g8aX2I2NUqyylMnxYSwLwN5dN+eFBJEFgbfrRJJs30+BoQnock4F3TVOfDUticpTRgXXLDfWn9pP8ZKxXSCjPbEoXzweKlG7PLp+BgqpJCWiKPqqpNS5t5L4Oith9y2JItaswNpP+s/5HX+/pjHZALgFEgHyKFtlQXq7BhZuEuuOJR9qgCnE0uCzJYMlhiaA+QUVb4adFOVMsEKDj1MeD9/c="
    - secure: "ZXHijfwgR7FQgssFZlat664jLwPvYrOXQyFvH0+VAiv6S7kiTa8f0fnxw0V25T73dUZHzxBTsqMIhEoysPzcUoUZw6BXpKu02hKSMdrUDPc4eyWMwZDZW9p5LAG3tv1L4LotHaSWdfxBpcJZop0CqxkCVGHnhV7p9MldkF3CxuVVRieofQqsJqdv+pnFbqHl0ibwIog4Bhp+YQklGOs2ytwlW2RcpKscURCUdBCU1APruQJRm04tU1KSlYw1mkwQlPkUcXnwCLmq3aTJwo9fFbTPVZ84iXfG6PIYa6oKjUvSp3GilWsh4yl328WjojbxrjTkwpqTEux4/rpF/CBHHjUL1tmBxnCwKby1GTAHkLbvQZnuLCgG0IsykoEgsoQnNeAqGpWFoR+9kffN+uNckVi1Xxgk3yefXPzm9I1ALN3/R11SLK7aSmaKi6rixD9JLXQmFDMwJdPw04gn4kqVXVeJhFq42eo2E81whTxqpzEp323ogCRbD7qHCKbp7SYw5jsMPJtS0Yizz6bdp+vnZQSUQuI78JbQnTy7ls7XbTDMBVbyH7dOB7kVIHpKPnzAxbkQ+92WmVq6rrLzrtsj86joboS1O2gpQjblpdwZgkO+DCLXvUexZBei64TBRzz3sxRiYnxxiXjnSoCQjOAolYD/dRkdWAz0ilUtOr+h5o8="

before_install:
  - npm conf set strict-ssl false
  - ./tools/travis/setup.sh

install: true

script:
  - ./tools/travis/build.sh

deploy:
  # deploy nightly
  - provider: script
    script: ./tools/travis/deploy.sh openwhisk pluggable_feed_provider nightly
    on:
      branch: master
  # deploy tag
  - provider: script
    script: ./tools/travis/deploy.sh openwhisk pluggable_feed_provider $TRAVIS_TAG
    on:
      tags: true
      all_branches: true
