16a0e7ea7SDaniel P. Berrangé 2d4c7a565SDaniel P. Berrangévariables: 3e28112d0SDaniel P. Berrangé # On stable branches this is changed by later rules. Should also 4e28112d0SDaniel P. Berrangé # be overridden per pipeline if running pipelines concurrently 5d4c7a565SDaniel P. Berrangé # for different branches in contributor forks. 6d4c7a565SDaniel P. Berrangé QEMU_CI_CONTAINER_TAG: latest 7d4c7a565SDaniel P. Berrangé 81ddd2ff9SDaniel P. Berrangé # For purposes of CI rules, upstream is the gitlab.com/qemu-project 91ddd2ff9SDaniel P. Berrangé # namespace. When testing CI, it might be usefult to override this 101ddd2ff9SDaniel P. Berrangé # to point to a fork repo 111ddd2ff9SDaniel P. Berrangé QEMU_CI_UPSTREAM: qemu-project 121ddd2ff9SDaniel P. Berrangé 136a0e7ea7SDaniel P. Berrangé# The order of rules defined here is critically important. 146a0e7ea7SDaniel P. Berrangé# They are evaluated in order and first match wins. 156a0e7ea7SDaniel P. Berrangé# 166a0e7ea7SDaniel P. Berrangé# Thus we group them into a number of stages, ordered from 176a0e7ea7SDaniel P. Berrangé# most restrictive to least restrictive 186a0e7ea7SDaniel P. Berrangé# 19e28112d0SDaniel P. Berrangé# For pipelines running for stable "staging-X.Y" branches 20e28112d0SDaniel P. Berrangé# we must override QEMU_CI_CONTAINER_TAG 21e28112d0SDaniel P. Berrangé# 226a0e7ea7SDaniel P. Berrangé.base_job_template: 23075d909dSMark Cave-Ayland variables: 24075d909dSMark Cave-Ayland # Each script line from will be in a collapsible section in the job output 25075d909dSMark Cave-Ayland # and show the duration of each line. 26075d909dSMark Cave-Ayland FF_SCRIPT_SECTIONS: 1 27*9837697bSAlex Bennée # The project has a fairly fat GIT repo so we try and avoid bringing in things 28*9837697bSAlex Bennée # we don't need. The --filter options avoid blobs and tree references we aren't going to use 29*9837697bSAlex Bennée # and we also avoid fetching tags. 30*9837697bSAlex Bennée GIT_FETCH_EXTRA_FLAGS: --filter=blob:none --filter=tree:0 --no-tags --prune --quiet 31075d909dSMark Cave-Ayland 32e97a9b8cSThomas Huth interruptible: true 33e97a9b8cSThomas Huth 346a0e7ea7SDaniel P. Berrangé rules: 356a0e7ea7SDaniel P. Berrangé ############################################################# 366a0e7ea7SDaniel P. Berrangé # Stage 1: exclude scenarios where we definitely don't 376a0e7ea7SDaniel P. Berrangé # want jobs to run 386a0e7ea7SDaniel P. Berrangé ############################################################# 396a0e7ea7SDaniel P. Berrangé 40a77ef83cSDaniel P. Berrangé # Never run jobs upstream on stable branch, staging branch jobs already ran 41a77ef83cSDaniel P. Berrangé - if: '$CI_PROJECT_NAMESPACE == $QEMU_CI_UPSTREAM && $CI_COMMIT_BRANCH =~ /^stable-/' 42a77ef83cSDaniel P. Berrangé when: never 43a77ef83cSDaniel P. Berrangé 44a77ef83cSDaniel P. Berrangé # Never run jobs upstream on tags, staging branch jobs already ran 45a77ef83cSDaniel P. Berrangé - if: '$CI_PROJECT_NAMESPACE == $QEMU_CI_UPSTREAM && $CI_COMMIT_TAG' 46a77ef83cSDaniel P. Berrangé when: never 47a77ef83cSDaniel P. Berrangé 4883aa1baaSPaolo Bonzini # Scheduled runs on mainline don't get pipelines except for the special Coverity job 4983aa1baaSPaolo Bonzini - if: '$CI_PROJECT_NAMESPACE == $QEMU_CI_UPSTREAM && $CI_PIPELINE_SOURCE == "schedule"' 5083aa1baaSPaolo Bonzini when: never 5183aa1baaSPaolo Bonzini 5200125414SDaniel P. Berrangé # Cirrus jobs can't run unless the creds / target repo are set 5334776d80SDaniel P. Berrangé - if: '$QEMU_JOB_CIRRUS && ($CIRRUS_GITHUB_REPO == null || $CIRRUS_API_TOKEN == null)' 5400125414SDaniel P. Berrangé when: never 5500125414SDaniel P. Berrangé 56e312d1fdSDaniel P. Berrangé # Publishing jobs should only run on the default branch in upstream 571ddd2ff9SDaniel P. Berrangé - if: '$QEMU_JOB_PUBLISH == "1" && $CI_PROJECT_NAMESPACE == $QEMU_CI_UPSTREAM && $CI_COMMIT_BRANCH != $CI_DEFAULT_BRANCH' 58e312d1fdSDaniel P. Berrangé when: never 59e312d1fdSDaniel P. Berrangé 60e312d1fdSDaniel P. Berrangé # Non-publishing jobs should only run on staging branches in upstream 611ddd2ff9SDaniel P. Berrangé - if: '$QEMU_JOB_PUBLISH != "1" && $CI_PROJECT_NAMESPACE == $QEMU_CI_UPSTREAM && $CI_COMMIT_BRANCH !~ /staging/' 62e312d1fdSDaniel P. Berrangé when: never 63e312d1fdSDaniel P. Berrangé 6416fee101SDaniel P. Berrangé # Jobs only intended for forks should always be skipped on upstream 651ddd2ff9SDaniel P. Berrangé - if: '$QEMU_JOB_ONLY_FORKS == "1" && $CI_PROJECT_NAMESPACE == $QEMU_CI_UPSTREAM' 6616fee101SDaniel P. Berrangé when: never 6716fee101SDaniel P. Berrangé 6828357dc5SDaniel P. Berrangé # Forks don't get pipelines unless QEMU_CI=1 or QEMU_CI=2 is set 691ddd2ff9SDaniel P. Berrangé - if: '$QEMU_CI != "1" && $QEMU_CI != "2" && $CI_PROJECT_NAMESPACE != $QEMU_CI_UPSTREAM' 7028357dc5SDaniel P. Berrangé when: never 7128357dc5SDaniel P. Berrangé 72e312d1fdSDaniel P. Berrangé # Avocado jobs don't run in forks unless $QEMU_CI_AVOCADO_TESTING is set 731ddd2ff9SDaniel P. Berrangé - if: '$QEMU_JOB_AVOCADO && $QEMU_CI_AVOCADO_TESTING != "1" && $CI_PROJECT_NAMESPACE != $QEMU_CI_UPSTREAM' 74e312d1fdSDaniel P. Berrangé when: never 75e312d1fdSDaniel P. Berrangé 766a0e7ea7SDaniel P. Berrangé 776a0e7ea7SDaniel P. Berrangé ############################################################# 786a0e7ea7SDaniel P. Berrangé # Stage 2: fine tune execution of jobs in specific scenarios 793aa2cfa0SAlex Bennée # where the catch all logic is inappropriate 806a0e7ea7SDaniel P. Berrangé ############################################################# 816a0e7ea7SDaniel P. Berrangé 8200125414SDaniel P. Berrangé # Optional jobs should not be run unless manually triggered 83e28112d0SDaniel P. Berrangé - if: '$QEMU_JOB_OPTIONAL && $CI_PROJECT_NAMESPACE == $QEMU_CI_UPSTREAM && $CI_COMMIT_BRANCH =~ /staging-[[:digit:]]+\.[[:digit:]]/' 84e28112d0SDaniel P. Berrangé when: manual 85e28112d0SDaniel P. Berrangé allow_failure: true 86e28112d0SDaniel P. Berrangé variables: 87e28112d0SDaniel P. Berrangé QEMU_CI_CONTAINER_TAG: $CI_COMMIT_REF_SLUG 88e28112d0SDaniel P. Berrangé 8900125414SDaniel P. Berrangé - if: '$QEMU_JOB_OPTIONAL' 9000125414SDaniel P. Berrangé when: manual 9100125414SDaniel P. Berrangé allow_failure: true 9200125414SDaniel P. Berrangé 93e312d1fdSDaniel P. Berrangé # Skipped jobs should not be run unless manually triggered 94e28112d0SDaniel P. Berrangé - if: '$QEMU_JOB_SKIPPED && $CI_PROJECT_NAMESPACE == $QEMU_CI_UPSTREAM && $CI_COMMIT_BRANCH =~ /staging-[[:digit:]]+\.[[:digit:]]/' 95e28112d0SDaniel P. Berrangé when: manual 96e28112d0SDaniel P. Berrangé allow_failure: true 97e28112d0SDaniel P. Berrangé variables: 98e28112d0SDaniel P. Berrangé QEMU_CI_CONTAINER_TAG: $CI_COMMIT_REF_SLUG 99e28112d0SDaniel P. Berrangé 100e312d1fdSDaniel P. Berrangé - if: '$QEMU_JOB_SKIPPED' 101e312d1fdSDaniel P. Berrangé when: manual 102e312d1fdSDaniel P. Berrangé allow_failure: true 103e312d1fdSDaniel P. Berrangé 104e312d1fdSDaniel P. Berrangé # Avocado jobs can be manually start in forks if $QEMU_CI_AVOCADO_TESTING is unset 1051ddd2ff9SDaniel P. Berrangé - if: '$QEMU_JOB_AVOCADO && $CI_PROJECT_NAMESPACE != $QEMU_CI_UPSTREAM' 106e312d1fdSDaniel P. Berrangé when: manual 107e312d1fdSDaniel P. Berrangé allow_failure: true 108e312d1fdSDaniel P. Berrangé 1096a0e7ea7SDaniel P. Berrangé 1106a0e7ea7SDaniel P. Berrangé ############################################################# 1116a0e7ea7SDaniel P. Berrangé # Stage 3: catch all logic applying to any job not matching 1126a0e7ea7SDaniel P. Berrangé # an earlier criteria 1136a0e7ea7SDaniel P. Berrangé ############################################################# 1146a0e7ea7SDaniel P. Berrangé 11528357dc5SDaniel P. Berrangé # Forks pipeline jobs don't start automatically unless 11628357dc5SDaniel P. Berrangé # QEMU_CI=2 is set 1171ddd2ff9SDaniel P. Berrangé - if: '$QEMU_CI != "2" && $CI_PROJECT_NAMESPACE != $QEMU_CI_UPSTREAM' 11828357dc5SDaniel P. Berrangé when: manual 11928357dc5SDaniel P. Berrangé 12049ac76c2SDaniel P. Berrangé # Upstream pipeline jobs start automatically unless told not to 12149ac76c2SDaniel P. Berrangé # by setting QEMU_CI=1 12249ac76c2SDaniel P. Berrangé - if: '$QEMU_CI == "1" && $CI_PROJECT_NAMESPACE == $QEMU_CI_UPSTREAM && $CI_COMMIT_BRANCH =~ /staging-[[:digit:]]+\.[[:digit:]]/' 12349ac76c2SDaniel P. Berrangé when: manual 12449ac76c2SDaniel P. Berrangé variables: 12549ac76c2SDaniel P. Berrangé QEMU_CI_CONTAINER_TAG: $CI_COMMIT_REF_SLUG 12649ac76c2SDaniel P. Berrangé 12749ac76c2SDaniel P. Berrangé - if: '$QEMU_CI == "1" && $CI_PROJECT_NAMESPACE == $QEMU_CI_UPSTREAM' 12849ac76c2SDaniel P. Berrangé when: manual 12949ac76c2SDaniel P. Berrangé 130fc998891SAlex Bennée # Jobs can run if any jobs they depend on were successful 131e28112d0SDaniel P. Berrangé - if: '$QEMU_JOB_SKIPPED && $CI_PROJECT_NAMESPACE == $QEMU_CI_UPSTREAM && $CI_COMMIT_BRANCH =~ /staging-[[:digit:]]+\.[[:digit:]]/' 132e28112d0SDaniel P. Berrangé when: on_success 133e28112d0SDaniel P. Berrangé variables: 134e28112d0SDaniel P. Berrangé QEMU_CI_CONTAINER_TAG: $CI_COMMIT_REF_SLUG 135e28112d0SDaniel P. Berrangé 1366a0e7ea7SDaniel P. Berrangé - when: on_success 137