language: python

cache:
  directories:
  - lua_install
  - testrun/testing_cache-5.1
  - testrun/testing_cache-5.2
  - testrun/testing_cache-5.3
  - testrun/testing_cache-2.1
  - testrun/testing_server-5.1
  - testrun/testing_server-5.2
  - testrun/testing_server-5.3
  - testrun/testing_server-2.1
  - testrun/binary-samples

smoke_script: &smoke_script
  - export BRANCH=$(if [ "$TRAVIS_PULL_REQUEST" == "false" ]; then echo $TRAVIS_BRANCH; else echo $TRAVIS_PULL_REQUEST_BRANCH; fi)
  - ./makedist $BRANCH
  - ./smoke_test.sh luarocks-$BRANCH.tar.gz

lint_script: &lint_script
  - luacheck .

unit_script: &unit_script
  - busted -o htest --exclude-tags=git,integration --verbose -Xhelper "lua_dir=$PWD/lua_install,travis"
  - busted -o htest --exclude-tags=git,integration --verbose -Xhelper "lua_dir=$PWD/lua_install,travis,env=full"

integration_script: &integration_script
  - lua -v
  - if [ "$TRAVIS_OS_NAME" = "linux" ]; then shellcheck ./configure; fi
  - ./configure --with-lua=lua_install
  - ./makedist dev
  - ./smoke_test.sh luarocks-dev.tar.gz
  - busted -o htest --exclude-tags=gpg,git,unit --verbose -Xhelper "lua_dir=$PWD/lua_install,travis"
  - busted -o htest --exclude-tags=gpg,git,unit --verbose -Xhelper "lua_dir=$PWD/lua_install,travis,env=full"

jobs:
  include:
    # Smoke tests for release branches
    - stage: smoke
      if: branch =~ ^[0-9].*
      script: *smoke_script
      os: linux
      env:
        - LUA="lua=5.3"
    - stage: smoke
      if: branch =~ ^[0-9].*
      script: *smoke_script
      os: osx
      language: generic
      env:
        - LUA="luajit=2.1"
    # Lint with Luacheck
    - stage: Lint with Luacheck
      script: *lint_script
      os: linux
      env:
        - LUA="lua=5.3"
    # Unit tests for linux
    - stage: Unit on Linux
      script: *unit_script
      os: linux
      env:
        - LUA="lua=5.1"
    - stage: Unit on Linux
      script: *unit_script
      os: linux
      env:
        - LUA="lua=5.2"
    - stage: Unit on Linux
      script: *unit_script
      os: linux
      env:
        - LUA="lua=5.3"
    - stage: Unit on Linux
      script: *unit_script
      os: linux
      env:
        - LUA="luajit=2.1"
    # Integration tests for linux
    - stage: Integration on Linux
      script: *integration_script
      os: linux
      env:
        - LUA="lua=5.1"
    - stage: Integration on Linux
      script: *integration_script
      os: linux
      env:
        - LUA="lua=5.2"
    - stage: Integration on Linux
      script: *integration_script
      os: linux
      env:
        - LUA="lua=5.3"
    - stage: Integration on Linux
      script: *integration_script
      os: linux
      env:
        - LUA="luajit=2.1"
    # Unit tests for mac
    - stage: Unit on Mac
      script: *unit_script
      os: osx
      env:
        - LUA="lua=5.1"
      language: generic
    - stage: Unit on Mac
      script: *unit_script
      os: osx
      env:
        - LUA="lua=5.2"
      language: generic
    - stage: Unit on Mac
      script: *unit_script
      os: osx
      env:
        - LUA="lua=5.3"
      language: generic
    - stage: Unit on Mac
      script: *unit_script
      os: osx
      env:
        - LUA="luajit=2.1"
      language: generic
    # Integration tests for mac
    - stage: Integration on Mac
      script: *integration_script
      os: osx
      env:
        - LUA="lua=5.1"
      language: generic
    - stage: Integration on Mac
      script: *integration_script
      os: osx
      env:
        - LUA="lua=5.2"
      language: generic
    - stage: Integration on Mac
      script: *integration_script
      os: osx
      env:
        - LUA="lua=5.3"
      language: generic
    - stage: Integration on Mac
      script: *integration_script
      os: osx
      env:
        - LUA="luajit=2.1"
      language: generic

before_install:
  - if [ ! -f lua_install/bin/luarocks ]; then pip install hererocks; fi
  - if [ ! -f lua_install/bin/luarocks ]; then hererocks lua_install -r^ --$LUA; fi
  - export PATH=$PATH:$PWD/lua_install/bin # Add directory with all installed binaries to PATH

install:
  - if [ ! -f lua_install/bin/busted ]; then luarocks install busted; fi
  - if [ ! -f lua_install/bin/luacov ]; then luarocks install cluacov; fi
  - if [ ! -f lua_install/bin/luacheck ]; then luarocks install luacheck; fi
  - luarocks install busted-htest

after_success:
  - luacov -c $TRAVIS_BUILD_DIR/testrun/luacov.config
  - cd $TRAVIS_BUILD_DIR/testrun/ && bash <(curl -s https://codecov.io/bash)
  - grep "Summary" -B1 -A1000 $TRAVIS_BUILD_DIR/testrun/luacov.report.out

notifications:
  email:
    on_success: change
    on_failure: change
  webhooks:
    urls:
      - https://webhooks.gitter.im/e/3320fc3f28abbb06e1d8
    on_success: change
    on_failure: always
    on_start: never