# 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

_addons: &addon_conf
  apt:
    sources:
      - ubuntu-toolchain-r-test
    packages:
      - gcc-7-multilib
      - linux-libc-dev:i386

go:
  - "1.13"

git:
  depth: false

matrix:
  include:
    - os: linux
      addons: *addon_conf

    - os: osx
      osx_image: xcode9.2

before_install:
  - printenv
  - export GOPATH=$HOME/gopath
  - go version
  - ifconfig -a

install:
  - git clone https://github.com/runtimeco/mynewt-travis-ci $HOME/ci
  - chmod +x $HOME/ci/*.sh
  - export TEST=TEST_ALL
  - $HOME/ci/${TRAVIS_OS_NAME}_travis_install.sh
  - export TEST=TEST_NEWT
  - $HOME/ci/${TRAVIS_OS_NAME}_travis_install.sh
  - ./build.sh
  - export PATH=$(pwd)/newt:$PATH

before_script:
  - newt version
  - gcc --version

script:
  - $HOME/ci/test_newt.sh

cache:
  directories:
  - $HOME/TOOLCHAIN
  - $HOME/Library/Caches/Homebrew
