language: objective-c

env:
  global:
    - secure: "gve1nkeKkwFEG1VAT3i+JwYyAdF0gKXwKx0uxbkBTsmm2M+0MDusohQdFLoEIkSIFktXBIDefoa7iGpLKRfG2VsZLpwJgnvnD0HqbnuR+k+W+bu7BHt4CAaR6GTllsDCjyq9zNyhUThzSnf2WNIpOEF5kHspZlbGfawURuUJH/U="
    - secure: "jqVpmWxxBVXu2X8+XJMpKH0cooc2EKz9xKL2znBfYdNafJORSXcFAVbjCX5mZmVDcgIMwDtm2+gIG4P73hzJ2e3S+y2Z9ROJGyXHa3AxUTvXHQsxqzH8coHHqB8vTvfr0t2O5aKfpvpICpSea39r0hzNoMv6Ie5SwBdqj1YY9K0="
  matrix:
    - NODE_VERSION="v10"
    - NODE_VERSION="v9"
    - NODE_VERSION="v8"
    - NODE_VERSION="v7"
    - NODE_VERSION="v6"
    - NODE_VERSION="v5"
    - NODE_VERSION="v4"
    - NODE_VERSION="v0.10"

before_install:

  - echo $TRAVIS_OS_NAME

  # commit
  # ------------------------
  # The commit message is used to determine the whether to manually
  # invoke a binary publish

  - COMMIT_MESSAGE=$(git show -s --format=%B $TRAVIS_COMMIT | tr -d '\n')

  # node
  # ------------------------

  - export PATH=./node_modules/.bin/:$PATH
  - rm -rf ~/.nvm && git clone --depth 1 https://github.com/creationix/nvm.git ~/.nvm
  - source ~/.nvm/nvm.sh
  - nvm install $NODE_VERSION
  - nvm use $NODE_VERSION
  - npm install -g npm@3
  - node --version
  - npm --version
  - nvm --version

  # publish dependencies
  # ------------------------

  - npm install node-gyp -g
  - npm install aws-sdk

install:

  # in the first instance we build from source to create the initial binary
  # which can then be used to create a package

  - npm install --build-from-source
  - npm test

before_script:

  # Detemine if a publish is required.
  #
  # a) we are building a tag
  # b) we put [publish binary] in the commit message

  - PUBLISH_BINARY=false

  - if [[ $TRAVIS_BRANCH == `git describe --tags --always HEAD` ]]; then PUBLISH_BINARY=true; fi;       # a
  - if test "${COMMIT_MESSAGE#*'[publish binary]'}" != "$COMMIT_MESSAGE"; then PUBLISH_BINARY=true; fi; # b

  # package & publish
  # ------------------------

  - if [[ $PUBLISH_BINARY == true ]]; then npm run node-pre-gyp package publish; fi;

  # clean-up
  # ------------------------

  - npm run node-pre-gyp clean
  - node-gyp clean

script:

  # validate
  # ------------------------
  # Post publishing a release verify that installing will pull down latest
  # binary from remote host

  - INSTALL_RESULT=0
  - if [[ $PUBLISH_BINARY == true ]]; then INSTALL_RESULT=$(npm install --fallback-to-build=false > /dev/null)$? || true; fi;

  - npm run node-pre-gyp clean

  # failure?
  # ------------------------
  # if install returned non zero (errored) then we first unpublish and then
  # call false so travis will bail at this line.

  - if [[ $INSTALL_RESULT != 0 ]]; then npm run node-pre-gyp unpublish; fi;
  - if [[ $INSTALL_RESULT != 0 ]]; then echo "returned $INSTALL_RESULT";false; fi;

after_success:

  # display all published binaries

 - npm run node-pre-gyp info
