#
# 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:
  - python

python:
  - "3.7"

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

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-python
  - provider: script
    script: "./tools/travis/publish.sh openwhisk 3 nightly && ./tools/travis/publish.sh openwhisk 3-ai nightly && ./tools/travis/publish.sh openwhisk 39 nightly"
    on:
      branch: master
      repo: apache/openwhisk-runtime-python
env:
  global:
    - secure: "N5g9wUkuz5N4KM2KlJLpl/3X1l6d/ZFikquDDibpEyMCbhN6dPSpVu3Ji2M5/fcCd49IUnAZbrD7wlIr/zLdBYOBX+ERsjG7phPaIl23xZtJ/J7wTxCA+5i2uI4Oj1yh81OffLf0dxdx+sfRizKPyRpUqwTI0PgntPJKeqUxtILrnNDQ/yZEvSSiqe9ndYYfpZcYJj+IYUc/iXw8CMg3J2s/dTNXgd4o5ADUkIMIcgE+5RzT6R0ODWeK8DRvoVTstRauPR2NdCRratoCCUyue0aIXO/ZVJsdzFQbtn2YC/pbN3bf6acLVAOt2OKd7X1ulwU2ZSKgDcYVWxVzOEk8dojqHuEi22PdsrFG6sLmm/s4ul3IVL50vYwfLpRhCT7dEHK1cIZPI2kUQD+gQ8+cUCRbJUfmTCPI+lRKLG5orAjxSbvS5P+IcAgRBzzGbyrtlpZucBHvsXwOShcisnd475vQlKGzwnEU/hk2WjL5TRzEqTy3zeEewU1PU+1UVKqAOaXacemH82a4lLf/7PT8wdwuASewv1ROhJy+JGa/wWG4uFTyv+OqrslM0i897sJEpsdq0WjMWEDMjc58xZeZFSY3QH+XWXQ6xB8uKe2iVR3t5hMwKxBnjTFDjmY52Uyo/rIBY3qDSUfaOOqepSu48DCXwkcv0olkTXLhcvg9ZJ4="
    - secure: "ifre4ptsRQX+frr4VzVtEtl0QVDDwS2zp93cGXC9ihE8vYrCS+zoRieJ4vSGqs8p0g35H/1WYFhgBGeJvJXRLaN//CGipYVqavjz2ETfybCptN6j0EDc803CbhZK5rOgiBNhdMk8x2H45dcdp5zNLhtvDU/KzgbktT8DkxY0AzKcVki2BCTteChCGCDMKrVkMwlrGhiXSxvcWltA2jnCGvYt9Niv2dogmjFUMmC8BAYCq0hbRY4gK1u7Gq42HCmxwYq2V/5SMCi4bWXa02CdmXA9IhTKXy8EHEk/gFU7ktyyAqgv5ubf0GmW0Qor+b6EfkUHclP+hNV6d3AZI+IbdRWKrSbjPhOOfmnkJ2oFPTYoDPJv0KPb5qoGrHW2TkjqRTQWucTWBDkd6c1m3BMYjSZa5BcCP2mQ6eY/aqX+4YxBHe4tWviNgHiDHGZ/w9iNkcnJ2X6ga6UJg1jeGM7IHW/vqq7EG1YCXeFva38SGPvoDEWVXXzs5HIiJehTHsIgJnHIC+8wGpk4iHyRDQocJsByhsNzQKHHoL9ylep9dJFa6BTOxEvRW+lIMVYVktkYYOsw1rexRQEO9fHQn9cPFxJfKzyZ9Poibt8flciPNDOD8QB26yDZGoqI9Vy2hYXBPLACX6U/KB45Pp0doAT7IdiatpM7uUSlRJN2R68XASc="

notifications:
  slack:
    secure: ipYx0BX7TwWmG+qeyAllxBxrPn21dJubfEbALn8yTOZfykTWpVtohWrqieAnc6kFQRqz1TAs1wzyjvTcutaIMi9C7FcJrYRIMUMpyID3ca5FeZopr/LBW53XHj/SgZWwFRAnWsjYnSydfZJnUBInI6por8jdVqVgsCMTDsvcXFEoHdVj9M93aB7y8pgqZhfYkQOPojktDu7nMxjsjKJN7dT+g/1kVWtS8DQQCXHTPP44YquxOCgAFn+CZjes9Jm+vz5lk5Azksi48yiHwFiLYZo5gcnwr2n2IspjBs6db10rkCe693vIpoW4T3KujMIKwVXrgUl4pDME1nN/loEBHm0DjKoeOD13DHqITMTPX4sR94TCGf0lMyaag/JOETdDgC9hAbh4aSx1cj4hGXiuGrNMbYblMBsjvujqFp2nraw/DE93pHGRY9lbBZIjEVhj/jBmOv1I3yRdXHj4VybZc4JGnfQVGz/RYDOEmKGoLoVWFp+hGAHDqVos9ZvEBByMAAmgVD2/D5cBER3oskp/JJjKmFLk614FcNh4D7/+bYAFhxbCgnoLHH5GeSo0q73O3JSi5pZggEIN9xis7SVQgPl+MUDTe5N3X3J3bQc7cMYGLzh0VNSyYaHuW2P02vWBNE/FAkL8UGrfGsXnDyGRRxo8fYHTXpIjhIkE7tY5eZQ=
    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: "JoCPajRbNQ+8Tpu7XyjtLT/pbbA4vhEpScYs7YIE4+iYtZLNXpqXdX/9+tzX9uGsh/+4DoIVMXjcKjDKglgtffgv8RF1wVblIpC8pIcPVaUxWn1KitjZCgFEQnxpT74DgJng3C1ADHon5htNdZ/vhfXDtV6XJ1/mvtWJZCC0ZsWuvRiwnRwZdIkrZi7Fpl6fqTOOAcy7KV8IeKi+GMInjvPrVdG3uLgQO2tOnoKK4oFvDT1sV3hLX8nx6GYAers98AtbvNyiSyg4wAUFV6HTiF7Kc4rHWqPgu8aQRfO8yTlZ4XomAHR1HcujANgoG1lvij28N7pkgRvjUBpPP82qYKlx4xC9RxeH40MjlYiCLHWUswyFb9QGRsnbGtCamME3kBiC3jO86avvD16PWwCbA1q/Y7bLhUZUCUOGHzxvb3n2kCgkcjcbwIiS8+/2aJsIJ8TE7Y6sjrMHJEGILO57gY/JdCrevn4MOfnyCiqPgWdnPTUzcXcYoH/hZctUsOISc2M5yZsNAVHyHFZAbDDdgCLAVi9SAIRhB9ipn/JbpnHzPhu7eW46T6cDMdBAw0FUPvrGch20qhABILU7cFCDZLJ/DouKGAOn1XPXo5FUBjyM854jjm2jVs6IpOdUecW1lGdafB3d0AJXMm4vBXU8VmCuvElurnoE+FNpKZpmjms="


