
variables:
  # On stable branches this is changed by later rules. Should also
  # be overridden per pipeline if running pipelines concurrently
  # for different branches in contributor forks.
  QEMU_CI_CONTAINER_TAG: latest

  # For purposes of CI rules, upstream is the gitlab.com/qemu-project
  # namespace. When testing CI, it might be usefult to override this
  # to point to a fork repo
  QEMU_CI_UPSTREAM: qemu-project

# The order of rules defined here is critically important.
# They are evaluated in order and first match wins.
#
# Thus we group them into a number of stages, ordered from
# most restrictive to least restrictive
#
# For pipelines running for stable "staging-X.Y" branches
# we must override QEMU_CI_CONTAINER_TAG
#
.base_job_template:
  variables:
    # Each script line from will be in a collapsible section in the job output
    # and show the duration of each line.
    FF_SCRIPT_SECTIONS: 1
    # The project has a fairly fat GIT repo so we try and avoid bringing in things
    # we don't need. The --filter options avoid blobs and tree references we aren't going to use
    # and we also avoid fetching tags.
    GIT_FETCH_EXTRA_FLAGS: --filter=blob:none --filter=tree:0 --no-tags --prune --quiet
    # Ensure docker.py / tests/docker/Makefile.include always displays stdout
    # from any docker commands to aid debugging of failures
    DOCKER_V: 1

  interruptible: true

  rules:
    #############################################################
    # Stage 1: exclude scenarios where we definitely don't
    # want jobs to run
    #############################################################

    # Never run jobs upstream on stable branch, staging branch jobs already ran
    - if: '$CI_PROJECT_NAMESPACE == $QEMU_CI_UPSTREAM && $CI_COMMIT_BRANCH =~ /^stable-/'
      when: never

    # Never run jobs upstream on tags, staging branch jobs already ran
    - if: '$CI_PROJECT_NAMESPACE == $QEMU_CI_UPSTREAM && $CI_COMMIT_TAG'
      when: never

    # Scheduled jobs should explicitly enable the run in their job rules
    - if: '$CI_PIPELINE_SOURCE == "schedule"'
      when: never

    # macOS jobs can't run in forks until gitlab opens up runner availability
    # to all tiers https://gitlab.com/groups/gitlab-org/-/work_items/8267
    - if: '$QEMU_JOB_MACOS == "1" && $CI_PROJECT_NAMESPACE != $QEMU_CI_UPSTREAM'
      when: never

    # Publishing jobs should only run on the default branch in upstream
    - if: '$QEMU_JOB_PUBLISH == "1" && $CI_PROJECT_NAMESPACE == $QEMU_CI_UPSTREAM && $CI_COMMIT_BRANCH != $CI_DEFAULT_BRANCH'
      when: never

    # Non-publishing jobs should only run on staging branches in upstream
    - if: '$QEMU_JOB_PUBLISH != "1" && $CI_PROJECT_NAMESPACE == $QEMU_CI_UPSTREAM && $CI_COMMIT_BRANCH !~ /staging/'
      when: never

    # Jobs only intended for forks should always be skipped on upstream
    - if: '$QEMU_JOB_ONLY_FORKS == "1" && $CI_PROJECT_NAMESPACE == $QEMU_CI_UPSTREAM'
      when: never

    # Forks don't get pipelines unless QEMU_CI=1 or QEMU_CI=2 is set
    - if: '$QEMU_CI != "1" && $QEMU_CI != "2" && $CI_PROJECT_NAMESPACE != $QEMU_CI_UPSTREAM'
      when: never


    #############################################################
    # Stage 2: fine tune execution of jobs in specific scenarios
    # where the catch all logic is inappropriate
    #############################################################

    # Optional jobs should not be run unless manually triggered
    - if: '$QEMU_JOB_OPTIONAL && $CI_PROJECT_NAMESPACE == $QEMU_CI_UPSTREAM && $CI_COMMIT_BRANCH =~ /staging-[[:digit:]]+\.[[:digit:]]/'
      when: manual
      allow_failure: true
      variables:
        QEMU_CI_CONTAINER_TAG: $CI_COMMIT_REF_SLUG

    - if: '$QEMU_JOB_OPTIONAL'
      when: manual
      allow_failure: true

    # Skipped jobs should not be run unless manually triggered
    - if: '$QEMU_JOB_SKIPPED && $CI_PROJECT_NAMESPACE == $QEMU_CI_UPSTREAM && $CI_COMMIT_BRANCH =~ /staging-[[:digit:]]+\.[[:digit:]]/'
      when: manual
      allow_failure: true
      variables:
        QEMU_CI_CONTAINER_TAG: $CI_COMMIT_REF_SLUG

    - if: '$QEMU_JOB_SKIPPED'
      when: manual
      allow_failure: true

    # Functional jobs can be manually started in forks
    - if: '$QEMU_JOB_FUNCTIONAL && $QEMU_CI_FUNCTIONAL != "1" && $CI_PROJECT_NAMESPACE != $QEMU_CI_UPSTREAM'
      when: manual
      allow_failure: true


    #############################################################
    # Stage 3: catch all logic applying to any job not matching
    # an earlier criteria
    #############################################################

    # Forks pipeline jobs don't start automatically unless
    # QEMU_CI=2 is set
    - if: '$QEMU_CI != "2" && $CI_PROJECT_NAMESPACE != $QEMU_CI_UPSTREAM'
      when: manual

    # Upstream pipeline jobs start automatically unless told not to
    # by setting QEMU_CI=1
    - if: '$QEMU_CI == "1" && $CI_PROJECT_NAMESPACE == $QEMU_CI_UPSTREAM && $CI_COMMIT_BRANCH =~ /staging-[[:digit:]]+\.[[:digit:]]/'
      when: manual
      variables:
        QEMU_CI_CONTAINER_TAG: $CI_COMMIT_REF_SLUG

    - if: '$QEMU_CI == "1" && $CI_PROJECT_NAMESPACE == $QEMU_CI_UPSTREAM'
      when: manual

    # Jobs can run if any jobs they depend on were successful
    - if: '$CI_PROJECT_NAMESPACE == $QEMU_CI_UPSTREAM && $CI_COMMIT_BRANCH =~ /staging-[[:digit:]]+\.[[:digit:]]/'
      when: on_success
      variables:
        QEMU_CI_CONTAINER_TAG: $CI_COMMIT_REF_SLUG

    - when: on_success

# Any job running meson should capture meson logs
# by default. Some jobs might override the artifacts
# to capture further files
.base_meson_job_template:
  extends: .base_job_template
  artifacts:
    name: "$CI_JOB_NAME-$CI_COMMIT_REF_SLUG"
    when: always
    expire_in: 7 days
    paths:
      - build/meson-logs
      - ci-runner-env
    reports:
      junit: build/meson-logs/*.junit.xml
  before_script:
    - source scripts/ci/gitlab-ci-section
    - section_start setup "Pre-script setup"
    - JOBS=$(expr $(nproc) + 1)
    # Prevent logs (if any) from prior build job artifacts
    # from being duplicated in the new job artifacts
    - rm -f build/meson-logs/*
    - mkdir -p ci-runner-env
    - test -f /packages.txt && cp /packages.txt ci-runner-env/packages.txt
    - cp /proc/mounts ci-runner-env/mounts.txt
    - cp /proc/cpuinfo ci-runner-env/cpuinfo.txt
    - cp /proc/meminfo ci-runner-env/meminfo.txt
    - ls -l /dev > ci-runner-env/devices.txt
    - uname -a > ci-runner-env/kernel.txt
    - id -a > ci-runner-env/user.txt
    - printenv | sort > ci-runner-env/environ.txt
    - section_end setup

.base_meson_ccache_job_template:
  extends: .base_meson_job_template
  cache:
    paths:
      - ccache
    key: "$CI_JOB_NAME"
    when: always
  script:
    - export CCACHE_BASEDIR="$(pwd)"
    - export CCACHE_DIR="$CCACHE_BASEDIR/ccache"
    - export CCACHE_MAXSIZE="500M"
    - export PATH="$CCACHE_WRAPPERSDIR:$PATH"
    - ccache --zero-stats
  after_script:
    - ccache --show-stats
