#
# 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
jdk: openjdk8
scala:
- 2.12.7
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: "VN8+Shkaty+WDhjTuCbVkliH4H2yJ3GMK2cf8pxhQz1Po0qJNxuyO9jDjQRbDG95b0PueBLcK0gMZZkjoe47lg/ZqYMyEFjhKP0J4C0+thokVnM4MoT8xKktWjPyIRK2EfYEdR1UXPtmofNgkZmpwx/GARuuDhAiSo3myMZ2xWQx0ASVsWbkODBePUnnMVv4Hcm0zn9ActFBZW9aJaGjg8Qo+sertESCemWYhreErdXtXV4prlWJo2LytpUuXIAWLFnutYu6TJw2I7gBaRkbLN+4N7qSgddcfVUdBf8j6NqWwUz6BqLqDSZ031lKCIlTNpS/Yu/+9qgI/aBZ9a0l+Nv4o0V0nWTZ0aAkw3/HtZ3muDHHs7ninMq9IFgGRUR4jX4OgUV8Pu8OKEHYcUF0S0XiXbTfLIxI3OirBBlxweunMKtjyOUOLdWcmT2XQLYJGU7cdiG3SE+ONo7kR+BugUtqSzgCnRRxE4m4wkZHqOfyRI2b3RVCtEQHfewevZnDCbxYxZn+v1mMjE4zuenhu+hbtsvQbbX+x1MeDaL8RYrwjXXf+TrILhnj1xkuHTWAgKQhh6pP+ZaNqNLmmSLOqaI/v8Ysi4rSbkR2Pa3k0/ze/tPdjqoD8vFZMPrSLYOWTqZYQCFF5FA72DECFP04tnb0hz5c4joxGJpRlKs1MW8="

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: D4kU9O6bs63Myb4jaEgw1O2Kuy6aTAUKEX1qZ0eYMDouLnPOPnZaFWmpISKTrJyz7hJH7yY8Cj7xl5qwsLB6JZZMtqT6yj5J/jkUJjyLKdQH81PrYy22rH99xS2t5A1dsC0A/Bf39R/qNc5tx1wCMVDF4O2rFsUtn+8vE+rn0nXsiPeWhhZagk/Hrq8YbwzDJHOGHfWe1nZIcU8MORzTriX7J2VAF0AcirPandMxff4FgzNLk432DN2GvgZIlNtZGT1DWLtJV/Sp3unD9abXr5xqNDIW+fHrMq8j/JdHC6+PFtZRFrl0Vr6X8c61PkB/ELGF2MyzNgBTnEaJixl1pianr91WK4y0oLUwpSJCz4yoQGVimAAtqMgNXjEyFMcpLClzS5TjMXKaUfi9mBn9GMCwLi3VAuVtMtH2IRW03PxIPyxkbj1j8Nrd0jh408MuMpuzyECgb+E5ffbd+0YD5XUNlTkYLFi4sEh2xpzvjGrNbrTe99zFrHt3e+dbmoahmaCyDRsxD2CDI8b++HyN78z/jO9A7kFc2TAZbWa6Xygkj1nEpnR1y4TB6eqdDo7Y6W20dLjeSSF8rACw3bM3lJh+K4/nv4Nlo6pfblhvs7T53ftst+tHpxJoQy/gDC0TcuyBThrHTeI1j7k4HkQyN+NqezBdFN2ElufjQ74ds2c=
  - secure: KzgDAV8O0ya6JBqSs4J4A7A+2n9Mgs5kRzhwwPdUg7ExuG2xXwWw1gafNPZwagfVOQfdqLzfF4tY8PPbTfloqEomFmYI/9PUHU8nMiMQkhEKkU3Od6HqqV9/WCf9vBrmqZHTPQNRVUvsbcOiYG1xtQr4JPHySJnk9VbgumRCT+f0xWK5mGK3CQqIo43F0TScjMONED/h7yueT+zFIJIfTiOXgtckbZdi7hErrVubbkduyzGSMek1Pfzy+m7Ek6jIaS4iD6duSRfxO9GVDTMee13cD3HuIWWfkZMkNiMlXBLmOPhb67lt/dgryxZ9zKxCzJFDW3Fx8uohoFu+sg8ZcyCeeDqMUfeML8rKAdNk72e2W9Vzedx6lxoTIhLYA3KLj7kL5wTxEq9QnSI/dMPqJUG/IA7Cr5fnJWRAlJ3IroQqBH8vNZ9zuoh/Ap4G2kXL1m4JECPhBlsX8i9RgDrFrab4My2IOHBw+ZA+cJ4h5njQUkuhMtlAhJ26jwQgYhn/sSMLgb4h5IX2iiRprsrg912vFg0ZrgHu1joIH/1XEGdArkQ7O9za4mowEmOuATux0drXTRKGe6z+/xaW35K8tQ52ToJRMN+GZBKlZoNIZd/rQ/y1Ikb6PD5Gfjk0WBnxYT5jV+ted7zCq3LskpWyvXtVTKoOqPOC/cDcY5JBPK8=
