#
# 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
scala:
  - 2.11.8
services:
  - docker

notifications:
  email: false
  webhooks:
    urls:
      # travis2slack webhook to enable DMs on openwhisk-team.slack.com to PR authors with TravisCI results
      secure: "NzZ1Q8KiPUezZXiIaHxsq07OLycJHOvnHvhjEtztk+XUGm+gjUKJj/OUPVLqLFGbkafORtQScDQlpnrqo1mINb4hv2XVA0ylvSvS+7nzYSzH53H4r9zT3jKRUbiagS9nVItZ4wIsRANM8MkdnBUqk1QgkKTozRih4GsDRV5dRcflLcPMSzIsx5ub0sLKI9k4alny0wpvkGx8c/pvRUFqW2U2ES262X8gbgo1FLkGYMANbNUyxh3I91SRkVTKKUKKPXTQDlFCo6QspX8lhuakt5TVE29IYGPNq4tGVhu+eHnChMrNpOrQojx0wsJTIxvyJX90JDrK6FrUe/HOJmoCitTsDFCwAk5smEcP6L1xHi9hP6zVrVEclF+8pph6KNhrgH2M0qrIZ+Lr/HhVRQ0UJK4T0T2dllUAaOQ9ERr1j3rXe/OAeMlYFiVekgCZsjQ/g64LPnZWMlDf1dHZtAI+eYYm6iWJVfyzz3EfzQQWinltu0eFVRZFskNv5+S+jsg9kIhGshB2jW329qJzevYaQH/dgn9+3kAR8IyB1o1JULAxm6PQCRPDPUTz5x4cyQhhAe5we3vOnb0TwUOEu/hLYwWDsrcMtEXLhOgazawshWZQtXh9e4lMMs8dmrsyCmiu2sFlvH5UYG9+FJVrtUyAXn8v+8OQNDanIWllJvAPG64="

before_install:
  - "./tools/travis/setup.sh"
install: true
script:
  - "./tools/travis/build.sh && ./tools/travis/build_sdk.sh && ./tools/travis/deploy.sh
    && ./tools/travis/test.sh"
before_deploy:
  - "./tools/travis/rename_sdk.sh ${TRAVIS_TAG%@*} ${TRAVIS_TAG##*@}"
deploy:
  - provider: script
    script: "./tools/travis/publish.sh openwhisk ${TRAVIS_TAG%@*} ${TRAVIS_TAG##*@}"
    on:
      tags: true
      all_branches: true
      condition: "${TRAVIS_TAG%@*} = dockerskeleton || ${TRAVIS_TAG%@*} = example"
  - provider: script
    script: "./tools/travis/publish.sh openwhisk dockerskeleton master && ./tools/travis/publish.sh openwhisk example master"
    on:
      branch: master
  - provider: releases
    api_key:
      secure: R+7PrIf0bLqcQJ9XRQX1Arnund9p0CRdn4TQbvK2kz0h69y233FS7JVa+U6mEptzUErLa90PrONDfB/iNC1YLn/pIfGsM2l34CTC0OQPgHRuY6uBg48jM7rRAM3nUHseFHF2o9Hh0zXZRI4lj+nYe1LTR0Xsn50AGtPAeIEHItv4ojGzujgeBZsjBjCSLbEGxRjP8XqAgs/PA4QrmcSXlP4fEwidEOp3wqAaTIpHRksu7nv3j8H3IpWG6M3hAYn0LJcLi5pF4jwsq85H/+BGRp0ZbVW7uZtpl/bI5T0DkmPXEI4ywcwb3w8CCFs9WMNwB9zMs5j3MFX2dzzPNLJ5ostuEY6Vwzz0tdaqEoAB7n2kLd0akKX/WJiu7Jh35Ul3tYhLpNIWmO6bjaYY7fEdtXX1WLBVIlJIEd+wfDd3a85sIFTQj1YT9os1iS4B3vc9tpbw5D51qzqSRNtoAfV3tablp5obddhKe8iLeSB41lY4Qm+K41IgwxWKiRiNXDFkOPaa3MgAanGzzouQYrbShw+k7oCg8yJqX1NH4vP1H1CAa8OCAdw4aa06xHUk9kNQfIeOl4n9pBRL5dS4VGccCKulWf6ZRo3ypmP7sJL/vbrAs/lZJNteImrm0MtCPJq/5H5eOrQ5A/Kd1hkK7kquXYsXATgVFkasHqWUH6lKurE=
    overwrite: true
    skip_cleanup: true
    file: "./build/blackbox-${TRAVIS_TAG##*@}.tar.gz"
    on:
      tags: true
      all_branches: true
      condition: "${TRAVIS_TAG%@*} = sdk"
env:
  global:
  - secure: DG9V6udwMMKoDbFZJCjau0KAdUTPqGCIBvrPCblpXYEH35QcpxR9MfL3A42h4AbQjsmn5sg7zIMkDI1q5Fsvo0ood8z/mrUbPldF5dEnSPwzjV/ErGoFWPdKyPvkyO567XQD2GU7ZL1GjB/marq2qS+zx7ZCbkxAJSOiDS5/c3dD2yt0QHKkMKYt5Au+qs674y2VPNM6gUwtxY8GjyE3I6MubIqmimUAHcdt+PBcIeJOF2CET01KiOUVRUaKlKgSnkKks31ojKMcwwHJue7/KJ1fbUMz1traenGKA2NoD4qR58QRYCB+W47vKvtX6K7jL7w7Ck+IJ3MJOZjP1V8GKoNhfPgxuxZpWnJaZ61iaOYLAkwqr1bicf1qkDzDXE34XouGkocOJWvU4lE9MiuP3VWhpQAeV62pDDxnD8aApmbykCuhcD6cUwbbi7UF2irnOLdDLd8wpP3OCo9faHSqmjlnzzLR+KzZoU5J7P0NXTdLOEwBIyzvQv3s0AvxNazUR7vfA+HDU4qM1dyfKUKBJegAcbWSRpiH593FnWXYDWIn0Ib9ygnk68EfyEFTc4Ns3IZrYIJkOtdXcevU6vpQf8HFwJUxOJOeEKjbu/xNKWTjceBzsgMIk8eq4+Z4Ye84rPI3oQ99UoQlX3QjOyfgHzTH+mctotHM7V8puW3V2wQ=
  - secure: qbHuG/MuxDsW/OZActec2oQDCiuolQPDCdBGc/ExPSe4hWf2xofRAfvYsAd1JXZQgNcy1S11zJ/0RsPFYEo0eJhr/HFpHF0q37R9OqTvvasf0qwh6BQKpdJRq9SJQ1pW7f1wpwJykCBlr/XgVsntZ+ykOFTWnQySC5LivhbBcH21EIMy2WZTWZ6ACitBd798rXz+TgE2rjWLsOwW9MuqGFCcThkYR4auOmA51FjcW2ni77NARYCTojrYpGuKAaMZoo8RjwNfuQXmkzgzKyRDX1LdbE/03+E5Mqf4896ee+O5vCr6SgANnjqhZX1oh2z7UQ9myyrWL4MavZfpg4GWZNcrDsoBPvpfguOQzLBRGc21W2TR1YUK46x8AuoMsMKhrOmlBog3JAedDcNTjq8vNxdRpkSDAJqwuBS+aqTwqq8j2Ec9woXm8ObIzXUQ/X+83iihEHD4TsDhmLDiGJ8NjSOs0E5C1ipQ0tM83Yvcgt4yPyr0LsS9nlNAtTBI7iCxLbsDWgngW+lndYMeA1ytPEYlKwl/nx9s7KV/cLnGBNVpx3vJo4XQwTc/JFO7KVRJTGZ6jdD6vNIDW83AYrocezaYKvQm1GSE9GngM3NNv5uD3OO+pFTowMrh14qK6EdgNvNjyMXHkuskRjPj1PKmP4fCSPGlfltldIwqZQ39QJo=
