language: node_js
sudo: false
node_js:
  - 7

addons:
  jwt:
    secure: OYhRpW+8A0Iik+9GmHwa45ZwXeBXw/6zh6I+1w2H9g/LqPRp+Nhq3f4FSpvrrfno8lO8W4h+7s6+JOzF8C8NxNda5UUygKjF9pUphgiQdqls3YZMJlC9zXVl7gQXAHi3nG1s8vWSpwpzYD9fqczE1FX9n0+R63qX3eB6C/LbPeI=

cache:
  directories:
    - ~/.npm
    - ~/.yarn-cache
    - travis_phantomjs

env:
  global:
    - BIN=node ISTANBUL=false OPTION=""
    - SAUCE_LABS=false SAUCE_USERNAME=lodash

  matrix:
    -
    - BIN=phantomjs
    - ISTANBUL=true
    - SAUCE_LABS=true

matrix:
  include:
    - node_js: 6
      env:

git:
  depth: 10

branches:
  only:
    - master

notifications:
  webhooks:
    urls:
      - https://webhooks.gitter.im/e/4aab6358b0e9aed0b628
    on_success: change
    on_failure: always

before_install:
  # Upgrade PhantomJS.
  - |
      export PHANTOMJS_VERSION=2.1.1
      export PATH=$PWD/travis_phantomjs/phantomjs-$PHANTOMJS_VERSION-linux-x86_64/bin:$PATH
      if [ $(phantomjs --version) != $PHANTOMJS_VERSION ]; then
        rm -rf $PWD/travis_phantomjs
        mkdir -p $PWD/travis_phantomjs
        wget https://github.com/Medium/phantomjs/releases/download/v$PHANTOMJS_VERSION/phantomjs-$PHANTOMJS_VERSION-linux-x86_64.tar.bz2
        tar -xvf phantomjs-$PHANTOMJS_VERSION-linux-x86_64.tar.bz2 -C $PWD/travis_phantomjs
      fi
      phantomjs -v

  # Use exact Node version.
  - nvm use $TRAVIS_NODE_VERSION

  # Setup package managers.
  - npm set loglevel error
  - npm set progress false
  - npm i -g yarn@0.16.1
  - yarn -V

  # Remove code skipped on the coverage run.
  - |
      PATTERN[0]="|\s*while\s*\([^)]+\)\s*\{\s*iteratee\(index\);\s*\}|"
      PATTERN[1]="|\bindex,\s*iterable\)\s*===\s*false\)[^}]+?(break;)|"
      PATTERN[2]="|\bcase\s+(?:dataView|promise|set|map|weakMap)CtorString:.+|g"
      PATTERN[3]="|\s*if\s*\(cache\.size\b[\s\S]+?\}|"
      PATTERN[4]="|\s*if\s*\(\!lodashFunc\)\s*\{\s*return;\s*\}|"
      PATTERN[5]="|\s*define\([\s\S]+?\);|"
      PATTERN[6]="|\s*root\._\s*=\s*_;|"

      if [ $ISTANBUL = true ]; then
        set -e
        for PTRN in ${PATTERN[@]}; do
          node ./test/remove.js $PTRN ./lodash.js
        done
      fi

install:
  # Install packages.
  - yarn

  # Use lodash-cli from GitHub.
  - git clone --depth=10 --branch=master git://github.com/lodash/lodash-cli ./node_modules/lodash-cli
  - mkdir -p ./node_modules/lodash-cli/node_modules/lodash; cd $_; cp ../../../../lodash.js ./lodash.js; cp ../../../../package.json ./package.json
  - cd ../../; npm i --production; cd ../../

script:
  # Detect code coverage.
  - |
      if [ $ISTANBUL = true ]; then
        istanbul cover -x "**/vendor/**" --report lcovonly ./test/test.js -- ./lodash.js
        if [ $TRAVIS_SECURE_ENV_VARS = true ]; then
          cat ./coverage/lcov.info | coveralls
          cat ./coverage/coverage.json | codecov
        fi
      fi

  # Test in Node.js and PhantomJS.
  - |
      if [ $ISTANBUL = false ]; then
        node ./node_modules/lodash-cli/bin/lodash -o ./dist/lodash.js
        node ./node_modules/lodash-cli/bin/lodash modularize exports=node -o ./
        node ./node_modules/lodash-cli/bin/lodash -d -o ./lodash.js
        if [ $SAUCE_LABS = false ]; then
          cd ./test
          $BIN $OPTION ./test.js ../lodash.js
          if [ $TRAVIS_SECURE_ENV_VARS = true ]; then
            $BIN $OPTION ./test.js ../dist/lodash.min.js
          fi
        fi
      fi

  # Test in Sauce Labs.
  - |
      if [ $SAUCE_LABS = true ]; then
        node ./node_modules/lodash-cli/bin/lodash core -o ./dist/lodash.core.js
        npm run build
        $BIN ./test/saucelabs.js name="lodash tests"     runner="test/index.html?build=../dist/lodash.js&noglobals=true"     tags=development
        $BIN ./test/saucelabs.js name="lodash tests"     runner="test/index.html?build=../dist/lodash.min.js&noglobals=true" tags=production
        $BIN ./test/saucelabs.js name="lodash-fp tests"  runner="test/fp.html?noglobals=true"                                tags=development
        $BIN ./test/saucelabs.js name="underscore tests" runner="test/underscore.html?build=../dist/lodash.js"               tags=development,underscore
        $BIN ./test/saucelabs.js name="underscore tests" runner="test/underscore.html?build=../dist/lodash.min.js"           tags=production,underscore
        $BIN ./test/saucelabs.js name="backbone tests"   runner="test/backbone.html?build=../dist/lodash.js"                 tags=development,backbone
        $BIN ./test/saucelabs.js name="backbone tests"   runner="test/backbone.html?build=../dist/lodash.min.js"             tags=production,backbone
        $BIN ./test/saucelabs.js name="backbone tests"   runner="test/backbone.html?build=../dist/lodash.core.js"            tags=development,backbone
        $BIN ./test/saucelabs.js name="backbone tests"   runner="test/backbone.html?build=../dist/lodash.core.min.js"        tags=production,backbone
      fi
