variables:
  GIT_DEPTH: 100

stages:
  - containers
  - builds
  - integration_tests
  - sanity_checks
  - pages

.script_variables: &script_variables |
  export CCACHE_BASEDIR="$(pwd)"
  export CCACHE_DIR="$CCACHE_BASEDIR/ccache"
  export CCACHE_MAXSIZE="500M"
  export PATH="$CCACHE_WRAPPERSDIR:$PATH"
  export VIR_TEST_VERBOSE="1"
  export VIR_TEST_DEBUG="1"

include:
  - '/ci/gitlab.yml'
  - '/ci/integration.yml'

.native_build_job:
  extends: .gitlab_native_build_job
  cache:
    paths:
      - ccache/
    key: "$CI_JOB_NAME"
  script:
    - source ci/jobs.sh
    - if test -x /usr/bin/rpmbuild && test "$RPM" != "skip";
      then
        run_rpmbuild;
      else
        run_build;
        run_test;
      fi
  after_script:
    - test "$CI_JOB_STATUS" != "success" && exit 1;
    - if test -x /usr/bin/rpmbuild && test "$RPM" != "skip";
      then
        mv "$HOME"/rpmbuild/RPMS/x86_64/ libvirt-rpms/;
      fi

.cross_build_job:
  extends: .gitlab_cross_build_job
  cache:
    paths:
      - ccache/
    key: "$CI_JOB_NAME"
  script:
    - source ci/jobs.sh
    - if test -x /usr/bin/rpmbuild && test "$RPM" != "skip";
      then
        run_rpmbuild;
      else
        run_build;
        if test "$CROSS" = "i686";
        then
          run_test;
        fi;
      fi

# This artifact published by this job is downloaded by libvirt.org to
# be deployed to the web root:
#    https://gitlab.com/libvirt/libvirt/-/jobs/artifacts/master/download?job=website
website_job:
  extends: .gitlab_native_build_job
  needs:
    - job: x86_64-almalinux-8-container
      optional: true
  script:
    - source ci/jobs.sh
    - run_website_build
  after_script:
    - test "$CI_JOB_STATUS" != "success" && exit 1;
    - mv install/usr/share/doc/libvirt/html/ website
  artifacts:
    expose_as: 'Website'
    name: 'website'
    when: on_success
    expire_in: 30 days
    paths:
      - website
  variables:
    NAME: almalinux-8
    TARGET_BASE_IMAGE: docker.io/library/almalinux:8

# On push to master publish the website from 'website_job' via gitlab pages
pages:
  stage: pages
  script:
    - mv website public
    - cp .gitlab_pages_redirects public/_redirects
  dependencies:
    - website_job
  rules:
    - if: '$CI_PROJECT_NAMESPACE == $RUN_UPSTREAM_NAMESPACE && $CI_PIPELINE_SOURCE == "push" && $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH'
      when: on_success
    - when: never
  artifacts:
    expose_as: 'pages'
    name: 'pages'
    paths:
      - public

.codestyle_job:
  stage: sanity_checks
  needs:
    - job: x86_64-opensuse-leap-15-container
      optional: true
  script:
    - source ci/jobs.sh
    - run_codestyle
  variables:
    NAME: opensuse-leap-15
    TARGET_BASE_IMAGE: registry.opensuse.org/opensuse/leap:15.5

# This artifact published by this job is downloaded to push to Weblate
# for translation usage:
#    https://gitlab.com/libvirt/libvirt/-/jobs/artifacts/master/download?job=potfile
potfile:
  image: $CI_REGISTRY/$RUN_UPSTREAM_NAMESPACE/libvirt/ci-$NAME:latest
  stage: builds
  variables:
    NAME: almalinux-8
  before_script:
    - cat /packages.txt
  needs:
    - job: x86_64-almalinux-8-container
      optional: true
  rules:
    - if: '$CI_PROJECT_NAMESPACE == $RUN_UPSTREAM_NAMESPACE && $CI_PIPELINE_SOURCE == "push" && $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH'
      when: on_success
    - when: never
  before_script:
    - *script_variables
  script:
    - source ci/jobs.sh
    - run_potfile
  after_script:
    - test "$CI_JOB_STATUS" != "success" && exit 1;
    - cp po/libvirt.pot libvirt.pot
  artifacts:
    expose_as: 'Potfile'
    name: 'potfile'
    when: on_success
    expire_in: 30 days
    paths:
      - libvirt.pot

# Coverity job that is run only by schedules
coverity:
  image: $CI_REGISTRY/$RUN_UPSTREAM_NAMESPACE/libvirt/ci-$NAME:latest
  stage: builds
  needs:
    - job: x86_64-almalinux-8-container
      optional: true
  before_script:
    - cat /packages.txt
  script:
    - curl https://scan.coverity.com/download/cxx/linux64 --form project=$COVERITY_SCAN_PROJECT_NAME --form token=$COVERITY_SCAN_TOKEN -o /tmp/cov-analysis-linux64.tgz
    - tar xfz /tmp/cov-analysis-linux64.tgz
    - meson setup build --werror || (cat build/meson-logs/meson-log.txt && exit 1)
    - cov-analysis-linux64-*/bin/cov-build --dir cov-int meson compile -C build
    - tar cfz cov-int.tar.gz cov-int
    - curl https://scan.coverity.com/builds?project=$COVERITY_SCAN_PROJECT_NAME --form token=$COVERITY_SCAN_TOKEN --form email=$GITLAB_USER_EMAIL --form file=@cov-int.tar.gz --form version="$(git describe --tags)" --form description="$(git describe --tags) / $CI_COMMIT_TITLE / $CI_COMMIT_REF_NAME:$CI_PIPELINE_ID"
  variables:
    NAME: almalinux-8
  rules:
    - if: '$COVERITY_SCAN_PROJECT_NAME == null || $COVERITY_SCAN_TOKEN == null'
      when: never
    - if: '$CI_PROJECT_NAMESPACE == $RUN_UPSTREAM_NAMESPACE && $CI_PIPELINE_SOURCE == "schedule" && $CI_COMMIT_REF_NAME == $CI_DEFAULT_BRANCH'
      when: on_success
    - when: never