#
# 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
jdk: openjdk8
language: java

services:
  - docker
# required to support multi-stage build
addons:
  apt:
    packages:
      - docker-ce

before_install:
  - "cat /etc/os-release"
  - "./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-ruby
  - provider: script
    script: "./tools/travis/publish.sh openwhisk 2.5 nightly && ./tools/travis/publish.sh openwhisk 2.6 nightly"
    on:
      branch: master
      repo: apache/openwhisk-runtime-ruby
env:
  global:
    - secure: "Jhztev8LZIacb8tqAkXvfIgs4r6QDJDSjLAh4GnJw7pN0tmf0V0IL59xXSEU9r/hSn7oZ42oK9RgD9cYAiNbwB39FVD8KJe4S/BvWEQ7IbTSsSmVKxgDYgETyaNwQkd/NRMCFsv61+FboNC9nVo1h1yvV6CXR1Uph8jD5n/mhUrPxgB/8+cwp25oRemFrPNb4c+VXUwD4LDyCMqEcXX15mTnxtBft5so5Ew2Xc3icu7sfjKooth9Cz1j7b3fVIUFxeyTb1pO0RS8lxet9+wWPJZd8pHelTbBw1LrViH6d+th+U85kjjMyAiHCSKzqJ1W44bQHDFVlODGnLw5KEd/01Tz+9mAuAh4vP4XUQ1HqnwQGHjqyM9BxBVgaERwzn+qtNBoNAi+StLgJGMvt6/2+vjiXMemfRh5uZDVzW4T0e1puLwwxIO6zNMo9+nY8MZhbsRerj7ZlKrEc9lPD9E6dIf5OZ82IXbFPr/6kihj5cR8takvB7ncM/jVp8NyGaZJ+yvq3IOKg5X+FM6BX4+qYHLO0Ic4yA7xZadn5hBoMj79eLBXckm7fbFdpzdDTPU8063a0gi8HiYdRblsG9888TozE8HRJO15b4TKw6CdhqsF2YGosnOZdukzF4TIIxnDCCTnyjaVcOA2In4C3568x3lGYfZPM13ajQUkiXwKzaw="
    - secure: "WfnrJhfQZLPi0DRVFo4PJxAU5Upnda1OC/G1woAplMzhNQVmiwJl+xvHKZKTj3P1DsUi/DWESxy0IOhcA3YG3rYrZTXZ08WonO+A/A+parm6jBShmZDrZDMaTLeN9rxr9Y6yTYRBrsbq1Qv5sgAWPgnkcs21nVd/CSPAmUIFrUbz0vdA/KQTRSC0lri4P6Lqajo8yVlblSgQrFbtxTAapaVQ9/zi/rzldkO3B+nuN7xSeVx1ARaAfHjoMdRO7OsjiW8FRzouNVCgCmVfw8x2+zmDidAjJjy1l0prtJeSyK6yfEVBUU/aD1Q9t4PYOjPnz57I2TnF3f9GJyT8pqfK6vosO3oYneREN5k/8t/Urt3gqnP3wY6Biq97mmhpsXYcjYMTng+rURWcX5bW2aufDgeggUcOgoJE6kOGwqO1b0kSlRsGF/mryECqSU85eKGnf1y2dQDnV/nO65DFjNIxbXZGEVVvJE49NvtKqC5aYaBdLkzwB6bn6aRznqRd+iDEJnuf8T3ObnVbbVby7ucIj4/afs1CELKZOulhHEB5gl9YABBgFyL3n35VqLtWdcYbXIaKkH86FEL66VDVsasW1wstSSMyQ2FWIXzp7UG4MIvamWxHjjR+IsPhjE6EGh/HScE9DXbqFcHuwR6DvH7FFExJ4eEv+dr4z3PnY6WyP2c="

notifications:
  slack:
    secure: FKVfXr+/qe6D7Kg78HkendF7dU6I0XBVQh6oDlZlKfovdKCp2LNypOGJulvypTtdhy9/LbTxNgh6qvi0e3UMHiIxC4QsJFGIcSGakn0mCr/EIusbl1dJKUsuaiL57zHMeg0Bw5gCqZwfQszhNC1A1/Vm5Vf8hK6nxRGfBVW//2udpu1PUd/6dmHVx6ZGepY8EpVsuBJxdljUTEQGquo2hnLSMF9JDzT8dzjoczvI0K6oQuWPjA8ZDn6ghpHzERoq0bq24Z2Z8nE+BlDAwwgxxr0FaHeZ59ZawJ7FVxoGZicXjSkLKhO+TEuvdvZ2XRZl0yge0Lvqr6Fha3Oogw6AWkfdAxUtGJ7VVdKs0nSqEFCk7yPUV+V8BlFG6v5l56b5BcdFFQ1b5+3LXJqerSecCJH/3BOp+PwRfveLF8QeTeVn5834rcgTSJdc3b28zb13vrDY0ZdWLy7R5KOZFufGuImkmfJVbEbkLvt5wcAmvJbJS5HIxgUH+Djf23NgC1k12jkVVGFKrcUVE1it0be0uR+y50LqSU9oAGvik+BJRlrIbeETtJaJM73bs/i7b32cP2Of2CIJCxfLDjML8/xjqmjlpVwUaqWUfwtms0ubRqNyhvRoWPF6vz6QnHHJ4l8w3tuYR+WudMwRmfVltljRnyAmrQBSmGY/kvFqxAMPTeg=
    on_pull_requests: false
    on_success: change
    on_failure: always
  webhooks:
    urls:
      # travis2slack webhook to enable DMs on openwhisk-team.slack.com to PR authors with TravisCI results
      secure: "Q7RlUa8teJUFz0zTugGUanSNqhLYOq3mnh0a6LSslDflkKNAfdd7FFcYJdHOl/iV0Dk+Y14aPgDpidZ/jt3vwlaSkFjiJMMqdLC4oDt+DEzrBT+RLyIFQo9n/i+7T+n6Ah3+Qix1l2h5O1gM0N2mek/76ih2kjz6apGSkL3/Ketr/39wFx6R4bl9AfDZjZqweFhsK4oleZXD9Mj40qWNf/BfCmUeqBXupZBxtW/RqIGSwtjjnH3vskF85z8KLuLrDgCgQ0K6h8yml9kiVdX5dMvOt290k7y17E+oKVFdpTfrUBNkfo1hCxVMEbHIiLT7yhqmlY08GfkPm3QqPeAITbFSTJmkWGpHHbXXuXgzolud+Twe2gbloWXyz/EC+UmFRRZhblHCDeui7fH7cTXrNr/ICvh4b87V/J9aHOVcftYsfRdO97zTwduy27RFLNL05B6WzmJaqzzDR2L0SssGvRx8PkPk8JS64kpHGWV4qb7dYUUTgbvI6cs4Y+YGaZqe9MihzG7+ecHNY1VxTqICTGuPfuRe+AopDv/74DkLa/kGqsJHWhK0xAm5k+XtyxYUqKfYqcNqmd3wQvfGopV8xwD4XsCtacDuuFzcPGdiybjZpG5BldRk4yU0kQe5QH4SbWWelDQ0W5KunLq3giIhf53ACvy0Kgm5V2Y+/pUC8HI="
