2022-05-27 18:35:58 +03:00
|
|
|
|
2023-06-08 19:40:14 +03:00
|
|
|
variables:
|
2023-06-08 19:40:16 +03:00
|
|
|
# On stable branches this is changed by later rules. Should also
|
|
|
|
# be overridden per pipeline if running pipelines concurrently
|
2023-06-08 19:40:14 +03:00
|
|
|
# for different branches in contributor forks.
|
|
|
|
QEMU_CI_CONTAINER_TAG: latest
|
|
|
|
|
2023-06-08 19:40:15 +03:00
|
|
|
# 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
|
|
|
|
|
2022-05-27 18:35:58 +03:00
|
|
|
# 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
|
|
|
|
#
|
2023-06-08 19:40:16 +03:00
|
|
|
# For pipelines running for stable "staging-X.Y" branches
|
|
|
|
# we must override QEMU_CI_CONTAINER_TAG
|
|
|
|
#
|
2022-05-27 18:35:58 +03:00
|
|
|
.base_job_template:
|
2023-01-24 21:00:54 +03:00
|
|
|
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
|
2024-03-12 20:00:11 +03:00
|
|
|
# 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
|
2023-01-24 21:00:54 +03:00
|
|
|
|
2023-02-23 22:13:43 +03:00
|
|
|
interruptible: true
|
|
|
|
|
2022-05-27 18:35:58 +03:00
|
|
|
rules:
|
|
|
|
#############################################################
|
|
|
|
# Stage 1: exclude scenarios where we definitely don't
|
|
|
|
# want jobs to run
|
|
|
|
#############################################################
|
|
|
|
|
2023-06-08 19:40:17 +03:00
|
|
|
# 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
|
|
|
|
|
2024-03-04 21:16:50 +03:00
|
|
|
# Scheduled runs on mainline don't get pipelines except for the special Coverity job
|
|
|
|
- if: '$CI_PROJECT_NAMESPACE == $QEMU_CI_UPSTREAM && $CI_PIPELINE_SOURCE == "schedule"'
|
|
|
|
when: never
|
|
|
|
|
2022-05-27 18:35:59 +03:00
|
|
|
# Cirrus jobs can't run unless the creds / target repo are set
|
2022-06-13 20:12:57 +03:00
|
|
|
- if: '$QEMU_JOB_CIRRUS && ($CIRRUS_GITHUB_REPO == null || $CIRRUS_API_TOKEN == null)'
|
2022-05-27 18:35:59 +03:00
|
|
|
when: never
|
|
|
|
|
2022-05-27 18:36:01 +03:00
|
|
|
# Publishing jobs should only run on the default branch in upstream
|
2023-06-08 19:40:15 +03:00
|
|
|
- if: '$QEMU_JOB_PUBLISH == "1" && $CI_PROJECT_NAMESPACE == $QEMU_CI_UPSTREAM && $CI_COMMIT_BRANCH != $CI_DEFAULT_BRANCH'
|
2022-05-27 18:36:01 +03:00
|
|
|
when: never
|
|
|
|
|
|
|
|
# Non-publishing jobs should only run on staging branches in upstream
|
2023-06-08 19:40:15 +03:00
|
|
|
- if: '$QEMU_JOB_PUBLISH != "1" && $CI_PROJECT_NAMESPACE == $QEMU_CI_UPSTREAM && $CI_COMMIT_BRANCH !~ /staging/'
|
2022-05-27 18:36:01 +03:00
|
|
|
when: never
|
|
|
|
|
2022-05-27 18:36:00 +03:00
|
|
|
# Jobs only intended for forks should always be skipped on upstream
|
2023-06-08 19:40:15 +03:00
|
|
|
- if: '$QEMU_JOB_ONLY_FORKS == "1" && $CI_PROJECT_NAMESPACE == $QEMU_CI_UPSTREAM'
|
2022-05-27 18:36:00 +03:00
|
|
|
when: never
|
|
|
|
|
2022-05-27 18:36:02 +03:00
|
|
|
# Forks don't get pipelines unless QEMU_CI=1 or QEMU_CI=2 is set
|
2023-06-08 19:40:15 +03:00
|
|
|
- if: '$QEMU_CI != "1" && $QEMU_CI != "2" && $CI_PROJECT_NAMESPACE != $QEMU_CI_UPSTREAM'
|
2022-05-27 18:36:02 +03:00
|
|
|
when: never
|
|
|
|
|
2022-05-27 18:36:01 +03:00
|
|
|
# Avocado jobs don't run in forks unless $QEMU_CI_AVOCADO_TESTING is set
|
2023-06-08 19:40:15 +03:00
|
|
|
- if: '$QEMU_JOB_AVOCADO && $QEMU_CI_AVOCADO_TESTING != "1" && $CI_PROJECT_NAMESPACE != $QEMU_CI_UPSTREAM'
|
2022-05-27 18:36:01 +03:00
|
|
|
when: never
|
|
|
|
|
2022-05-27 18:35:58 +03:00
|
|
|
|
|
|
|
#############################################################
|
|
|
|
# Stage 2: fine tune execution of jobs in specific scenarios
|
2023-09-14 18:54:15 +03:00
|
|
|
# where the catch all logic is inappropriate
|
2022-05-27 18:35:58 +03:00
|
|
|
#############################################################
|
|
|
|
|
2022-05-27 18:35:59 +03:00
|
|
|
# Optional jobs should not be run unless manually triggered
|
2023-06-08 19:40:16 +03:00
|
|
|
- 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
|
|
|
|
|
2022-05-27 18:35:59 +03:00
|
|
|
- if: '$QEMU_JOB_OPTIONAL'
|
|
|
|
when: manual
|
|
|
|
allow_failure: true
|
|
|
|
|
2022-05-27 18:36:01 +03:00
|
|
|
# Skipped jobs should not be run unless manually triggered
|
2023-06-08 19:40:16 +03:00
|
|
|
- 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
|
|
|
|
|
2022-05-27 18:36:01 +03:00
|
|
|
- if: '$QEMU_JOB_SKIPPED'
|
|
|
|
when: manual
|
|
|
|
allow_failure: true
|
|
|
|
|
|
|
|
# Avocado jobs can be manually start in forks if $QEMU_CI_AVOCADO_TESTING is unset
|
2023-06-08 19:40:15 +03:00
|
|
|
- if: '$QEMU_JOB_AVOCADO && $CI_PROJECT_NAMESPACE != $QEMU_CI_UPSTREAM'
|
2022-05-27 18:36:01 +03:00
|
|
|
when: manual
|
|
|
|
allow_failure: true
|
|
|
|
|
2022-05-27 18:35:58 +03:00
|
|
|
|
|
|
|
#############################################################
|
|
|
|
# Stage 3: catch all logic applying to any job not matching
|
|
|
|
# an earlier criteria
|
|
|
|
#############################################################
|
|
|
|
|
2022-05-27 18:36:02 +03:00
|
|
|
# Forks pipeline jobs don't start automatically unless
|
|
|
|
# QEMU_CI=2 is set
|
2023-06-08 19:40:15 +03:00
|
|
|
- if: '$QEMU_CI != "2" && $CI_PROJECT_NAMESPACE != $QEMU_CI_UPSTREAM'
|
2022-05-27 18:36:02 +03:00
|
|
|
when: manual
|
|
|
|
|
2023-06-08 19:40:18 +03:00
|
|
|
# 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
|
|
|
|
|
2023-04-03 16:49:19 +03:00
|
|
|
# Jobs can run if any jobs they depend on were successful
|
2023-06-08 19:40:16 +03:00
|
|
|
- if: '$QEMU_JOB_SKIPPED && $CI_PROJECT_NAMESPACE == $QEMU_CI_UPSTREAM && $CI_COMMIT_BRANCH =~ /staging-[[:digit:]]+\.[[:digit:]]/'
|
|
|
|
when: on_success
|
|
|
|
variables:
|
|
|
|
QEMU_CI_CONTAINER_TAG: $CI_COMMIT_REF_SLUG
|
|
|
|
|
2022-05-27 18:35:58 +03:00
|
|
|
- when: on_success
|