#
# 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
dist: xenial
language: java
jdk: openjdk8
services:
- docker
# required to support multi-stage build
addons:
   apt:
     packages:
       - docker-ce
notifications:
  email: false
  webhooks:
    urls:
      # travis2slack webhook to enable DMs on openwhisk-team.slack.com to PR authors with TravisCI results
      secure: "xR0NyWJucuOF8Zmkig0dk6JLxKP5IEuDYCj5Mx2vzyZTqLY85p5l5e3g1Id9xc8H7dDDZxZpxZAO/bd+15Kdtyz7RasJ8ca/AFmSBFLl39CbpfAJumaElayMoVLAGPcR1lCC07H6AVunENuPL16e/jgPmMl5QPo2Fmz7V++n/SBTgJzUXqgbPsB/If7DLphvASI8/pdFethIZsykf4mXfAmvxiDctZYhCo7/BE9g8euuQ2PnTtZzI0c5uZXKizODtTIyF3ZCRddzqHwWmoSAeHX9rkf0Q3AkTcOE20hiWoaqMnr/yr/gecCNMqF2onop6lkfZXFxRZbvDRDL0LGBWM2LRgkYfvU0j3uVpVHHnexUPWfwE+EIhMtdYismp23iUcZTd4uyo5pSMNmLgr8rxs2u7sIxMi31eshRo8QDim8sBMHr04iLdRPlvzu7wqWu97nhKWfxpAzZEQpzYMoglGiKg2U4luzBdMYqtc5xKPXX4vvUCJqOoLhYRX9sMNzgfdCUzFsQfexNkupYGQmxVz5X2ciyvbY3lAz1lce690HikF5A1v51jzWz9cNBoMhcu1DMn+Q9L8rFC5B0tggOTEHHz3ehIQitn5FVc+s0X8rvoIUsM7ayD9lBfrakYdMMwcwBBisEUe0Smh6B80y5rKPMSKauqvHox7llhy+EARM="

before_install:
- "./tools/travis/setup.sh"
install: true
script:
- "./tools/travis/build.sh && ./tools/travis/test.sh"
deploy:
  - provider: script
    script: "./tools/travis/publish.sh openwhisk ${TRAVIS_TAG%@*} ${TRAVIS_TAG##*@}"
    on:
      tags: true
      all_branches: true
      repo: apache/openwhisk-runtime-java
  - provider: script
    script: "./tools/travis/publish.sh openwhisk 8 nightly"
    on:
      branch: master
      repo: apache/openwhisk-runtime-java
  - provider: script
    script: "./tools/travis/publish.sh openwhisk 8a nightly"
    on:
      branch: master
      repo: apache/openwhisk-runtime-java
env:
  global:
    - secure: "WRzgr1fgdA4wntnPNeJQlf//Wk47nc7lAusbF5IUMEYhYC+b/xarVgaK4ozQYieleoB5o9toPdheoCXYfRV2M/qmO9o9FmdCPAJDQx5nkjEqCK2/pfYkU7Ax+EOO1TcKcu1Ea00MsDNZMS8fnuH9rIBbF2LfsCHcfdLgdo4HWApejZw+tp0Lzvmi6nEPg4EWCpM5tfQwwEv3o2GWiEiWRQIQV+YDlmxd+nk++EWmbBwuesF+VN3MIWOpNyX8rCdum1bbPSlEiF+Lcyfrb0/nFgoddgScg6PdrfQSgxe7yvz4mW6ZVBDg0xX64DkTTeSICX+atc84lVfp+QmD5+QaORkmxqTZ5VDsSwzeDCYVDMNrVatkNtXoMiL+73naRZvfHeeqYRSUEGX67snJNlRxgt3t7QL+71y6NerTEnLGGlzP++5GwkjXVnfTuMsPFcfnqUL9sxkjayzp0hAJSA/MtAjgPk62XJEyrRFxHpkymcwwIbbpjwscue2C3mPkzRsrdeIs2jaEwuWmA3jUx0PiDIEuzQtq9vqCoCVjskUk7coF7lzdr5hXx5G7sP0Y4YigJYSmE/tx7HO0fuYc9GfBOlhBLpmTRgCDit7hYRAavqjaf95970VvSACqwY+aqh3zSjiKNcOl8CU7ecOPhlsnBET3Ngk0a/ABs2IDCMaj/5M="
    - secure: "qK7XzPegJ3nTZF9VINaYuneexUvhrEKm3LEw4Coga0No2FbUqSPjCyqH5sim8bSrmiTCAtJAn8isKh9us+Bw0X19SepJK7IlgJvib8otOKLrFGbGBxxj2LJYtweLSd63ZWRfeR/HJr0ASEWpRz2syVG4fflX5//dZARQ0U6q/EVrLDrILWA7oFX6sh6nTeQf6+VSWs2bpDmawABcy0sktj8I64dweio1JHsChSIVToHT8O/xiTS75kkxyBkf9B46P0ZNlNJYCqtnmN8zOonAuvtCFl+/jwWo0LYApHvsFI359goS/vL9Qoq1lCSwzW/jmY+pb/lHiAtUDQ3f6XsggQ6VjekGcEE+PBoijQHnmmJqZTg75b4UTsTsspSDu+32wxFxJFiR9wvqr4UiZxYgfkVj2OmKHx1qdUSSVm4iZeSM7M1aWQGXvW7wvpQZHKAEtLy5rtBAd9GShr8gA3VV24vZa5JweQ5tYEFcuCBhWJqxKRfkqgKkbfcFdgkPnWMyAsPQKQ3z+1leQMk0SvzHMOntI5VxgB8VyLjsVAgBd6D/RSxYG6SO3zAQvlQjuEKnjhGSJRcNL+qljxnETQhcumc66F7A7aQ7k1o3Tz78yXHWlOgjwjhEko1XbAFJ/zEAdQaIeR34Mikaom8oFHRD4ofgFidFl3lnqZBErlC4cDg="
