xref: /qemu/.gitlab-ci.d/base.yml (revision 9837697b)
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