#
# 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.9.3"
          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: "OSJX3vbf6avdVsW/c7dSzXLSWkwBOFKDIAR19DBsLsMz526KK/CUoz4QSLNbM5o3u5pqNCMZhBllE6b0rdEfIWmjO+q42nJojkKED64iZyRSqrk9LeEvsHx7RN/DN+Ib6m4nkYvtwOb0WKoZeYwt4Ael8C7LclJwk/2VfW8pE7O37xVuCo8yogRTJHpjvkPJ+R3EGvL13Hp/hEThO1Xt4cZ3nf7taRW1x9AADAD+ZTU6933FE4I2NyzspHT5TgOYzVtciKpxG0Yv/3tQYdWiWJxvWkXFJ5y/YzhpMuVla1hlBtlGJpbustKptFFkel2TCfEGGzhd67GnsKDuQs0u3UGuvaDfwy0/beN9+0/ulTGUjLGXM70yHZMjBVed5GSdFCpMGEmiJR9DEczSQ/sYPsEEAUBrcJ3z1GBpTVyaVgyE64Z31rfxqwcg5JG34JAvMefrj269NHH1vKDpUfu5lkxUm6ub0dNOFI1IlmDp2lhSIEpKl5HE7fQv2Dnlc8JeQe0Ij2tZjhuPfLmlxFn+hHFa2e9DfEMI6wBBoM/O4UZo0sAI4uNAuWK9Y0E6fJb0QaFkxrv40tJsT5csRnlC/BKmPz5piOszDZKq3/22BRL4HOmESlo75/hIavmDmOFX4NGmYPgCaRZTj2dO4vop1IeEX6iCtvZ+JPfIiaC5h4A="

before_install:
  - cd $TRAVIS_BUILD_DIR
  - GO_FILES=$(find . -iname '*.go' -type f | grep -v /vendor/)
  - test -z "$(gofmt -s -l $(echo $GO_FILES))"
  #- pip install --upgrade pip setuptools
  - 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
