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

# Configuration file for Travis continuous integration.
# See https://travis-ci.org/apache/camel-k

sudo: required

language: go

# Go modules require xenial for mercurial TLS 1.2 support
dist: xenial

go:
  - 1.13.x

install:
  - go mod tidy

env:
  global:
    - OPENSHIFT_VERSION=3.11.0
    - OPENSHIFT_COMMIT=0cbc58b
    - MAVEN_OPTS=-Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=warn

services:
  - docker

before_script:
  - true

script:
  - ./script/travis_build.sh

cache:
  directories:
    - $GOPATH/pkg/mod

# Installing newer openjdk11 because of issues with 11.0.2
# See:
# - https://bugs.openjdk.java.net/browse/JDK-8213202
# - https://travis-ci.community/t/old-java-version-in-bionic/4726/2
before_install:
  - echo $JAVA_HOME
  - which java
  - sudo rm -rf /usr/local/lib/jvm/
  - sudo add-apt-repository -y ppa:openjdk-r/ppa
  - sudo apt-get update
  - sudo apt-get install -y openjdk-11-jdk-headless
  - export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64/
  - which java
  - java -version
  - $JAVA_HOME/bin/java -version
