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

notifications:
  email: false
  webhooks:
    urls:
      # travis2slack webhook to enable DMs on openwhisk-team.slack.com to PR authors with TravisCI results
      secure: "hS4q3WH3dnXCZAJ/vH9SNQIMnu/AOfdmvSkOhFGgUQE8gUyxdCSwJwPTzOYrDaykXO9GKa5mnYiCarhpQ3TUuHa5X6Ei2M2cYveNED0fwVPahObUqvIW2RmsdXllR0Wrca4JaWsZOsdOcFYKaqOPUFTHL5VZvm01voHp0WerbtB45HxzmDKBDUIDbWe8i8rKFza+hEJqFUmep0Psr2YEmocWnN69GkAQ9Bzew7iFVjicXIh8I2L2sy1dgt0lXESvH51+HT6nfGTm61kjUThEJZ8Qo217rjNLYcoxgHtPMrq4EezfM0l1U2USidu0yyFKHUY4JXH6sfxLw/Rp4Wiphgj5scHiQZ7xbDnwNmwYSmfP6vQ3JwZ5oyckcCjnSryqaD56pUkZjvmxi+OfHTJDN9FrE0kwshWcYBPCww8Uo2nlwrzNpfkxp3bV07iEYAXUIRbFj5gkpzdrp/ZhGuWzCYwRGcpqg8B1sR1+PiBIL3pm//sF0r9jWqKIPRkdlClvTZ20g1ERCzKGPDTgvjskUD0AV8rf6Jp8BIOSTc5VEIDXqIfptdrzMDKOJd2pBRkMEQVwlax1jcpMgFb22sNWqMXNaUn+39U7ORNdmQO20/76ziHr20tktBRymifASBCjrOMy7BFIlbOnkxYfwI6zUruHtTtBBsvr8NcEvl8mHQU="

before_install:
  - "./tools/travis/setup.sh"
install: true
script:
  - "./tools/travis/build.sh && ./tools/travis/deploy.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-swift
  - provider: script
    script: "./tools/travis/publish.sh openwhisk 4.1 nightly && ./tools/travis/publish.sh openwhisk 4.2 nightly"
    on:
      branch: master
      repo: apache/openwhisk-runtime-swift
  - provider: script
    script: "./tools/travis/publish.sh openwhisk 5.1 nightly"
    on:
      branch: master
      repo: apache/openwhisk-runtime-swift
env:
  global:
  - secure: YqQG7kchpqrqYNCBHmoXs5QJFJQmtuy30WYQnQtudVuqZ1/PqsTJXy6+kNxQ88z5NoU4XZKClB61V8ZVHqGsbQd3lAsTy11QKxf+s4kfsGBuoRlow4eQmnUnnaF3E6KVV2nJ4oXro7RQhP3WwLjpsThrMk322B1ZtlSRALR9hK5wCit8Q1ifSJqmKLwuoNSNQzd7onlDF19Q9pyKkgVu9wLKU5epo76wuFkRfkbr1mB3fF2le2WRNXer2N8rL8McHousFPYA03IIdo6zdX27yGmqSW3teCiVYieGrqtaGhH0WCE7dcmoQ/gs7IBqn1K80wJSR1lbkKDiWzmb73FWScKuXmRn5c4HCq/wPya2I5JNUGyPg5YI0HyMDxGTJ/OdXv2Aizyh3hyNMFjtbjK4N6gz6kFAn8Uo6wFs441Bq+S3+ipLAQ41KIQ7E4/Di6ERSG8KKWKy+LlnA5Qy60CQHRIyJCg3+aqfTe7LUrI/mCclRelnLzUPApFOBI1zPB44+lJVRFfcAKhKIen1bdljTwhjP0xkmOS7rJKtEUl3BvIOAeHC9Dgts9LoqhcMjeXexasbgIpm/CEb8yBTSs+1/FG+8r/v0qGEI6+X/HRJaapQ3vsAKI3M+kbHIjrXhJaUlLWc4dk70B7Ee2eh057cPgInZYLXPi0ksNWy8wAtAJE=
  - secure: HbPHrmRk1LOjFE47jUTUKMrmbVF9GXRmAj+V1vaoshrRJAEh8rj58uQwrU7YS6EybyHOHL/26G2PcQt8HrQcqsQdvfwT5QWYxGjxz24nvU6B9PpNlaG6vOW61ls519zsYSSlgb5e1Wr2bjSxpbwDzLzovi2t4L/ZliRcevZYRGJS7846uWSZ3u6De6bwjR5onE2KQ6A5xG4WzyL1gQ/SISFknb1o7l3YpXJe3KZVZztn9y8eCujgSysNSM6hu60TXd8v2lNp3rtof5Xxb6GZ/5W7aZYQUM5o+/q+vdC/gWXgs7UJwOc1Yxi7Q+kiyQLuR69J9XKwvP+/PakySFrUjysZUqMh8um5Mn1y9gQHVwEOXjshwmIWLfoPQ331QIHgzdlrMw9HAckjO5q1C9EU9XddMTSOiFYRGowKuG3Xzf/migIpxhi+GWPxP0dwQt3ERJJ2yY27yvIz7RBDS1zWQ9erek+w0gi9bguRH3r59m+TmamgeYXVqm6Z06Vs7VxfICwbSNmBdABRI7ezPtOvV5OK5QPMzOU+BtVeEF+9jrw9NpyVvvPUnHBpf/jMuxmR5br+b3bvX3bO0tOtivPtw4eDAyl2w98gnViqz7EAmn7lC1J2Xj+sswye4vYtP0j8xBXGW9WWcSpplC9yTB68MRKw6TxsH4sQJ+Tu1trd8kI=
