language: minimal
filter_secrets: false
cache:
  directories:
    - ${HOME}/ccache

stages:
  - build
  - test
  - quality

jobs:
  include:

    - &build-template
      stage: build
      name: linux
      env: NAME=linux EXT=
      os: linux
      dist: xenial
      language: minimal
      services:
        - docker
      install:
        - mkdir -p ${HOME}/ccache
        - docker pull $DOCKER_BUILD_IMAGE
      script:
        - docker run -v "$(pwd):/lbrycrd" -v "${HOME}/ccache:/ccache" -w /lbrycrd -e CCACHE_DIR=/ccache ${DOCKER_IMAGE} packaging/build_${NAME}_64bit.sh
      before_deploy:
        - mkdir -p dist
        - sudo zip -Xj dist/lbrycrd-${NAME}.zip src/lbrycrdd${EXT} src/lbrycrd-cli${EXT} src/lbrycrd-tx${EXT}
        - sudo zip -Xj dist/lbrycrd-${NAME}-test.zip src/test/test_lbrycrd${EXT} src/test/test_lbrycrd_fuzzy${EXT}
        - sha256sum dist/lbrycrd-${NAME}.zip
        - sha256sum dist/lbrycrd-${NAME}-test.zip
      deploy:
        - provider: s3
          access_key_id: AKIAICKFHNTR5RITASAQ
          secret_access_key:
            secure: Qfgs8vGnEUvgiZNP2S9zY8qHEzaDOceF/XTv32jRBOISWfTqOTE56DZbOp8WKHPAqn0dx04jKA1NfV9f06sXU1NVbiJ2VYISo6XAk0n3RBJL3/mhNxvut/zM2DHkFPljWTkWEColS0ZyA3m4eUyJvAw/i+mOBT/zDD/oIlS5Uo5l/x3LmF9fYBuei0ucwSQeNOr2wCMIl+pXrIU7B3lEzXh1asayW6A9y7DOqMLnrSQ7TLlSssbnhuhDVpFx0xxX/U2NPraotbGKdo3wwMbms/lluBe60I/LsDNp9/SZXMDXh2YLGUImr97octwpdzIMjF+kU7QAZJzM7grz8PU9+MQh2V5sn6Xsww2x4PdkmHGz/2FMzhrCrlPf5JCaPBH49G+w4/29HYmMrlimOOVx4qXCpQ/XtWWne/d6MF0qqT6JhdPuD9ohmTpxcHRkCe2fxUw6Yn3dj+/+YoCywAcwcBm5jLpAotmWoCmmcnm9rvB7bIuPPZAjJUZViCnyvwY4Tj3Fb+sOuK4b/O5D2+cuS+WgQRkN/RspYlXrXTIh8Efv/yhW5L9WdzG1OExJDw2hX5VTccRRgIKZxZp80U2eYqn2M07+1nU+ShX4kgiSon46k5cfacLgzLKWEyCxWSSTbsYcwRxvDEjtYy4wxAYx8+J3dgQPs/opDXoQTJMjud0=
          bucket: build.lbry.io
          upload-dir: lbrycrd/${TRAVIS_BRANCH}
          acl: public_read
          local_dir: dist
          skip_cleanup: true
          on:
            repo: lbryio/lbrycrd
            all_branches: true

    - <<: *build-template
      name: windows
      env: NAME=windows EXT=.exe

    - <<: *build-template
      name: osx
      env: NAME=darwin EXT=
      before_install:
        - mkdir -p ./depends/SDKs && pushd depends/SDKs && curl -C - ${MAC_OS_SDK} | tar --skip-old-files -xJ && popd

    - &test-template
      stage: test
      env: NAME=linux
      os: linux
      dist: xenial
      language: minimal
      git:
        depth: 3
      install:
        - mkdir -p testrun && cd testrun
        - curl http://build.lbry.io/lbrycrd/${TRAVIS_BRANCH}/lbrycrd-${NAME}-test.zip -o temp.zip
        - unzip temp.zip
      script: TRIEHASH_FUZZER_BLOCKS=1000 ./test_lbrycrd

    - <<: *test-template
      # os: windows # doesn't support secrets at the moment
      os: linux
      dist: xenial
      env: NAME=windows
      services:
        - docker
      script:
        - docker pull $DOCKER_WINE_IMAGE
        - docker run -v "$(pwd):/test" -e "WINEDEBUG=-all" -e "TRIEHASH_FUZZER_BLOCKS=1000" -it $DOCKER_WINE_IMAGE wine "/test/test_lbrycrd.exe"

    - <<: *test-template
      os: osx
      osx_image: xcode8.3
      env: NAME=darwin


    - stage: quality
      name: "check format"
      os: linux
      dist: xenial
      language: minimal
      install:
        - sudo apt-get install -y clang-format-3.9
      script: git diff -U0 origin/master -- '*.h' '*.cpp' | ./contrib/devtools/clang-format-diff.py -p1