dist: trusty
language: go
go:
  - '1.12.x'
  - '1.11.x'
env:
  global:
    - GO_VERSION_FOR_JVM='1.11.x'
    - CGO_ENABLED=0
    - GO111MODULE=on
    - ONIGURUMA_VERSION='6.9.1'
  matrix:
    - ONIGURUMA=0
    - ONIGURUMA=1
matrix:
  fast_finish: true

stages:
  - name: test
  - name: release
    if: tag IS present
  - name: publish
    if: tag IS present

stage: test
install:
  - >
    if [[ "${ONIGURUMA}" -gt 0 ]]; then
      export CGO_ENABLED=1
      export GO_TAGS='oniguruma'
      # install oniguruma manually as trusty has only ancient 5.x
      sudo apt-get install -y dpkg # dpkg >= 1.17.5ubuntu5.8 fixes https://bugs.launchpad.net/ubuntu/+source/dpkg/+bug/1730627
      wget "http://archive.ubuntu.com/ubuntu/pool/universe/libo/libonig/libonig5_${ONIGURUMA_VERSION}-1_amd64.deb"
      sudo dpkg -i "libonig5_${ONIGURUMA_VERSION}-1_amd64.deb"
      wget "http://archive.ubuntu.com/ubuntu/pool/universe/libo/libonig/libonig-dev_${ONIGURUMA_VERSION}-1_amd64.deb"
      sudo dpkg -i "libonig-dev_${ONIGURUMA_VERSION}-1_amd64.deb"
    fi;
script:
  - make test-coverage
after_success:
  - bash <(curl -s https://codecov.io/bash)

jobs:
  include:
    - name: 'java unit-tests'
      stage: test
      language: scala
      jdk: oraclejdk8
      install:
        - export CGO_ENABLED=1
        - eval "$(curl -sL https://raw.githubusercontent.com/travis-ci/gimme/master/gimme | GIMME_GO_VERSION=$GO_VERSION_FOR_JVM bash)"
        - go version
      before_script:
        - cd java
        - make
      script:
        - make test

    - name: 'linux packages'
      stage: release
      install:
        - go version
      script: make packages
      deploy:
        provider: releases
        api_key:
          secure: $GITHUB_TOKEN
        file_glob: true
        file: build/*.tar.gz
        skip_cleanup: true
        on:
          tags: true

    - name: 'linux shared lib'
      stage: release
      install:
        - go version
      script: make linux-shared
      deploy:
        provider: releases
        api_key:
          secure: $GITHUB_TOKEN
        file:
          - ./.shared/linux-x86-64/libenry.so
        skip_cleanup: true
        on:
          tags: true

    - name: 'macOS shared lib'
      stage: release
      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"
      install:
        - go version
        - 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 -sfSL ${OSXCROSS_URL} | tar -C ${HOME} -xzf -
        - cd $GOPATH/src/github.com/src-d/enry
      script: make darwin-shared
      deploy:
        provider: releases
        api_key:
          secure: $GITHUB_TOKEN
        file: ./.shared/darwin/libenry.dylib
        skip_cleanup: true
        on:
          tags: true

    - name: 'java: publish to maven'
      stage: publish
      language: scala
      jdk: oraclejdk8
      install:
        - export CGO_ENABLED=1
        - eval "$(curl -sL https://raw.githubusercontent.com/travis-ci/gimme/master/gimme | GIMME_GO_VERSION=$GO_VERSION_FOR_JVM bash)"
        - go version
      before_script:
        - cd java
        - make
        - curl -o ./shared/linux-x86-64/libenry.so -sfL "https://github.com/$TRAVIS_REPO_SLUG/releases/download/$TRAVIS_TAG/libenry.so" || travis_terminate 1
        - mkdir -p ./shared/darwin
        - curl -o ./shared/darwin/libenry.dylib -sfL "https://github.com/$TRAVIS_REPO_SLUG/releases/download/$TRAVIS_TAG/libenry.dylib" || travis_terminate 1
        - 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
