sudo: required
dist: xenial
language: cpp
cache: ccache

# regex is for master, release branches, and release tags
branches:
  only:
    - master
    - /^v\d+\.\d+-dev$/
    - /^v(\d+\.){2}\d+$/

stages:
  - Linux
  - name: "Windows Stage 1: Dependencies (OpenSSL, Qt)"
    if: type = push OR type = cron
  - name: "Windows Stage 2: Dependencies (other)"
    if: type = push OR type = cron
  - name: "Windows Stage 3: qTox"
    if: type = push OR type = cron

env:
  global:
    - CIRP_GITHUB_REPO_SLUG="qTox/qTox-nightly-releases"

jobs:
  include:
    - stage: Linux
      os: linux
      env: JOB=verify-commit-format
      script: "./.travis/$JOB.sh"
    - stage: Linux
      os: linux
      env: JOB=build-docs DOXYGEN_CONFIG_FILE=doxygen.conf
      script: "./.travis/$JOB.sh"
    - stage: Linux
      os: linux
      env: JOB=build-gitstats GITSTATS_DIR=gitstats
      addons:
        apt:
          packages:
            - gitstats
      script: "./.travis/$JOB.sh"
    # the actual compilin'
    - stage: Linux
      os: linux
      env: JOB=build-ubuntu-16-04
      script: "./.travis/$JOB.sh"
    - stage: "Windows Stage 1: Dependencies (OpenSSL, Qt)"
      os: linux
      # Makes the cache this job creates avaiable only to jobs with WINDOWS_BUILD_ARCH_CACHE_TRICK_VARIABLE=i686,
      # making sure that i686 and x86_64 caches don't overwrite each other
      env: WINDOWS_BUILD_ARCH_CACHE_TRICK_VARIABLE=i686
      script: ./.travis/build-windows.sh i686 release /opt/build-windows/i686 stage1
      services:
        - docker
      cache:
        directories:
          - /opt/build-windows/i686
    - stage: "Windows Stage 1: Dependencies (OpenSSL, Qt)"
      os: linux
      env: WINDOWS_BUILD_ARCH_CACHE_TRICK_VARIABLE=x86_64
      script: ./.travis/build-windows.sh x86_64 release /opt/build-windows/x86_64 stage1
      services:
        - docker
      cache:
        directories:
          - /opt/build-windows/x86_64
    - stage: "Windows Stage 2: Dependencies (other)"
      os: linux
      env: WINDOWS_BUILD_ARCH_CACHE_TRICK_VARIABLE=i686
      script: ./.travis/build-windows.sh i686 release /opt/build-windows/i686 stage2
      services:
        - docker
      cache:
        directories:
          - /opt/build-windows/i686
    - stage: "Windows Stage 2: Dependencies (other)"
      os: linux
      env: WINDOWS_BUILD_ARCH_CACHE_TRICK_VARIABLE=x86_64
      script: ./.travis/build-windows.sh x86_64 release /opt/build-windows/x86_64 stage2
      services:
        - docker
      cache:
        directories:
          - /opt/build-windows/x86_64
    - stage: "Windows Stage 3: qTox"
      os: linux
      env: WINDOWS_BUILD_ARCH_CACHE_TRICK_VARIABLE=i686
      script:
        - ./.travis/build-windows.sh i686 release /opt/build-windows/i686 stage3
        - export ARTIFACTS_DIR="$(mktemp -d)"
        - cp -a ./workspace/i686/qtox/release/{setup-qtox-i686-release.exe,setup-qtox-i686-release.exe.sha256,qtox-i686-release.zip,qtox-i686-release.zip.sha256} "$ARTIFACTS_DIR"
        - .travis/cirp/cleanup1.sh
        - .travis/cirp/store.sh "$ARTIFACTS_DIR"
        - .travis/cirp/cleanup2.sh
      services:
        - docker
      cache:
        directories:
          - /opt/build-windows/i686
    - stage: "Windows Stage 3: qTox"
      os: linux
      env: WINDOWS_BUILD_ARCH_CACHE_TRICK_VARIABLE=x86_64
      script:
        - ./.travis/build-windows.sh x86_64 release /opt/build-windows/x86_64 stage3
        - export ARTIFACTS_DIR="$(mktemp -d)"
        - cp -a ./workspace/x86_64/qtox/release/{setup-qtox-x86_64-release.exe,setup-qtox-x86_64-release.exe.sha256,qtox-x86_64-release.zip,qtox-x86_64-release.zip.sha256} "$ARTIFACTS_DIR"
        - .travis/cirp/cleanup1.sh
        - .travis/cirp/store.sh "$ARTIFACTS_DIR"
        - .travis/cirp/cleanup2.sh
      services:
        - docker
      cache:
        directories:
          - /opt/build-windows/x86_64
    - stage: "Windows Stage 3: qTox"
      os: linux
      env: WINDOWS_BUILD_ARCH_CACHE_TRICK_VARIABLE=i686
      script:
        - ./.travis/build-windows.sh i686 debug /opt/build-windows/i686 stage3
        - export ARTIFACTS_DIR="$(mktemp -d)"
        - cp -a ./workspace/i686/qtox/debug/{qtox-i686-debug.zip,qtox-i686-debug.zip.sha256} "$ARTIFACTS_DIR"
        - .travis/cirp/cleanup1.sh
        - .travis/cirp/store.sh "$ARTIFACTS_DIR"
        - .travis/cirp/cleanup2.sh
      services:
        - docker
      cache:
        directories:
          - /opt/build-windows/i686
    - stage: "Windows Stage 3: qTox"
      os: linux
      env: WINDOWS_BUILD_ARCH_CACHE_TRICK_VARIABLE=x86_64
      script:
        - ./.travis/build-windows.sh x86_64 debug /opt/build-windows/x86_64 stage3
        - export ARTIFACTS_DIR="$(mktemp -d)"
        - cp -a ./workspace/x86_64/qtox/debug/{qtox-x86_64-debug.zip,qtox-x86_64-debug.zip.sha256} "$ARTIFACTS_DIR"
        - .travis/cirp/cleanup1.sh
        - .travis/cirp/store.sh "$ARTIFACTS_DIR"
        - .travis/cirp/cleanup2.sh
      services:
        - docker
      cache:
        directories:
          - /opt/build-windows/x86_64
    - stage: "macOS, AppImage and Flatpak"
      os: osx
      osx_image: xcode10.2 # macOS 10.14, oldest supported SDK according to https://developer.apple.com/support/xcode/
      env: JOB=build-osx
      cache:
        timeout: 300 # seconds
        ccache: true
        directories:
          - $HOME/Library/Caches/Homebrew
      before_cache:
        - brew cleanup
      script:
        - "./.travis/$JOB.sh"
        - export ARTIFACTS_DIR="$(mktemp -d)"
        - cp -a ./{qTox.dmg,qTox.dmg.sha256} "$ARTIFACTS_DIR"
        - .travis/cirp/cleanup1.sh
        - .travis/cirp/store.sh "$ARTIFACTS_DIR"
        - .travis/cirp/cleanup2.sh
    - stage: "macOS, AppImage and Flatpak"
      os: linux
      env: JOB=APPIMAGE
      script:
        - ./appimage/build-appimage.sh
        - export ARTIFACTS_DIR="$(mktemp -d)"
        - cp -a ./output/* "$ARTIFACTS_DIR"
        - .travis/cirp/cleanup1.sh
        - .travis/cirp/store.sh "$ARTIFACTS_DIR"
        - .travis/cirp/cleanup2.sh
      services:
        - docker
    - stage: "macOS, AppImage and Flatpak"
      os: linux
      env: JOB=FLATPAK
      script:
        - ./flatpak/build-flatpak.sh
        - export ARTIFACTS_DIR="$(mktemp -d)"
        - cp -a ./output/* "$ARTIFACTS_DIR"
        - .travis/cirp/cleanup1.sh
        - .travis/cirp/store.sh "$ARTIFACTS_DIR"
        - .travis/cirp/cleanup2.sh
      services:
        - docker
    - stage: "Nightly publishing"
      if: type == cron
      script:
        - export ARTIFACTS_DIR="$(mktemp -d)"
        - .travis/cirp/collect.sh "$ARTIFACTS_DIR"
        - .travis/cirp/cleanup4.sh
        - .travis/cirp/publish.sh "$ARTIFACTS_DIR"
        - .travis/cirp/cleanup5.sh
      cache:
        directories:
          - /opt/cirp



deploy:
  # Linux AppImage
  - provider: releases
    # This is the access token for pushing release builds on Tags
    # Owner: sudden6
    # See https://docs.travis-ci.com/user/deployment/releases/#authenticating-with-an-oauth-token
    token:
        secure: "UAvVIUgfH8VGAzMsKk62yz26oqjNpUxEEyZ7OSjt09VoTMuepZd9wPmLCv0b+jFrk5BwQG9gpDzTD7vZ0Un1g1lGD23K801tvMRue/SO/KmOyeYrqd6o7MEFGb22qmmVoid/hqKLQFOxt/5HYj7fnCzG8EUuA9BvdWmsl4ir8Js="
    file_glob: true
    file: ./output/*
    on:
      condition: $JOB == APPIMAGE
      repo: qTox/qTox
      tags: true
    skip_cleanup: true
    draft: true

  # Linux Flatpak
  - provider: releases
    token:
      secure: "UAvVIUgfH8VGAzMsKk62yz26oqjNpUxEEyZ7OSjt09VoTMuepZd9wPmLCv0b+jFrk5BwQG9gpDzTD7vZ0Un1g1lGD23K801tvMRue/SO/KmOyeYrqd6o7MEFGb22qmmVoid/hqKLQFOxt/5HYj7fnCzG8EUuA9BvdWmsl4ir8Js="
    file_glob: true
    file: ./output/*
    on:
      condition: $JOB == FLATPAK
      repo: qTox/qTox
      tags: true
    skip_cleanup: true
    draft: true

  # osx binary
  - provider: releases
    token:
      secure: "UAvVIUgfH8VGAzMsKk62yz26oqjNpUxEEyZ7OSjt09VoTMuepZd9wPmLCv0b+jFrk5BwQG9gpDzTD7vZ0Un1g1lGD23K801tvMRue/SO/KmOyeYrqd6o7MEFGb22qmmVoid/hqKLQFOxt/5HYj7fnCzG8EUuA9BvdWmsl4ir8Js="
    file:
      - "./qTox.dmg"
      - "./qTox.dmg.sha256"
    on:
      condition: $TRAVIS_OS_NAME == osx
      repo: qTox/qTox
      tags: true
    skip_cleanup: true
    draft: true

  # Windows Installer 64Bit
  - provider: releases
    token:
      secure: "UAvVIUgfH8VGAzMsKk62yz26oqjNpUxEEyZ7OSjt09VoTMuepZd9wPmLCv0b+jFrk5BwQG9gpDzTD7vZ0Un1g1lGD23K801tvMRue/SO/KmOyeYrqd6o7MEFGb22qmmVoid/hqKLQFOxt/5HYj7fnCzG8EUuA9BvdWmsl4ir8Js="
    file:
      - "./workspace/x86_64/qtox/release/setup-qtox-x86_64-release.exe"
      - "./workspace/x86_64/qtox/release/setup-qtox-x86_64-release.exe.sha256"
    on:
      condition: $WINDOWS_BUILD_ARCH_CACHE_TRICK_VARIABLE == x86_64 && -f /home/travis/build/qTox/qTox/stage3 && -f /home/travis/build/qTox/qTox/release
      repo: qTox/qTox
      tags: true
    skip_cleanup: true
    draft: true

  # Windows Installer 32Bit
  - provider: releases
    token:
      secure: "UAvVIUgfH8VGAzMsKk62yz26oqjNpUxEEyZ7OSjt09VoTMuepZd9wPmLCv0b+jFrk5BwQG9gpDzTD7vZ0Un1g1lGD23K801tvMRue/SO/KmOyeYrqd6o7MEFGb22qmmVoid/hqKLQFOxt/5HYj7fnCzG8EUuA9BvdWmsl4ir8Js="
    file:
      - "./workspace/i686/qtox/release/setup-qtox-i686-release.exe"
      - "./workspace/i686/qtox/release/setup-qtox-i686-release.exe.sha256"
    on:
      condition: $WINDOWS_BUILD_ARCH_CACHE_TRICK_VARIABLE == i686 && -f /home/travis/build/qTox/qTox/stage3 && -f /home/travis/build/qTox/qTox/release
      repo: qTox/qTox
      tags: true
    skip_cleanup: true
    draft: true

after_success:
  - >
    test "$TRAVIS_PULL_REQUEST" == "false"
    && test "$TRAVIS_BRANCH" == "master"
    && test "$JOB" == "build-docs"
    && bash ./.travis/deploy-docs.sh
  - >
    test "$TRAVIS_PULL_REQUEST" == "false"
    && test "$TRAVIS_BRANCH" == "master"
    && test "$JOB" == "build-gitstats"
    && bash ./.travis/deploy-gitstats.sh
