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

language: go

matrix:
    include:
        - os: linux
          sudo: required
          go: "1.15"
          services: docker
          dist: xenial

git:
  depth: 3

notifications:
  email: false
  webhooks:
    urls:
      # travis2slack webhook to enable DMs on openwhisk-team.slack.com to PR authors with TravisCI results
      secure: "p8ZoPWZNXvcjayPEo3gDCO6lhPX6rrimIkKnQurYs7M/ObP5p94hebpDee5U8sZURPU+g4hF3wCIknjHgL3aDwa8P9np4SMLKfpGacz4sZBqHX2v95iFpFRyrvv6/K7atT0K2mFG30pSMRh0WxbkQ4GvcjzWG7Cl8eqx37+3hMih3niffnuflSRML47U8mH+ev39XGogpuvBYjvJfaUuC50y8vxlc6lnuWn4lN9ZEcYVZUnR3CqGr5xFpxko4RrFeKoD6UZHEhNglIVwcD465lU/8IeJiRP5BRolu/y4caMRG7DhT6nGku/ZjJchJfTBlbYfMAjFzKNA3iXGwacAkUJ4ecGx0B+W5M/lcNJWh38AXDA4gLAOXII24iyvDSPNn4zZN5kcim16qjnd+mkJoEyoGBQgRgcTenBdeA/bNTXXbB6+txhUbPTwAbspgwBWkpq14IgdjO6MdsIbdzNMuobJHPH3DxSVaU+tZrFo3J+QE1hMwHHOSfcsHKwjxLdrrpoMZNwSVfQhDhLfHmql3cB2pYe+m4O6eIxjUk6Zv0EETEQ/7WM/W8Q2wBzTk8c2pZQsC9Nj7vIHEXT2klTjooaXWvwq8je6xpwL+7Dann6B/Zkr4+al8Xpqe1Q3m9lsL33FHF2ROp03igm4dCviDJCZB7BWGYuKGLp0fmNe1Aw="

before_install:
  - cd $TRAVIS_BUILD_DIR
  - GO_FILES=$(find . -iname '*.go' -type f)
  - test -z "$(gofmt -s -l $(echo $GO_FILES))"
  - pip install --user --upgrade pip setuptools
  - ./tools/travis/setup.sh

install:
  - export DEPLOY_BUILD_READY=false
  - go get -u golang.org/x/lint/golint
  - go get -u github.com/stretchr/testify

script:
  - ./tools/travis/build.sh
  - export PATH=$PATH:$TRAVIS_BUILD_DIR;
  - make test
  - if [ "$TRAVIS_OS_NAME" == "linux" ] ; then
      ./tools/travis/test_openwhisk.sh;
    fi
