xref: /openbmc/qemu/.gitlab-ci.d/base.yml (revision 3aa2cfa0)
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
27075d909dSMark Cave-Ayland
28e97a9b8cSThomas Huth  interruptible: true
29e97a9b8cSThomas Huth
306a0e7ea7SDaniel P. Berrangé  rules:
316a0e7ea7SDaniel P. Berrangé    #############################################################
326a0e7ea7SDaniel P. Berrangé    # Stage 1: exclude scenarios where we definitely don't
336a0e7ea7SDaniel P. Berrangé    # want jobs to run
346a0e7ea7SDaniel P. Berrangé    #############################################################
356a0e7ea7SDaniel P. Berrangé
36a77ef83cSDaniel P. Berrangé    # Never run jobs upstream on stable branch, staging branch jobs already ran
37a77ef83cSDaniel P. Berrangé    - if: '$CI_PROJECT_NAMESPACE == $QEMU_CI_UPSTREAM && $CI_COMMIT_BRANCH =~ /^stable-/'
38a77ef83cSDaniel P. Berrangé      when: never
39a77ef83cSDaniel P. Berrangé
40a77ef83cSDaniel P. Berrangé    # Never run jobs upstream on tags, staging branch jobs already ran
41a77ef83cSDaniel P. Berrangé    - if: '$CI_PROJECT_NAMESPACE == $QEMU_CI_UPSTREAM && $CI_COMMIT_TAG'
42a77ef83cSDaniel P. Berrangé      when: never
43a77ef83cSDaniel P. Berrangé
4400125414SDaniel P. Berrangé    # Cirrus jobs can't run unless the creds / target repo are set
4534776d80SDaniel P. Berrangé    - if: '$QEMU_JOB_CIRRUS && ($CIRRUS_GITHUB_REPO == null || $CIRRUS_API_TOKEN == null)'
4600125414SDaniel P. Berrangé      when: never
4700125414SDaniel P. Berrangé
48e312d1fdSDaniel P. Berrangé    # Publishing jobs should only run on the default branch in upstream
491ddd2ff9SDaniel P. Berrangé    - if: '$QEMU_JOB_PUBLISH == "1" && $CI_PROJECT_NAMESPACE == $QEMU_CI_UPSTREAM && $CI_COMMIT_BRANCH != $CI_DEFAULT_BRANCH'
50e312d1fdSDaniel P. Berrangé      when: never
51e312d1fdSDaniel P. Berrangé
52e312d1fdSDaniel P. Berrangé    # Non-publishing jobs should only run on staging branches in upstream
531ddd2ff9SDaniel P. Berrangé    - if: '$QEMU_JOB_PUBLISH != "1" && $CI_PROJECT_NAMESPACE == $QEMU_CI_UPSTREAM && $CI_COMMIT_BRANCH !~ /staging/'
54e312d1fdSDaniel P. Berrangé      when: never
55e312d1fdSDaniel P. Berrangé
5616fee101SDaniel P. Berrangé    # Jobs only intended for forks should always be skipped on upstream
571ddd2ff9SDaniel P. Berrangé    - if: '$QEMU_JOB_ONLY_FORKS == "1" && $CI_PROJECT_NAMESPACE == $QEMU_CI_UPSTREAM'
5816fee101SDaniel P. Berrangé      when: never
5916fee101SDaniel P. Berrangé
6028357dc5SDaniel P. Berrangé    # Forks don't get pipelines unless QEMU_CI=1 or QEMU_CI=2 is set
611ddd2ff9SDaniel P. Berrangé    - if: '$QEMU_CI != "1" && $QEMU_CI != "2" && $CI_PROJECT_NAMESPACE != $QEMU_CI_UPSTREAM'
6228357dc5SDaniel P. Berrangé      when: never
6328357dc5SDaniel P. Berrangé
64e312d1fdSDaniel P. Berrangé    # Avocado jobs don't run in forks unless $QEMU_CI_AVOCADO_TESTING is set
651ddd2ff9SDaniel P. Berrangé    - if: '$QEMU_JOB_AVOCADO && $QEMU_CI_AVOCADO_TESTING != "1" && $CI_PROJECT_NAMESPACE != $QEMU_CI_UPSTREAM'
66e312d1fdSDaniel P. Berrangé      when: never
67e312d1fdSDaniel P. Berrangé
686a0e7ea7SDaniel P. Berrangé
696a0e7ea7SDaniel P. Berrangé    #############################################################
706a0e7ea7SDaniel P. Berrangé    # Stage 2: fine tune execution of jobs in specific scenarios
71*3aa2cfa0SAlex Bennée    # where the catch all logic is inappropriate
726a0e7ea7SDaniel P. Berrangé    #############################################################
736a0e7ea7SDaniel P. Berrangé
7400125414SDaniel P. Berrangé    # Optional jobs should not be run unless manually triggered
75e28112d0SDaniel P. Berrangé    - if: '$QEMU_JOB_OPTIONAL && $CI_PROJECT_NAMESPACE == $QEMU_CI_UPSTREAM && $CI_COMMIT_BRANCH =~ /staging-[[:digit:]]+\.[[:digit:]]/'
76e28112d0SDaniel P. Berrangé      when: manual
77e28112d0SDaniel P. Berrangé      allow_failure: true
78e28112d0SDaniel P. Berrangé      variables:
79e28112d0SDaniel P. Berrangé        QEMU_CI_CONTAINER_TAG: $CI_COMMIT_REF_SLUG
80e28112d0SDaniel P. Berrangé
8100125414SDaniel P. Berrangé    - if: '$QEMU_JOB_OPTIONAL'
8200125414SDaniel P. Berrangé      when: manual
8300125414SDaniel P. Berrangé      allow_failure: true
8400125414SDaniel P. Berrangé
85e312d1fdSDaniel P. Berrangé    # Skipped jobs should not be run unless manually triggered
86e28112d0SDaniel P. Berrangé    - if: '$QEMU_JOB_SKIPPED && $CI_PROJECT_NAMESPACE == $QEMU_CI_UPSTREAM && $CI_COMMIT_BRANCH =~ /staging-[[:digit:]]+\.[[:digit:]]/'
87e28112d0SDaniel P. Berrangé      when: manual
88e28112d0SDaniel P. Berrangé      allow_failure: true
89e28112d0SDaniel P. Berrangé      variables:
90e28112d0SDaniel P. Berrangé        QEMU_CI_CONTAINER_TAG: $CI_COMMIT_REF_SLUG
91e28112d0SDaniel P. Berrangé
92e312d1fdSDaniel P. Berrangé    - if: '$QEMU_JOB_SKIPPED'
93e312d1fdSDaniel P. Berrangé      when: manual
94e312d1fdSDaniel P. Berrangé      allow_failure: true
95e312d1fdSDaniel P. Berrangé
96e312d1fdSDaniel P. Berrangé    # Avocado jobs can be manually start in forks if $QEMU_CI_AVOCADO_TESTING is unset
971ddd2ff9SDaniel P. Berrangé    - if: '$QEMU_JOB_AVOCADO && $CI_PROJECT_NAMESPACE != $QEMU_CI_UPSTREAM'
98e312d1fdSDaniel P. Berrangé      when: manual
99e312d1fdSDaniel P. Berrangé      allow_failure: true
100e312d1fdSDaniel P. Berrangé
1016a0e7ea7SDaniel P. Berrangé
1026a0e7ea7SDaniel P. Berrangé    #############################################################
1036a0e7ea7SDaniel P. Berrangé    # Stage 3: catch all logic applying to any job not matching
1046a0e7ea7SDaniel P. Berrangé    # an earlier criteria
1056a0e7ea7SDaniel P. Berrangé    #############################################################
1066a0e7ea7SDaniel P. Berrangé
10728357dc5SDaniel P. Berrangé    # Forks pipeline jobs don't start automatically unless
10828357dc5SDaniel P. Berrangé    # QEMU_CI=2 is set
1091ddd2ff9SDaniel P. Berrangé    - if: '$QEMU_CI != "2" && $CI_PROJECT_NAMESPACE != $QEMU_CI_UPSTREAM'
11028357dc5SDaniel P. Berrangé      when: manual
11128357dc5SDaniel P. Berrangé
11249ac76c2SDaniel P. Berrangé    # Upstream pipeline jobs start automatically unless told not to
11349ac76c2SDaniel P. Berrangé    # by setting QEMU_CI=1
11449ac76c2SDaniel P. Berrangé    - if: '$QEMU_CI == "1" && $CI_PROJECT_NAMESPACE == $QEMU_CI_UPSTREAM && $CI_COMMIT_BRANCH =~ /staging-[[:digit:]]+\.[[:digit:]]/'
11549ac76c2SDaniel P. Berrangé      when: manual
11649ac76c2SDaniel P. Berrangé      variables:
11749ac76c2SDaniel P. Berrangé        QEMU_CI_CONTAINER_TAG: $CI_COMMIT_REF_SLUG
11849ac76c2SDaniel P. Berrangé
11949ac76c2SDaniel P. Berrangé    - if: '$QEMU_CI == "1" && $CI_PROJECT_NAMESPACE == $QEMU_CI_UPSTREAM'
12049ac76c2SDaniel P. Berrangé      when: manual
12149ac76c2SDaniel P. Berrangé
122fc998891SAlex Bennée    # Jobs can run if any jobs they depend on were successful
123e28112d0SDaniel P. Berrangé    - if: '$QEMU_JOB_SKIPPED && $CI_PROJECT_NAMESPACE == $QEMU_CI_UPSTREAM && $CI_COMMIT_BRANCH =~ /staging-[[:digit:]]+\.[[:digit:]]/'
124e28112d0SDaniel P. Berrangé      when: on_success
125e28112d0SDaniel P. Berrangé      variables:
126e28112d0SDaniel P. Berrangé        QEMU_CI_CONTAINER_TAG: $CI_COMMIT_REF_SLUG
127e28112d0SDaniel P. Berrangé
1286a0e7ea7SDaniel P. Berrangé    - when: on_success
129