# Copyright © 2015-2018 Collabora Ltd.
#
# Permission is hereby granted, free of charge, to any person
# obtaining a copy of this software and associated documentation files
# (the "Software"), to deal in the Software without restriction,
# including without limitation the rights to use, copy, modify, merge,
# publish, distribute, sublicense, and/or sell copies of the Software,
# and to permit persons to whom the Software is furnished to do so,
# subject to the following conditions:
#
# The above copyright notice and this permission notice shall be
# included in all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
# BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
# ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
# CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
# SOFTWARE.

image: debian:bullseye-slim

stages:
  - 'build docker'
  - build

variables:
  ci_in_docker: "yes"
  ci_local_packages: "yes"
  ci_parallel: "2"
  ci_sudo: "yes"
  ci_distro: "debian"
  ci_suite: "bullseye"
  ###
  # IMPORTANT
  # These are the version tags for the docker images the CI runs against.
  # If you are hacking on them or need a them to rebuild, its enough
  # to change any part of the string of the image you want.
  ###
  WINDOWS_TAG: "2022-01-07.1"

  UPSTREAM_BRANCH: 'master'
  UPSTREAM_REPO: 'dbus/dbus'
  WINDOWS_AMD64_SUFFIX: 'amd64/windows'
  WINDOWS_IMAGE: "$CI_REGISTRY_IMAGE/$WINDOWS_AMD64_SUFFIX:$WINDOWS_TAG-$UPSTREAM_BRANCH"
  WINDOWS_UPSTREAM_IMAGE: "$CI_REGISTRY/$UPSTREAM_REPO/$WINDOWS_AMD64_SUFFIX:$WINDOWS_TAG-$UPSTREAM_BRANCH"


windows amd64 docker:
  stage: "build docker"
  variables:
    # this file needs to be relative to docker/windows/ subdir
    # as it makes life easier in the powershell script
    DOCKERFILE: "tools/docker/windows/Dockerfile"
  timeout: 2h 30m
  tags:
    - windows
    - shell
    - "1809"
  script:
    # We need to pass an array and to resolve the env vars, so we can't use a variable:
    - $DOCKER_BUILD_ARGS = @("--build-arg", "DEFAULT_BRANCH=$UPSTREAM_BRANCH")

    - "& tools/docker/windows/container.ps1 $CI_REGISTRY $CI_REGISTRY_USER $CI_REGISTRY_PASSWORD $WINDOWS_IMAGE $WINDOWS_UPSTREAM_IMAGE $DOCKERFILE"
    - |
      if (!($?)) {
        echo "Failed to build the image"
        Exit 1
      }

.debian-build:
  stage: build
  image: "debian:bullseye-slim"
  cache:
    key: ${CI_JOB_NAME}
    paths:
      - .ccache/
  before_script:
    - ./tools/ci-install.sh
    - mkdir -p .ccache
    - export CCACHE_BASEDIR="$(pwd)"
    - export CCACHE_DIR="$CCACHE_BASEDIR/.ccache"
    # Debian's ccache package creates symlinks here for all supported
    # compilers
    - export PATH="/usr/lib/ccache:$PATH"
  script:
    - chown -R user .
    - runuser -u user ./tools/ci-build.sh

production:
  extends: .debian-build
  variables:
    ci_variant: "production"

debug:
  extends: .debian-build
  variables:
    ci_variant: "debug"

reduced:
  extends: .debian-build
  when: manual
  variables:
    ci_variant: "reduced"

legacy:
  extends: .debian-build
  when: manual
  variables:
    ci_variant: "legacy"

cmake:
  extends: .debian-build
  variables:
    ci_buildsys: "cmake-dist"

i686-w64-mingw32-debug:
  extends: .debian-build
  variables:
    ci_host: "i686-w64-mingw32"
    ci_variant: "debug"

i686-w64-mingw32-cmake:
  extends: .debian-build
  when: manual
  variables:
    ci_buildsys: "cmake"
    ci_host: "i686-w64-mingw32"

x86_64-w64-mingw32:
  extends: .debian-build
  variables:
    ci_host: "x86_64-w64-mingw32"

x86_64-w64-mingw32-cmake-debug:
  extends: .debian-build
  variables:
    ci_buildsys: "cmake"
    ci_host: "x86_64-w64-mingw32"
    ci_variant: "debug"

buster:
  extends: .debian-build
  when: manual
  image: "debian:buster-slim"
  variables:
    ci_suite: "buster"

.win-build:
  image: $WINDOWS_IMAGE
  stage: build
  tags:
    - 'docker'
    - 'windows'
    - '1809'
  needs:
    - "windows amd64 docker"
  timeout: '2h'
  before_script:
    - $ErrorActionPreference = "Stop"
    - $WarningPreference = "Stop"
    - $env:DBUS_TEST_MALLOC_FAILURES = 0
    - $env:PATH += ";C:\bin"

windows-cmake-mingw-ucrt64:
  extends: .win-build
  script:
    - $env:MSYSTEM = "UCRT64"
    - $env:CHERE_INVOKING = "1"
    - $env:MSYS2_PATH_TYPE = "inherit"
    - $env:PATH += ";C:\msys64\usr\bin"
    # FIXME: glib from msys2 has issues, disable it for now
    - C:\msys64\usr\bin\bash -lc 'cmake -G \"MinGW Makefiles\" -S . -B build -DDBUS_WITH_GLIB=OFF && cmake --build build --config Release'

windows-cmake-vs15:
  extends: .win-build
  script:
    - cmake -DCMAKE_PREFIX_PATH=C:/ -G "Visual Studio 15 2017 Win64" -DCMAKE_BUILD_TYPE=Debug -DDBUS_ENABLE_VERBOSE_MODE=OFF -S . -B build
    - cmake --build build --config Debug
    - cmake --install build --config Debug
    # FIXME: a few tests timeout on gitlab runner for unknown reason
    - cd build ; ctest -C Debug -VV --timeout 1200 -E '(dbus-daemon|monitor)'

# vim:set sw=2 sts=2 et:
