language: ruby
cache: bundler
dist: trusty

# Early warning system to catch if Rubygems breaks something
before_install:
  - gem update --system $(grep rubygems omnibus_overrides.rb | cut -d'"' -f2)
  - gem --version
    # travis may preinstall a bundler gem which is later than the one which we pin, which may totally hose us, so we preemtively
    # uninstall anything they may have installed here.  if they haven't installed anything then we have to ignore the failure
    # to uninstall the default bundler that ships embedded in ruby itself.
  - rvm @global do gem uninstall bundler -a -x || true
  - gem install bundler -v $(grep :bundler omnibus_overrides.rb | cut -d'"' -f2)
  - bundle --version
  - rm -f .bundle/config

before_script:
 # force all .rspec tests into progress display to reduce line count
 - echo --color > .rspec
 - echo -fp >> .rspec
 # necessary for sudo: true tests, ingore failures on tests invoked with sudo: false
 - sudo sed -i -e 's/^Defaults\tsecure_path.*$//' /etc/sudoers

# do not run expensive spec tests on PRs, only on branches
branches:
  only:
  - master
  - chef-14

env:
  global:
    - FORCE_FFI_YAJL=ext

matrix:
  include:
  - env:
      INTEGRATION_SPECS_25: 1
    rvm: 2.5.5
    sudo: true
    script: sudo -E $(which bundle) exec rake spec:integration;
    bundler_args: --without docgen integration omnibus_package --frozen
  - env:
      INTEGRATION_SPECS_26: 1
    rvm: 2.6.3
    sudo: true
    script: sudo -E $(which bundle) exec rake spec:integration;
    bundler_args: --without docgen integration omnibus_package --frozen
  - env:
      FUNCTIONAL_SPECS_25: 1
    rvm: 2.5.5
    sudo: true
    # the travis apt proxy screws with our functional testing something fierce
    script: sudo rm -f /etc/apt/apt.conf.d/99-travis-apt-proxy; sudo -E $(which bundle) exec rake spec:functional;
    bundler_args: --without docgen integration omnibus_package --frozen
  - env:
      FUNCTIONAL_SPECS_26: 1
    rvm: 2.6.3
    sudo: true
    script: sudo rm -f /etc/apt/apt.conf.d/99-travis-apt-proxy; sudo -E $(which bundle) exec rake spec:functional;
    bundler_args: --without docgen integration omnibus_package --frozen
  - env:
      UNIT_SPECS_25: 1
    rvm: 2.5.5
    sudo: true
    script:
      - sudo -E $(which bundle) exec rake spec:unit;
      - sudo -E $(which bundle) exec rake component_specs
    bundler_args: --without docgen integration omnibus_package --frozen
  - env:
      UNIT_SPECS_26: 1
    rvm: 2.6.3
    sudo: true
    script:
      - sudo -E $(which bundle) exec rake spec:unit;
      - sudo -E $(which bundle) exec rake component_specs
    bundler_args: --without docgen integration omnibus_package --frozen
  - env:
      CHEFSTYLE: 1
    rvm: 2.6.3
    script: bundle exec rake style
    # also remove integration / external tests
    bundler_args: --without docgen integration omnibus_package --frozen
  #
  # External tests
  #
  - env:
      TEST_GEM: sethvargo/chef-sugar
    script: bundle exec tasks/bin/run_external_test $TEST_GEM master rake
    rvm: 2.6.3
  - env:
      - PEDANT_OPTS=--skip-oc_id
      - TEST_GEM=chef/chef-zero
      - CHEF_FS=true
    script: bundle exec tasks/bin/run_external_test $TEST_GEM master rake pedant
    rvm: 2.6.3
  - env:
      TEST_GEM: chef/cheffish
    script: bundle exec tasks/bin/run_external_test $TEST_GEM master rake spec
    rvm: 2.6.3
  - env:
      TEST_GEM: chefspec/chefspec
    script: bundle exec tasks/bin/run_external_test $TEST_GEM master rake
    rvm: 2.6.3
  - env:
      TEST_GEM: chef/knife-windows
    script: bundle exec tasks/bin/run_external_test $TEST_GEM master rake unit_spec
    rvm: 2.6.3
  ### START TEST KITCHEN ONLY ###
  - rvm: 2.5.5
    services: docker
    gemfile: kitchen-tests/Gemfile
    before_install:
      - gem update --system $(grep rubygems omnibus_overrides.rb | cut -d'"' -f2)
      - gem install bundler -v $(grep :bundler omnibus_overrides.rb | cut -d'"' -f2)
    before_script:
      - sudo iptables -L DOCKER || ( echo "DOCKER iptables chain missing" ; sudo iptables -N DOCKER )
      - cd kitchen-tests
    script:
      - bundle exec kitchen test end-to-end-amazonlinux-2
    after_failure:
      - cat .kitchen/logs/kitchen.log
    env:
      - AMAZON=2
      - KITCHEN_YAML=kitchen.yml
  - rvm: 2.5.5
    services: docker
    gemfile: kitchen-tests/Gemfile
    before_install:
      - gem update --system $(grep rubygems omnibus_overrides.rb | cut -d'"' -f2)
      - gem install bundler -v $(grep :bundler omnibus_overrides.rb | cut -d'"' -f2)
    before_script:
      - sudo iptables -L DOCKER || ( echo "DOCKER iptables chain missing" ; sudo iptables -N DOCKER )
      - cd kitchen-tests
    script:
      - bundle exec kitchen test end-to-end-amazonlinux
    after_failure:
      - cat .kitchen/logs/kitchen.log
    env:
      - AMAZON=201X
      - KITCHEN_YAML=kitchen.yml
  - rvm: 2.5.5
    services: docker
    gemfile: kitchen-tests/Gemfile
    before_install:
      - gem update --system $(grep rubygems omnibus_overrides.rb | cut -d'"' -f2)
      - gem install bundler -v $(grep :bundler omnibus_overrides.rb | cut -d'"' -f2)
    before_script:
      - sudo iptables -L DOCKER || ( echo "DOCKER iptables chain missing" ; sudo iptables -N DOCKER )
      - cd kitchen-tests
    script:
      - bundle exec kitchen test end-to-end-ubuntu-1604
    after_failure:
      - cat .kitchen/logs/kitchen.log
    env:
      - UBUNTU=16.04
      - KITCHEN_YAML=kitchen.yml
  - rvm: 2.5.5
    services: docker
    gemfile: kitchen-tests/Gemfile
    before_install:
      - gem update --system $(grep rubygems omnibus_overrides.rb | cut -d'"' -f2)
      - gem install bundler -v $(grep :bundler omnibus_overrides.rb | cut -d'"' -f2)
    before_script:
      - sudo iptables -L DOCKER || ( echo "DOCKER iptables chain missing" ; sudo iptables -N DOCKER )
      - cd kitchen-tests
    script:
      - bundle exec kitchen test end-to-end-ubuntu-1804
    after_failure:
      - cat .kitchen/logs/kitchen.log
    env:
      - UBUNTU=18.04
      - KITCHEN_YAML=kitchen.yml
  - rvm: 2.5.5
    services: docker
    gemfile: kitchen-tests/Gemfile
    before_install:
      - gem update --system $(grep rubygems omnibus_overrides.rb | cut -d'"' -f2)
      - gem install bundler -v $(grep :bundler omnibus_overrides.rb | cut -d'"' -f2)
    before_script:
      - sudo iptables -L DOCKER || ( echo "DOCKER iptables chain missing" ; sudo iptables -N DOCKER )
      - cd kitchen-tests
    script:
      - bundle exec kitchen test end-to-end-debian-8
    after_failure:
      - cat .kitchen/logs/kitchen.log
    env:
      - DEBIAN=8
      - KITCHEN_YAML=kitchen.yml
  - rvm: 2.5.5
    services: docker
    gemfile: kitchen-tests/Gemfile
    before_install:
      - gem update --system $(grep rubygems omnibus_overrides.rb | cut -d'"' -f2)
      - gem install bundler -v $(grep :bundler omnibus_overrides.rb | cut -d'"' -f2)
    before_script:
      - sudo iptables -L DOCKER || ( echo "DOCKER iptables chain missing" ; sudo iptables -N DOCKER )
      - cd kitchen-tests
    script:
      - bundle exec kitchen test end-to-end-debian-9
    after_failure:
      - cat .kitchen/logs/kitchen.log
    env:
      - DEBIAN=9
      - KITCHEN_YAML=kitchen.yml
  - rvm: 2.5.5
    services: docker
    gemfile: kitchen-tests/Gemfile
    before_install:
      - gem update --system $(grep rubygems omnibus_overrides.rb | cut -d'"' -f2)
      - gem install bundler -v $(grep :bundler omnibus_overrides.rb | cut -d'"' -f2)
    before_script:
      - sudo iptables -L DOCKER || ( echo "DOCKER iptables chain missing" ; sudo iptables -N DOCKER )
      - cd kitchen-tests
    script:
      - bundle exec kitchen test end-to-end-debian-10
    after_failure:
      - cat .kitchen/logs/kitchen.log
    env:
      - DEBIAN=10
      - KITCHEN_YAML=kitchen.yml
  - rvm: 2.5.5
    services: docker
    gemfile: kitchen-tests/Gemfile
    before_install:
      - gem update --system $(grep rubygems omnibus_overrides.rb | cut -d'"' -f2)
      - gem install bundler -v $(grep :bundler omnibus_overrides.rb | cut -d'"' -f2)
    before_script:
      - sudo iptables -L DOCKER || ( echo "DOCKER iptables chain missing" ; sudo iptables -N DOCKER )
      - cd kitchen-tests
    script:
      - bundle exec kitchen test end-to-end-centos-6
    after_failure:
      - cat .kitchen/logs/kitchen.log
    env:
      - CENTOS=6
      - KITCHEN_YAML=kitchen.yml
  - rvm: 2.5.5
    services: docker
    gemfile: kitchen-tests/Gemfile
    before_install:
      - gem update --system $(grep rubygems omnibus_overrides.rb | cut -d'"' -f2)
      - gem install bundler -v $(grep :bundler omnibus_overrides.rb | cut -d'"' -f2)
    before_script:
      - sudo iptables -L DOCKER || ( echo "DOCKER iptables chain missing" ; sudo iptables -N DOCKER )
      - cd kitchen-tests
    script:
      - bundle exec kitchen test end-to-end-centos-7
    after_failure:
      - cat .kitchen/logs/kitchen.log
    env:
      - CENTOS=7
      - KITCHEN_YAML=kitchen.yml
  - rvm: 2.5.5
    services: docker
    gemfile: kitchen-tests/Gemfile
    before_install:
      - gem update --system $(grep rubygems omnibus_overrides.rb | cut -d'"' -f2)
      - gem install bundler -v $(grep :bundler omnibus_overrides.rb | cut -d'"' -f2)
    before_script:
      - sudo iptables -L DOCKER || ( echo "DOCKER iptables chain missing" ; sudo iptables -N DOCKER )
      - cd kitchen-tests
    script:
      - bundle exec kitchen test end-to-end-fedora-latest
    after_failure:
      - cat .kitchen/logs/kitchen.log
    env:
      - FEDORA=latest
      - KITCHEN_YAML=kitchen.yml
  - rvm: 2.5.5
    services: docker
    gemfile: kitchen-tests/Gemfile
    before_install:
      - gem update --system $(grep rubygems omnibus_overrides.rb | cut -d'"' -f2)
      - gem install bundler -v $(grep :bundler omnibus_overrides.rb | cut -d'"' -f2)
    before_script:
      - sudo iptables -L DOCKER || ( echo "DOCKER iptables chain missing" ; sudo iptables -N DOCKER )
      - cd kitchen-tests
    script:
      - bundle exec kitchen test end-to-end-opensuse-leap
    after_failure:
      - cat .kitchen/logs/kitchen.log
    env:
     - OPENSUSELEAP=42
     - KITCHEN_YAML=kitchen.yml
  - rvm: 2.5.5
    before_install:
      - gem update --system $(grep rubygems omnibus_overrides.rb | cut -d'"' -f2)
      - rvm @global do gem uninstall bundler -a -x || true
      - gem install bundler -v $(grep :bundler omnibus_overrides.rb | cut -d'"' -f2)
      - sudo apt-get update
      - sudo apt-get -y install squid3 git curl
    env:
      - PROXY_TESTS_DIR=proxy_tests/files/default/scripts
      - PROXY_TESTS_REPO=$PROXY_TESTS_DIR/repo
    script:
      - bundle exec chef-client --version
      - git clone https://github.com/chef/proxy_tests.git
      - rvmsudo -E bundle exec bash $PROXY_TESTS_DIR/run_tests.sh chef_client \* \* /tmp/out.txt
    after_script:
      - cat /tmp/out.txt
      - sudo cat /var/log/squid3/cache.log
      - sudo cat /var/log/squid3/access.log
  # Use test-kitchen to launch a centos docker container to run the full rspec tests against.  This catches
  # errors in travis, before PRs are merged, hopefully before they become errors in jenkins.
  - rvm: 2.5.5
    services: docker
    sudo: required
    gemfile: kitchen-tests/Gemfile
    before_install:
      - gem update --system $(grep rubygems omnibus_overrides.rb | cut -d'"' -f2)
      - gem install bundler -v $(grep :bundler omnibus_overrides.rb | cut -d'"' -f2)
    before_script:
      - sudo iptables -L DOCKER || ( echo "DOCKER iptables chain missing" ; sudo iptables -N DOCKER )
      - cd kitchen-tests
    script:
      - bundle exec kitchen test rspec-centos-7
    after_failure:
      - cat .kitchen/logs/kitchen.log
    env:
      - RSPEC_CENTOS=7
      - KITCHEN_YAML=kitchen.yml
  - rvm: 2.5.5
    services: docker
    sudo: required
    gemfile: kitchen-tests/Gemfile
    before_install:
      - gem update --system $(grep rubygems omnibus_overrides.rb | cut -d'"' -f2)
      - gem install bundler -v $(grep :bundler omnibus_overrides.rb | cut -d'"' -f2)
    before_script:
      - sudo iptables -L DOCKER || ( echo "DOCKER iptables chain missing" ; sudo iptables -N DOCKER )
      - cd kitchen-tests
    script:
      - bundle exec kitchen test rspec-opensuse-leap
    after_failure:
      - cat .kitchen/logs/kitchen.log
    env:
     - RSPEC_OPENSUSELEAP=42
     - KITCHEN_YAML=kitchen.yml
  allow_failures:
    - rvm: 2.5.5
      services: docker
      sudo: required
      gemfile: kitchen-tests/Gemfile
      before_install:
        - gem update --system $(grep rubygems omnibus_overrides.rb | cut -d'"' -f2)
        - gem install bundler -v $(grep :bundler omnibus_overrides.rb | cut -d'"' -f2)
      before_script:
        - sudo iptables -L DOCKER || ( echo "DOCKER iptables chain missing" ; sudo iptables -N DOCKER )
        - cd kitchen-tests
      script:
        - bundle exec kitchen test rspec-opensuse-leap
      after_failure:
        - cat .kitchen/logs/kitchen.log
      env:
       - RSPEC_OPENSUSELEAP=42
       - KITCHEN_YAML=kitchen.yml

notifications:
  on_change: true
  on_failure: true
  on_success: change
  on_pull_requests: false