image: registry.gitlab.gnome.org/gnome/libsoup/master:v20

stages:
  - build
  - coverage
  - docs
  - deploy

.build:
  stage: build
  tags:
    # We need runners supporting IPv6:
    # https://gitlab.gnome.org/Infrastructure/GitLab/issues/313
    - ipv6

fedora-test:
  extends: .build
  script:
    - cp .gitlab-ci/lcovrc ~/.lcovrc
    - meson _build -Db_coverage=true --auto-features=enabled
    - meson compile -C _build
    - meson test --no-suite autobahn-quick --no-suite autobahn -C _build --verbose
    - ninja -C _build coverage-html coverage-xml
  artifacts:
    reports:
      junit: "_build/meson-logs/testlog.junit.xml"
      coverage_report:
        coverage_format: cobertura
        path: "_build/meson-logs/coverage.xml"
    name: "libsoup-${CI_JOB_NAME}-${CI_COMMIT_REF_NAME}"
    when: always
    paths:
      - "_build/config.h"
      - "_build/meson-logs/meson-log.txt"
      - "_build/meson-logs/testlog.txt"
      - "_build/meson-logs/coveragereport"
  coverage: '/^\s+lines\.+:\s+([\d.]+\%)\s+/'

fedora-autobahn-quick:
  extends: .build
  script:
    - meson _build --auto-features=enabled -Dautobahn=enabled
    - meson test -C _build --suite autobahn-quick --verbose
  artifacts:
    paths:
      - "_build/meson-logs/autobahn-report"
  allow_failure: true

fedora-scan:
  extends: .build
  script:
    - meson _build --auto-features=enabled
    - ninja -C _build scan-build
    - bash -c 'if [[ -n "$(ls -A _build/meson-logs/scanbuild/)" ]]; then echo "Scan build log found, assuming defects exist"; exit 1; fi'
  artifacts:
    reports:
      junit: "_build/meson-logs/testlog.junit.xml"
    when: on_failure
    paths:
      - _build/meson-logs/scanbuild

fedora-asan:
  stage: build
  tags:
    - asan
  variables:
    ASAN_OPTIONS: fast_unwind_on_malloc=0
    SOUP_TEST_NO_IPV6: 1
  script:
    # Introspection doesn't work when linking to libasan, the NTLM tests fail most likely due to unsafe usage of setenv()
    - meson _build --auto-features=enabled -Db_sanitize=address -Dintrospection=disabled -Dvapi=disabled -Dntlm=disabled -Ddocs=disabled
    - meson test --no-suite autobahn-quick --no-suite autobahn -C _build --verbose --timeout-multiplier=10
  artifacts:
    reports:
      junit: "_build/meson-logs/testlog.junit.xml"
    when: on_failure
    paths:
      - "_build/meson-logs/testlog.txt"

# fedora-fuzzing:
#   stage: build
#   allow_failure: true
#   variables:
#     CC: clang
#   script:
#     - meson _build --auto-features=enabled -Dfuzzing=enabled -Dintrospection=disabled -Dvapi=disabled
#     - meson test -C _build --suite=fuzzing --timeout-multiplier=10
#   artifacts:
#     when: on_failure
#     paths:
#       - _build/meson-logs/

reference:
  stage: docs
  variables:
    MESON_ARGS: >-
      -Ddocs=enabled
      -Ddoc_tests=true
      -Dvapi=disabled
  script:
    - mkdir -p _reference/libsoup-3.0
    - meson ${MESON_ARGS} _build
    - meson compile -C _build libsoup-doc --verbose
    - meson test -C _build docs --verbose
    - mv _build/docs/reference/libsoup-3.0/* _reference/libsoup-3.0
    # Add libsoup-2.4 docs.
    - cp -R /usr/share/gtk-doc/html/{glib,gio,gobject,libsoup-2.4} _reference/
    - gtkdoc-rebase --relative --html-dir=_reference/{glib,gio,gobject,libsoup-2.4} --verbose
    - cp .gitlab-ci/{index.html,robots.txt} _reference/
  artifacts:
    paths:
      - _reference

pages:
  stage: deploy
  needs: ['reference']
  script:
    - mv _reference public
  artifacts:
    when: on_success
    paths:
      - public
  only:
    - master
