#
# 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
language: go
go:
  - "1.16.x"   # Do not fix the patch level to automatically get security fixes.
services:
  - docker

notifications:
  email: false
  webhooks:
    urls:
      # travis2slack webhook to enable DMs on openwhisk-team.slack.com to PR authors with TravisCI results
      secure: "oucv10cFn2nM5XpwIRY0xbJw0m7gkFABFUD/wj4oubpO64yjeY/RUHkYXNHXKESd6ME9TngdmvkjCdetMTKK1wo/jUbSh6wGxn1ND4f3E9ds/6PS4gbMEDdKQWt/VKqXHtx3vUKDrvPvTNv9CDZ6lfBA5SNcN4E2gIoiORaX73CrPhA3tFTgPG2+ESi31/QstMaomAszyPGvYwDSdCALk0qsdjxJgpUzIm11vj5gPD5PPTnJBsAg0yC52WTOTYtORoEJUuhBXVwEpoZ5qPOusoHzFqq6BXsIU6zPEXSkHXcyCxYGY7V4P+FkAtteOBqMFALpv+klVTRVlOjwiRSSeUD45N1+fBnCgYSXLIPJunRyj1epsDSepTpOBlw1MWZ4LzfGw8897wdS2oZXju9adS5Wv2f7VksaA3meuYrZ3ohSKVRdeUfZwEh29E9rUQTYyffzmn9Sh6TDjObUbZlhhdXRPjzwB6FoAcuMKFvRK0Sliwhzo2qZ6Tzuo8rBt+U74YnHlFzYwFF8kSsm+jAq8lxMGmKDdFFvUASxp5bAG6ZfSHVvQKD143T164en4E41mlWTjIDKInSe85d12uX6ziIpbEpkHMWvA5+8s9eIc95E0FQpAp6SG/ZeM0TJqAS10JS1gfWZ+PDJwCk9mUogJ4JVQP4ccT7zqUXVnEKo33U="

before_install:
  - "./tools/travis/setup.sh"
install: true
script:
  - "./tools/travis/scan.sh && ./tools/travis/build.sh && ./tools/travis/test.sh"
after_failure: cat .gogradle/reports/test/index.html
deploy:
  - provider: script
    skip_cleanup: true
    script: "./tools/travis/publish.sh openwhisk ${TRAVIS_TAG%@*} ${TRAVIS_TAG##*@}"
    on:
      tags: true
      all_branches: true
      repo: apache/openwhisk-runtime-go
  - provider: script
    skip_cleanup: true
    script: "./tools/travis/publish.sh openwhisk actionloop nightly"
    on:
      branch: master
      repo: apache/openwhisk-runtime-go
  - provider: script
    skip_cleanup: true
    script: "./tools/travis/publish.sh openwhisk 1.16 nightly && ./tools/travis/publish.sh openwhisk 1.17 nightly && ./tools/travis/publish.sh openwhisk 1.18 nightly"
    on:
      branch: master
      repo: apache/openwhisk-runtime-go
env:
  global:
    - secure: "JPcDPdaYlZ4m7LRdJbhaCAhe0as/NQ/4lAiYEJoG6mzNLS/XA7kNWK7iCzk+4Tym90KcjTmXzAHGukdaBYrOiwNGUp6sWiKbtqVryKuoSgINxE+U5/udTyxbJuLEBtHBpAbolvXC4oE7hncGGe25CgrH0iefl2nuWO1etbddXi8EfWzYfzT9M7lhkeGcH60h+yBfyV/mSa35so7OSuLYoCCAKsZWP5xCagSo4NvvOOPBH6GB6bRLBdYhQ5k5WZGh51JOmuj9dKjoFjFqnvYUJUlkQVFqlqyM14JbJO2Oib+LLC9+6BM8aCznr9NfIwqBzcr10sqTrBBiXwJNjeaN0W474fzkFQNq2MwKLAwpWCBuc2U91BzaIGK1jpx92z6FfwB6muVQAiljEgi9N8Xpi6z9Hjiqsk3cQLHdf2NNYMrTKZ3NUIvL0w0hphTv7trDm2sJmVO4Jx6iXe1T/6nBsFcX0RrH0Yck+GMXldp+uoIyVWuMNvhu8rGD6bAd61QaSNyyRWcVYIjyyqMwH+ppuoFfqivqnEDHUUn9zEosbU3qpBC0g70ZJ+0l0uc8Grna0no2MaSD96jq9AyEIWH8gYBVZ/xGcktVmdNGbfwVmmfM1tAUN+AQHok6Enwzod4xFPWB1hjd89KVhvQEjxOujWO1/4DsmY6w+GFnH/+yWZ4="
    - secure: "4vnbj9e77qzZI8N1TGtmujDhCoc7aPYIpvigc5HJzKYIaMlftGesLoC3ipfQSJRoLVvMdqEp/LGN0swvt3afd2Rop1qdao9NahMQ828mPYTSGQb7br/c6kh6oBSu5cMqA1IGwBlzEhFZJiXjX4VFJYldNQiAEkh51UENhtA1CiFWC/DwrFKC0poU+6pbelTzmX9Ad22vliU+w8UYG8A6ygXjBXK+7RUt/lVKalfSD/ymZlfRoKhyVoA4ftjh2E6NHQDlA+0nLfRQaPgRVKjERxlzCKQBztwWCq69dceL0UJjv1LBWepMKIW7vS77KgKUq0rRSklNIPFstqLpFds8BO2eYUXQhdhemJNwfNiMo+AjCX1nxPWP42kpq8pHwb9Rs8b2CRdIVqLDxu8CoEjjAQtMgeEhB/yze1yczmycRh//Tz765fWp19384GZ7LDJ3JvpsnzUMjAxO42DtUdI+FD3zmWGAuR23qa5j/Qi3rlJNzp3SA7dZZ85Noiild4x5zYgt77XpzysDeehVHYdHCoRbvdzHrzsHqcZH7zcCr48SVv9pXVdOv0EgED1q+DvxhOuy1SbAslHbr4JJjo3OwmUEdM+r0CfPu/rDo53QnRG7H3odr1E6VLoNwMmRSpuMC/Dv3lnOXQ4Zv1YBtkNZdSw0BMvbTXuCuT3q5YYOr50="
