mirror of
https://github.com/mii443/qemu.git
synced 2025-08-22 15:15:46 +00:00
We use a fixed container tag of 'latest' so that contributors' forks don't end up with an ever growing number of containers as they work on throwaway feature branches. This fixed tag causes problems running CI upstream in stable staging branches, however, because the stable staging branch will publish old container content that clashes with that needed by primary staging branch. This makes it impossible to reliably run CI pipelines in parallel in upstream for different staging branches. This introduces $QEMU_CI_CONTAINER_TAG global variable as a way to change which tag container publishing uses. Initially it can be set by contributors as a git push option if they want to override the default use of 'latest' eg git push gitlab <branch> -o ci.variable=QEMU_CONTAINER_TAG=fish this is useful if contributors need to run pipelines for different branches concurrently in their forks. Reviewed-by: Michael Tokarev <mjt@tls.msk.ru> Reviewed-by: Richard Henderson <richard.henderson@linaro.org> Signed-off-by: Daniel P. Berrangé <berrange@redhat.com> Message-Id: <20230608164018.2520330-2-berrange@redhat.com> Signed-off-by: Thomas Huth <thuth@redhat.com>
86 lines
3.2 KiB
YAML
86 lines
3.2 KiB
YAML
|
|
variables:
|
|
# On stable branches this needs changing. Should also be
|
|
# overridden per pipeline if running pipelines concurrently
|
|
# for different branches in contributor forks.
|
|
QEMU_CI_CONTAINER_TAG: latest
|
|
|
|
# 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
|
|
#
|
|
.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
|
|
|
|
interruptible: true
|
|
|
|
rules:
|
|
#############################################################
|
|
# Stage 1: exclude scenarios where we definitely don't
|
|
# want jobs to run
|
|
#############################################################
|
|
|
|
# Cirrus jobs can't run unless the creds / target repo are set
|
|
- if: '$QEMU_JOB_CIRRUS && ($CIRRUS_GITHUB_REPO == null || $CIRRUS_API_TOKEN == null)'
|
|
when: never
|
|
|
|
# Publishing jobs should only run on the default branch in upstream
|
|
- if: '$QEMU_JOB_PUBLISH == "1" && $CI_PROJECT_NAMESPACE == "qemu-project" && $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-project" && $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-project"'
|
|
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-project"'
|
|
when: never
|
|
|
|
# Avocado jobs don't run in forks unless $QEMU_CI_AVOCADO_TESTING is set
|
|
- if: '$QEMU_JOB_AVOCADO && $QEMU_CI_AVOCADO_TESTING != "1" && $CI_PROJECT_NAMESPACE != "qemu-project"'
|
|
when: never
|
|
|
|
|
|
#############################################################
|
|
# Stage 2: fine tune execution of jobs in specific scenarios
|
|
# where the catch all logic is inapprorpaite
|
|
#############################################################
|
|
|
|
# Optional jobs should not be run unless manually triggered
|
|
- if: '$QEMU_JOB_OPTIONAL'
|
|
when: manual
|
|
allow_failure: true
|
|
|
|
# Skipped jobs should not be run unless manually triggered
|
|
- if: '$QEMU_JOB_SKIPPED'
|
|
when: manual
|
|
allow_failure: true
|
|
|
|
# Avocado jobs can be manually start in forks if $QEMU_CI_AVOCADO_TESTING is unset
|
|
- if: '$QEMU_JOB_AVOCADO && $CI_PROJECT_NAMESPACE != "qemu-project"'
|
|
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-project"'
|
|
when: manual
|
|
|
|
# Jobs can run if any jobs they depend on were successful
|
|
- when: on_success
|