language: cpp
compiler: gcc

matrix:
  include:
  #Ubuntu Xenial (Debug only)
  - name: Ubuntu Xenial (Debug)
    if: tag IS NOT present
    os: linux
    dist: xenial
    group: stable
    cache: ccache
    addons:
      apt:
        packages:
        - libprotobuf-dev
        - protobuf-compiler
        - liblzma-dev
        - qt5-default
        - qttools5-dev
        - qttools5-dev-tools
        - qtmultimedia5-dev
        - libqt5multimedia5-plugins
        - libqt5svg5-dev
        - libqt5sql5-mysql
        - libqt5websockets5-dev
    script: bash ./.ci/travis-compile.sh --format --server --test --debug

  #Ubuntu Bionic (on docker)
  - name: Ubuntu Bionic (Debug)
    if: tag IS NOT present
    services: docker
    env: NAME=UbuntuBionic
    cache:
      directories:
        - $HOME/$NAME/
    before_install: docker build -t "cockatrice_${NAME,,}" .ci/$NAME && mkdir -p $HOME/$NAME/.ccache
    script: docker run --mount "type=bind,source=$(pwd),target=/src" -w="/src"
          --mount "type=bind,source=$HOME/$NAME/.ccache,target=/.ccache" -e "CCACHE_DIR=/.ccache"
          "cockatrice_${NAME,,}"
          bash .ci/travis-compile.sh --server --debug

  - name: Ubuntu Bionic (Release)
    if: (branch = master AND NOT type = pull_request) OR tag IS present
    services: docker
    env: NAME=UbuntuBionic
    cache:
      directories:
        - $HOME/$NAME/
    before_install: docker build -t "cockatrice_${NAME,,}" .ci/$NAME && mkdir -p $HOME/$NAME/.ccache
    script: docker run --mount "type=bind,source=$(pwd),target=/src" -w="/src"
          --mount "type=bind,source=$HOME/$NAME/.ccache,target=/.ccache" -e "CCACHE_DIR=/.ccache"
          "cockatrice_${NAME,,}"
          bash .ci/travis-compile.sh --server --package "$NAME" --release

  #Fedora 29 (on docker)
  - name: Fedora 29 (Debug)
    if: tag IS NOT present
    services: docker
    env: NAME=Fedora29
    cache:
      directories:
        - $HOME/$NAME/
    before_install: docker build -t "cockatrice_${NAME,,}" .ci/$NAME && mkdir -p $HOME/$NAME/.ccache
    script: docker run --mount "type=bind,source=$(pwd),target=/src" -w="/src"
          --mount "type=bind,source=$HOME/$NAME/.ccache,target=/.ccache" -e "CCACHE_DIR=/.ccache"
          "cockatrice_${NAME,,}"
          bash .ci/travis-compile.sh --server --debug

  - name: Fedora 29 (Release)
    if: (branch = master AND NOT type = pull_request) OR tag IS present
    services: docker
    env: NAME=Fedora29
    cache:
      directories:
        - $HOME/$NAME/
    before_install: docker build -t "cockatrice_${NAME,,}" .ci/$NAME && mkdir -p $HOME/$NAME/.ccache
    script: docker run --mount "type=bind,source=$(pwd),target=/src" -w="/src"
          --mount "type=bind,source=$HOME/$NAME/.ccache,target=/.ccache" -e "CCACHE_DIR=/.ccache"
          "cockatrice_${NAME,,}"
          bash .ci/travis-compile.sh --server --package "$NAME" "RPM" --release

  #macOS
  - name: macOS (Debug)
    if: tag IS NOT present
    os: osx
    osx_image: xcode10.1
    cache: ccache
    addons:
      homebrew:
        packages:
        - ccache
        - protobuf
        - qt
        - xz
    script: bash ./.ci/travis-compile.sh --server --install --debug

  - name: macOS (Release)
    if: (branch = master AND NOT type = pull_request) OR tag IS present
    os: osx
    osx_image: xcode9.2
    cache: ccache
    addons:
      homebrew:
        packages:
        - ccache
        - protobuf
        - qt
        - xz
        update: true
    script: bash ./.ci/travis-compile.sh --server --package "$TRAVIS_OS_NAME" --release

# Builds for pull requests skip the deployment step altogether
deploy:
# Deploy configuration for "beta" releases
  - provider: releases
    api_key:
      secure: mLMF41q7xgOR1sjczsilEy7HQis2PkZCzhfOGbn/8FoOQnmmPOZjrsdhn06ZSl3SFsbfCLuClDYXAbFscQmdgjcGN5AmHV+JYfW650QEuQa/f4/lQFsVRtEqUA1O3FQ0OuRxdpCfJubZBdFVH8SbZ93GLC5zXJbkWQNq+xCX1fU=
    skip_cleanup: true
    name: "Cockatrice $TRAVIS_TAG"
    body: "Beta release of Cockatrice"
    file_glob: true
    file: "build/Cockatrice-*"
    overwrite: true
    draft: false
    prerelease: true
    on:
      tags: true
      repo: Cockatrice/Cockatrice
      condition: $TRAVIS_TAG =~ ([0-9]|[1-9][0-9])(\.([0-9]|[1-9][0-9])){2}-beta(\.([2-9]|[1-9][0-9]))?$     # regex to match semver naming convention for beta pre-releases

# Deploy configuration for "stable" releases
  - provider: releases
    api_key:
      secure: mLMF41q7xgOR1sjczsilEy7HQis2PkZCzhfOGbn/8FoOQnmmPOZjrsdhn06ZSl3SFsbfCLuClDYXAbFscQmdgjcGN5AmHV+JYfW650QEuQa/f4/lQFsVRtEqUA1O3FQ0OuRxdpCfJubZBdFVH8SbZ93GLC5zXJbkWQNq+xCX1fU=
    skip_cleanup: true
    file_glob: true
    file: "build/Cockatrice-*"
    overwrite: true
    draft: false
    prerelease: false
    on:
      tags: true
      repo: Cockatrice/Cockatrice
      condition: $TRAVIS_TAG =~ ([0-9]|[1-9][0-9])(\.([0-9]|[1-9][0-9])){2}$    # regex to match semver naming convention for stable full releases


notifications:
  email: false
  webhooks:
    urls:
    - https://webhooks.gitter.im/e/d94969c3b01b22cbdcb7
    on_success: change
    on_failure: change
    on_start: never
    on_cancel: change
    on_error: change


# Announcements of build image updates: https://docs.travis-ci.com/user/build-environment-updates/
# For precise versions of preinstalled tools on the VM, check “Build system information” in the build log!
# Official validator for ".travis.yml" config file: https://yaml.travis-ci.org
# Travis CI config documentation: https://docs.travis-ci.com/user/customizing-the-build
