#
# 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: "C+xu3CoAqyHm8N8zVwjOGhZOxYmwjZRkBMZUAbiNz6vVZq6j/TU8Mu44Z5zEWsufSdrAtu+Mg4Kfr00x8hlYYBxH6YXs7vKhToCERY1JLnlSjquvzzbOkaiG+fpYyiATNH6uz1BJdm1FcSr8n2mRV1nmAXmE/Ie28Q+nVIFt8CXA/mBWl9Z/l6Rwf7REWgWL4mGr2Wjb3vgth0IEO7rZtDKxQlas0s8naJA6nA6dIPxBFuuBrLmNIRAF7qOLBLC6508UWqt+9k/QYbujM7qhnmSJEPGHXG/5lZBWbn2UPIS6EKTlYW5o44cGmP8N0MAKDJezmDjE4r8HwTiKzaM8axQPLw+H7wumhIXbPO2lsHGgzxZAh7M771cXf8pRxoaqWm/bxweAPWA+6bKSrHJGYtM9FTHghNVeuwLTR18NJj4mIzb9BS90rodLfLXrbUPY5lC/4I5YRrCqlhyHr7aibWXM27ehf5/ujkQkBSyd6LeiONl04jFcCNPHlYxIf2XJnHX/6CiE/eJ2R7xqwtGBkTXCb63hnOqDv49nDrj0PfPi2Y0B4x/zoXz6P7ZyogDM6dOOUeL2u/XBryJgQxnoH2S+7Gh+qSdAigCsD2onsF6ghHCdeQRVX/f7CHsyXVxqxHdfyXNXrJJ1uz0tVKZkNSSOwU/1JJbiA+wzGYTnu3E="

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-nodejs
  - provider: script
    script: "./tools/travis/publish.sh openwhisk nodejs10Action nightly && ./tools/travis/publish.sh openwhisk nodejs12Action nightly && ./tools/travis/publish.sh openwhisk nodejs14Action nightly && ./tools/travis/publish.sh openwhisk typescript37Action nightly"
    on:
      branch: master
      repo: apache/openwhisk-runtime-nodejs

env:
  global:
  - secure: Y1ldwIQ6bc3/3Pc0E+qQ6K2M830B9BObYDlsNilPwF/kak3YSfF7SuXuRbJGjTdhH2KOotZD2CwONgP2yvOSPBToC/HpnXYfAGtgblrxQORvgdik88CFWa3Lli1pwlpdzKQNWhBvglzq+IIS98wqzmwqGr8zKA+Iau2ByHdb1j3M9rrIY9V6oU9Gwim1apcRyfI/as3+QfPtt8BUAl2U7+PprxwJigyF/mcZnBJbd7IjrilE2gldZLxKlBiffoKVBinrEg3IQGJPt6k8riw264pBQEpcA0ZBsPUvMaISSxLb+d1ymp3WsiTJUjv+URR/HcdDa7P9jY+ouc8PQz4Yt+Ii38lM2tQU480APfVTyfj6drkjL/+54mYuxm8TzkBWcM2j6/FYT+8HvK/pF35wDJ3El+jGq7BARXg8HVxFsZgynJnhqhWDQb3xX9fK+N4K8+ct+HlsOSa5mP5i5Yo6WRTrWrFpyxVnv9crKePCiYqA2Y8ta8Wnh0sM06nLRtDbfbDjvXPQbaZqSnL4B2Cto08YoT/W/lu8QgJ3EEFlUdDOke4kv9yoXtuE0h7+8dwOvBNMVrBis3G2EYObgR4WmWjk4loYhqT9h3jrH0/5bGLzSKc++qYW0rOZ/RB21cRSe1ILQvSzWkImUoPI8b0i5baGSDq3EjTXYr3pIXSYpQk=
  - secure: DOg+FgllLbyv7nEK3JJZfO/cvXy5K0L6QI/S9EJ/ivm4XBDCw1ayhrSQXvp1tMTPbWBEIv2gomPsHghJ+hVvX3dgwYdoNz9WZaNBB6lOO9U8OQW0LBsO5Eai6grzqOP35OuKtthuyR3dGJHAZo/XjhZM/jL0z6q1kNDzdS7ASwRwHJG0rHPGVlGeolH4nAity4KNJvyAspS1FYaIj9FEC/M7UT6nJVACbr9iMt/83teF/Oo2uoFI6Pa4K3nE2NViVFibToNOM3CV8kArDPDoNJviXxQ07ZM6fNijwehZ80waiPSaxFY8PLSntQNxGyB3DbomSTCcdVvtuHHQVmZgpVdvOJE8wk3R09+nq9U9FuUWLiRYSRbF1eF48YFnssPW1jEeVSenFRADcQ37e4B21ssLvXRHpQHpPVrYBZ8ffDamS7pKtEqocX/3Syc6irxHGCpxEdhvQ0Of5AWHhzB714VCijJJQiH9J4hEKXhMeAZ5SSt4eUavEHJKMhUcJ/aaku5w1+KtiYeOso1fTRbTYkEYb1A0bSNdXlGrYRRT+N683W7+ENiQIT+hTp617L/m5WQLIHfKe3gy5qt46kHFiUL3R3YlBI5OKjnLkDnUiA+0d4SFtJC/TBuPmH1fG4isAuvggTjzCb3kUG3ysin8AW0AKaXW0eqjKa/nsHWDKmc=
