1 2variables: 3 # On stable branches this is changed by later rules. Should also 4 # be overridden per pipeline if running pipelines concurrently 5 # for different branches in contributor forks. 6 QEMU_CI_CONTAINER_TAG: latest 7 8 # For purposes of CI rules, upstream is the gitlab.com/qemu-project 9 # namespace. When testing CI, it might be usefult to override this 10 # to point to a fork repo 11 QEMU_CI_UPSTREAM: qemu-project 12 13# The order of rules defined here is critically important. 14# They are evaluated in order and first match wins. 15# 16# Thus we group them into a number of stages, ordered from 17# most restrictive to least restrictive 18# 19# For pipelines running for stable "staging-X.Y" branches 20# we must override QEMU_CI_CONTAINER_TAG 21# 22.base_job_template: 23 variables: 24 # Each script line from will be in a collapsible section in the job output 25 # and show the duration of each line. 26 FF_SCRIPT_SECTIONS: 1 27 # The project has a fairly fat GIT repo so we try and avoid bringing in things 28 # we don't need. The --filter options avoid blobs and tree references we aren't going to use 29 # and we also avoid fetching tags. 30 GIT_FETCH_EXTRA_FLAGS: --filter=blob:none --filter=tree:0 --no-tags --prune --quiet 31 32 interruptible: true 33 34 rules: 35 ############################################################# 36 # Stage 1: exclude scenarios where we definitely don't 37 # want jobs to run 38 ############################################################# 39 40 # Never run jobs upstream on stable branch, staging branch jobs already ran 41 - if: '$CI_PROJECT_NAMESPACE == $QEMU_CI_UPSTREAM && $CI_COMMIT_BRANCH =~ /^stable-/' 42 when: never 43 44 # Never run jobs upstream on tags, staging branch jobs already ran 45 - if: '$CI_PROJECT_NAMESPACE == $QEMU_CI_UPSTREAM && $CI_COMMIT_TAG' 46 when: never 47 48 # Scheduled runs on mainline don't get pipelines except for the special Coverity job 49 - if: '$CI_PROJECT_NAMESPACE == $QEMU_CI_UPSTREAM && $CI_PIPELINE_SOURCE == "schedule"' 50 when: never 51 52 # Cirrus jobs can't run unless the creds / target repo are set 53 - if: '$QEMU_JOB_CIRRUS && ($CIRRUS_GITHUB_REPO == null || $CIRRUS_API_TOKEN == null)' 54 when: never 55 56 # Publishing jobs should only run on the default branch in upstream 57 - if: '$QEMU_JOB_PUBLISH == "1" && $CI_PROJECT_NAMESPACE == $QEMU_CI_UPSTREAM && $CI_COMMIT_BRANCH != $CI_DEFAULT_BRANCH' 58 when: never 59 60 # Non-publishing jobs should only run on staging branches in upstream 61 - if: '$QEMU_JOB_PUBLISH != "1" && $CI_PROJECT_NAMESPACE == $QEMU_CI_UPSTREAM && $CI_COMMIT_BRANCH !~ /staging/' 62 when: never 63 64 # Jobs only intended for forks should always be skipped on upstream 65 - if: '$QEMU_JOB_ONLY_FORKS == "1" && $CI_PROJECT_NAMESPACE == $QEMU_CI_UPSTREAM' 66 when: never 67 68 # Forks don't get pipelines unless QEMU_CI=1 or QEMU_CI=2 is set 69 - if: '$QEMU_CI != "1" && $QEMU_CI != "2" && $CI_PROJECT_NAMESPACE != $QEMU_CI_UPSTREAM' 70 when: never 71 72 # Avocado jobs don't run in forks unless $QEMU_CI_AVOCADO_TESTING is set 73 - if: '$QEMU_JOB_AVOCADO && $QEMU_CI_AVOCADO_TESTING != "1" && $CI_PROJECT_NAMESPACE != $QEMU_CI_UPSTREAM' 74 when: never 75 76 77 ############################################################# 78 # Stage 2: fine tune execution of jobs in specific scenarios 79 # where the catch all logic is inappropriate 80 ############################################################# 81 82 # Optional jobs should not be run unless manually triggered 83 - if: '$QEMU_JOB_OPTIONAL && $CI_PROJECT_NAMESPACE == $QEMU_CI_UPSTREAM && $CI_COMMIT_BRANCH =~ /staging-[[:digit:]]+\.[[:digit:]]/' 84 when: manual 85 allow_failure: true 86 variables: 87 QEMU_CI_CONTAINER_TAG: $CI_COMMIT_REF_SLUG 88 89 - if: '$QEMU_JOB_OPTIONAL' 90 when: manual 91 allow_failure: true 92 93 # Skipped jobs should not be run unless manually triggered 94 - if: '$QEMU_JOB_SKIPPED && $CI_PROJECT_NAMESPACE == $QEMU_CI_UPSTREAM && $CI_COMMIT_BRANCH =~ /staging-[[:digit:]]+\.[[:digit:]]/' 95 when: manual 96 allow_failure: true 97 variables: 98 QEMU_CI_CONTAINER_TAG: $CI_COMMIT_REF_SLUG 99 100 - if: '$QEMU_JOB_SKIPPED' 101 when: manual 102 allow_failure: true 103 104 # Avocado jobs can be manually start in forks if $QEMU_CI_AVOCADO_TESTING is unset 105 - if: '$QEMU_JOB_AVOCADO && $CI_PROJECT_NAMESPACE != $QEMU_CI_UPSTREAM' 106 when: manual 107 allow_failure: true 108 109 110 ############################################################# 111 # Stage 3: catch all logic applying to any job not matching 112 # an earlier criteria 113 ############################################################# 114 115 # Forks pipeline jobs don't start automatically unless 116 # QEMU_CI=2 is set 117 - if: '$QEMU_CI != "2" && $CI_PROJECT_NAMESPACE != $QEMU_CI_UPSTREAM' 118 when: manual 119 120 # Upstream pipeline jobs start automatically unless told not to 121 # by setting QEMU_CI=1 122 - if: '$QEMU_CI == "1" && $CI_PROJECT_NAMESPACE == $QEMU_CI_UPSTREAM && $CI_COMMIT_BRANCH =~ /staging-[[:digit:]]+\.[[:digit:]]/' 123 when: manual 124 variables: 125 QEMU_CI_CONTAINER_TAG: $CI_COMMIT_REF_SLUG 126 127 - if: '$QEMU_CI == "1" && $CI_PROJECT_NAMESPACE == $QEMU_CI_UPSTREAM' 128 when: manual 129 130 # Jobs can run if any jobs they depend on were successful 131 - if: '$QEMU_JOB_SKIPPED && $CI_PROJECT_NAMESPACE == $QEMU_CI_UPSTREAM && $CI_COMMIT_BRANCH =~ /staging-[[:digit:]]+\.[[:digit:]]/' 132 when: on_success 133 variables: 134 QEMU_CI_CONTAINER_TAG: $CI_COMMIT_REF_SLUG 135 136 - when: on_success 137