language: go

go:
  - 1.9.x
  - tip

addons:
  apt:
    packages:
      - libonig-dev

matrix:
  allow_failures:
    - go: tip
  fast_finish: true

env:
  - ONIGUMURA=0
  - ONIGUMURA=1

install:
  - rm -rf $GOPATH/src/gopkg.in/src-d
  - mkdir -p $GOPATH/src/gopkg.in/src-d
  - ln -s $PWD $GOPATH/src/gopkg.in/src-d/enry.v1
  - cd $GOPATH/src/gopkg.in/src-d/enry.v1
  - if [ "$ONIGUMURA" == "1" ]; then make onigumura; fi
  - go get -v -t ./...

script:
  - make test-coverage

after_success:
  - bash <(curl -s https://codecov.io/bash)

before_deploy:
  - make packages

deploy:
  provider: releases
  api_key:
    secure: $GITHUB_TOKEN
  file_glob: true
  file: build/*.tar.gz
  skip_cleanup: true
  on:
    tags: true

jobs:
  env:
    - ONIGUMURA=0    
  include:
    - stage: test
      language: scala
      jdk: oraclejdk8

      install:
        - GIMME_OUTPUT=$(gimme 1.8 | tee -a $HOME/.bashrc) && eval "$GIMME_OUTPUT"
        - export GOPATH=$HOME/gopath
        - mkdir -p $GOPATH/src/gopkg.in/src-d/enry.v1
        - rsync -az ${TRAVIS_BUILD_DIR}/ $GOPATH/src/gopkg.in/src-d/enry.v1
        - go get -v gopkg.in/src-d/enry.v1/...

      before_script:
        - cd java
        - make

      script:
        - make test

      before_deploy:
        - cd ..

      deploy:
        provider: releases
        api_key:
          secure: $GITHUB_TOKEN
        file:
          - ./.shared/linux-x86-64/libenry.so
        skip_cleanup: true
        on:
          tags: true

    - stage: Build macOS shared

      env:
        - OSXCROSS_PACKAGE="osxcross_3034f7149716d815bc473d0a7b35d17e4cf175aa.tar.gz"
        - OSXCROSS_URL="https://github.com/bblfsh/client-scala/releases/download/v1.5.2/${OSXCROSS_PACKAGE}"
        - PATH="/$HOME/osxcross/bin:$PATH"

      sudo: true

      install:
        - if [[ -z "$TRAVIS_TAG" ]]; then echo "Skipping this build for non-tag builds."; exit 0; fi
        - rm -rf $GOPATH/src/gopkg.in/src-d
        - mkdir -p $GOPATH/src/gopkg.in/src-d
        - ln -s $PWD $GOPATH/src/gopkg.in/src-d/enry.v1
        - cd $GOPATH/src/gopkg.in/src-d/enry.v1
        - go get -v -t ./...
        - sudo apt-get update
        - sudo apt-get install -y --no-install-recommends clang g++ gcc gcc-multilib libc6-dev libc6-dev-i386 mingw-w64 patch xz-utils
        - cd ${HOME}
        - curl -sSL ${OSXCROSS_URL} | tar -C ${HOME} -xzf - 
        - cd $GOPATH/src/gopkg.in/src-d/enry.v1

      script:
        - make darwin-shared

      before_deploy:
        - echo "skip before_deploy"

      deploy:
        provider: releases
        api_key:
          secure: $GITHUB_TOKEN
        file: ./.shared/darwin/libenry.dylib
        skip_cleanup: true
        on:
          tags: true

    - stage: Publish Maven
      language: scala
      jdk: oraclejdk8

      before_script:
        - if [[ -z "$TRAVIS_TAG" ]]; then echo "Skipping this build for non-tag builds."; exit 0; fi
        - cd java
        - make
        - curl -o ./shared/linux-x86-64/libenry.so -sL "https://github.com/$TRAVIS_REPO_SLUG/releases/download/$TRAVIS_TAG/libenry.so"
        - mkdir -p ./shared/darwin
        - curl -o ./shared/darwin/libenry.dylib -sL "https://github.com/$TRAVIS_REPO_SLUG/releases/download/$TRAVIS_TAG/libenry.dylib"
        - openssl aes-256-cbc -K $encrypted_a0e1c69dbbc7_key -iv $encrypted_a0e1c69dbbc7_iv -in key.asc.enc -out key.asc -d
        - gpg --no-default-keyring --primary-keyring ./project/.gnupg/pubring.gpg --secret-keyring ./project/.gnupg/secring.gpg --keyring ./project/.gnupg/pubring.gpg --fingerprint --import key.asc

      script:
        - make test # ensure the shared objects are functional
        - ./sbt publishLocal
        - ./sbt publishSigned
        - ./sbt sonatypeRelease

      before_deploy:
        - rm ./target/enry-java-*-javadoc.jar
        - rm ./target/enry-java-*-sources.jar
        - rm ./target/enry-java-*-tests.jar
        - rm ./target/enry-java-assembly-*.jar

      deploy:
        provider: releases
        api_key:
          secure: $GITHUB_TOKEN
        file_glob: true
        file: ./target/enry-java*.jar
        skip_cleanup: true
        on:
          tags: true
