sudo: required
dist: focal
language: cpp

env:
  global:
    - JOBS=4
    - MAKEFLAGS="-j ${JOBS}"
    - POLYBAR_BUILD_TYPE="compile"

# Build configurations can either not specify anything for 'addon' and use this
# default list of packages. Or they can pick and choose which package groups to
# install
addons:
  apt:
    packages:
      - &base_deps
        - libxcb-composite0-dev
        - libxcb-ewmh-dev
        - libxcb-icccm4-dev
        - libxcb-image0-dev
        - libxcb-randr0-dev
        - libxcb-util0-dev
        - python3-xcbgen
        - xcb-proto
      - &optional_deps
        - libxcb-xkb-dev
        - libxcb-cursor-dev
        - libxcb-xrm-dev
        - libxcb1-dev
        - xutils-dev
        - i3-wm
        - libjsoncpp-dev
        - libasound2-dev
        - libpulse-dev
        - libcairo2-dev
        - libiw-dev
        - libmpdclient-dev

script: source ${TRAVIS_BUILD_DIR}/common/travis/build.sh

matrix:
  include:
    # Only builds the documentation
    - language: generic
      # Doesn't actually do anything, just used for the indicator on travis
      compiler: Sphinx
      addons: {apt: {packages: [python3-sphinx]}}
      before_script:
        - mkdir -p doc/build
        - cd doc/build
        - cmake ..
      script: make doc
      # Disable unnecessary commands
      cache:

    - compiler: clang
      env: BUILD_TYPE=Release
      addons: {apt: {packages: [*base_deps, *optional_deps]}}

    - compiler: gcc
      env: BUILD_TYPE=Coverage POLYBAR_BUILD_TYPE=tests BUILD_TESTS=ON
      addons: {apt: {packages: [*base_deps, *optional_deps]}}
      script: make check
      after_success:
        - cd ${TRAVIS_BUILD_DIR}
        - bash <(curl -s https://codecov.io/bash) -F unittests -a "-ap" -Z || echo "Codecov did not collect coverage reports"

    - compiler: gcc
      env: BUILD_TYPE=Release
      addons: {apt: {packages: [*base_deps, *optional_deps]}}

      # Minimal build, contains no optional dependencies. This makes sure that
      # we properly remove files from compilation that depend on libraries that
      # are not installed
    - compiler: gcc
      env: BUILD_TYPE=Release POLYBAR_BUILD_TYPE=minimal
      addons: {apt: {packages: [*base_deps]}}

cache:
  ccache: true
  apt: true

before_script:
  - source ${TRAVIS_BUILD_DIR}/common/travis/summary.sh
  - source ${TRAVIS_BUILD_DIR}/common/travis/configure.sh

# Only fetch the newest 5 commits instead of 50
git:
  depth: 5

notifications:
  email: false
  irc:
    channels:
      - "irc.freenode.org#polybar"
    template:
      - " %{repository_slug}(%{branch})#%{build_number} | \"%{commit_subject}\" by %{author} | Commit #%{commit} %{result}: %{build_url}"
    use_notice: true
    on_success: change
    on_failure: change
  webhooks:
    urls:
      # For the https://gitter.im/polybar/polybar gitter room
      - https://webhooks.gitter.im/e/10bdbe25961312646ace
    on_success: change
    on_failure: always
    on_start: never