# The build has two stages. The 'container' stage is used to build a Docker
# container and push it to the project's container registry on fd.o GitLab.
# This step is only run when the tag for the container changes, else it is
# effectively a no-op. All of this infrastructure is inherited from the
# wayland/ci-templates repository which is the recommended way to set up CI
# infrastructure on fd.o GitLab.
#
# Once the container stage is done, we move on to the 'build' stage where we
# run an autotools and meson build in parallel. Currently, tests are also run
# as part of the build stage as there doesn't seem to be significant value to
# splitting the stages at the moment.

stages:
  - container
  - build

variables:
  # Update this tag when you want to trigger a rebuild the container in which
  # CI runs, for example when adding new packages to UBUNTU_DEBS. The tag is
  # an arbitrary string that identifies the exact container contents.
  FDO_DISTRIBUTION_TAG: '2020-03-07-01'
  FDO_DISTRIBUTION_VERSION: '18.04'
  FDO_UPSTREAM_REPO: 'pulseaudio/pulseaudio'
  UBUNTU_IMAGE: "$CI_REGISTRY_IMAGE/ubuntu/$FDO_DISTRIBUTION_VERSION:$FDO_DISTRIBUTION_TAG"

include:
  # We pull templates from master to avoid the overhead of periodically
  # scanning for changes upstream. This does means builds might occasionally
  # break due to upstream changing things, so if you see unexpected build
  # failures, this might be one cause.
  - project: 'wayland/ci-templates'
    ref: 'master'
    file: '/templates/ubuntu.yml'

build-container:
  extends: .fdo.container-ifnot-exists@ubuntu
  stage: container
  variables:
    GIT_STRATEGY: none # no need to pull the whole tree for rebuilding the image

    # Remember to update FDO_DISTRIBUTION_TAG when modifying this package list!
    # Otherwise the changes won't have effect since an old container image will
    # be used.
    FDO_DISTRIBUTION_PACKAGES: >-
      autoconf
      automake
      autopoint
      bash-completion
      check
      curl
      dbus-x11
      g++
      gcc
      gettext
      git-core
      libasound2-dev
      libasyncns-dev
      libavahi-client-dev
      libbluetooth-dev
      libcap-dev
      libfftw3-dev
      libglib2.0-dev
      libgtk-3-dev
      libice-dev
      libjack-dev
      liblircclient-dev
      libltdl-dev
      liborc-0.4-dev
      libsbc-dev
      libsndfile1-dev
      libsoxr-dev
      libspeexdsp-dev
      libssl-dev
      libsystemd-dev
      libtdb-dev
      libtool
      libudev-dev
      libwebrtc-audio-processing-dev
      libwrap0-dev
      libx11-xcb-dev
      libxcb1-dev
      libxml-parser-perl
      libxml2-utils
      libxtst-dev
      make
      ninja-build
      pkg-config
      python3-setuptools
      systemd
      wget

build-autotools:
  stage: build
  image: $UBUNTU_IMAGE
  script:
    - export MAKEFLAGS="-j$(nproc)"
    - NOCONFIGURE=1 ./bootstrap.sh
    - mkdir build
    - cd build
    - ../configure --localstatedir=/var
    - make
    - make check
    - make check-daemon
    - ulimit -c 0 # don't dump core files on tests that are supposed to assert
    - make distcheck
  artifacts:
    paths:
      - build/

build-meson:
  stage: build
  image: $UBUNTU_IMAGE
  script:
    # Install meson
    - wget -q https://github.com/mesonbuild/meson/releases/download/0.50.0/meson-0.50.0.tar.gz
    - tar -xf meson-0.50.0.tar.gz
    - cd meson-0.50.0
    - python3 setup.py install
    - cd ..
    # Do the actual build
    - meson build
    - cd build
    - ninja
    - ninja test
    - ninja test-daemon
  artifacts:
    paths:
      - build/
