OSDN Git Service

gitlab: stable staging branches publish containers in a separate tag
[qmiga/qemu.git] / .gitlab-ci.d / base.yml
1
2 variables:
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
28   interruptible: true
29
30   rules:
31     #############################################################
32     # Stage 1: exclude scenarios where we definitely don't
33     # want jobs to run
34     #############################################################
35
36     # Cirrus jobs can't run unless the creds / target repo are set
37     - if: '$QEMU_JOB_CIRRUS && ($CIRRUS_GITHUB_REPO == null || $CIRRUS_API_TOKEN == null)'
38       when: never
39
40     # Publishing jobs should only run on the default branch in upstream
41     - if: '$QEMU_JOB_PUBLISH == "1" && $CI_PROJECT_NAMESPACE == $QEMU_CI_UPSTREAM && $CI_COMMIT_BRANCH != $CI_DEFAULT_BRANCH'
42       when: never
43
44     # Non-publishing jobs should only run on staging branches in upstream
45     - if: '$QEMU_JOB_PUBLISH != "1" && $CI_PROJECT_NAMESPACE == $QEMU_CI_UPSTREAM && $CI_COMMIT_BRANCH !~ /staging/'
46       when: never
47
48     # Jobs only intended for forks should always be skipped on upstream
49     - if: '$QEMU_JOB_ONLY_FORKS == "1" && $CI_PROJECT_NAMESPACE == $QEMU_CI_UPSTREAM'
50       when: never
51
52     # Forks don't get pipelines unless QEMU_CI=1 or QEMU_CI=2 is set
53     - if: '$QEMU_CI != "1" && $QEMU_CI != "2" && $CI_PROJECT_NAMESPACE != $QEMU_CI_UPSTREAM'
54       when: never
55
56     # Avocado jobs don't run in forks unless $QEMU_CI_AVOCADO_TESTING is set
57     - if: '$QEMU_JOB_AVOCADO && $QEMU_CI_AVOCADO_TESTING != "1" && $CI_PROJECT_NAMESPACE != $QEMU_CI_UPSTREAM'
58       when: never
59
60
61     #############################################################
62     # Stage 2: fine tune execution of jobs in specific scenarios
63     # where the catch all logic is inapprorpaite
64     #############################################################
65
66     # Optional jobs should not be run unless manually triggered
67     - if: '$QEMU_JOB_OPTIONAL && $CI_PROJECT_NAMESPACE == $QEMU_CI_UPSTREAM && $CI_COMMIT_BRANCH =~ /staging-[[:digit:]]+\.[[:digit:]]/'
68       when: manual
69       allow_failure: true
70       variables:
71         QEMU_CI_CONTAINER_TAG: $CI_COMMIT_REF_SLUG
72
73     - if: '$QEMU_JOB_OPTIONAL'
74       when: manual
75       allow_failure: true
76
77     # Skipped jobs should not be run unless manually triggered
78     - if: '$QEMU_JOB_SKIPPED && $CI_PROJECT_NAMESPACE == $QEMU_CI_UPSTREAM && $CI_COMMIT_BRANCH =~ /staging-[[:digit:]]+\.[[:digit:]]/'
79       when: manual
80       allow_failure: true
81       variables:
82         QEMU_CI_CONTAINER_TAG: $CI_COMMIT_REF_SLUG
83
84     - if: '$QEMU_JOB_SKIPPED'
85       when: manual
86       allow_failure: true
87
88     # Avocado jobs can be manually start in forks if $QEMU_CI_AVOCADO_TESTING is unset
89     - if: '$QEMU_JOB_AVOCADO && $CI_PROJECT_NAMESPACE != $QEMU_CI_UPSTREAM'
90       when: manual
91       allow_failure: true
92
93
94     #############################################################
95     # Stage 3: catch all logic applying to any job not matching
96     # an earlier criteria
97     #############################################################
98
99     # Forks pipeline jobs don't start automatically unless
100     # QEMU_CI=2 is set
101     - if: '$QEMU_CI != "2" && $CI_PROJECT_NAMESPACE != $QEMU_CI_UPSTREAM'
102       when: manual
103
104     # Jobs can run if any jobs they depend on were successful
105     - if: '$QEMU_JOB_SKIPPED && $CI_PROJECT_NAMESPACE == $QEMU_CI_UPSTREAM && $CI_COMMIT_BRANCH =~ /staging-[[:digit:]]+\.[[:digit:]]/'
106       when: on_success
107       variables:
108         QEMU_CI_CONTAINER_TAG: $CI_COMMIT_REF_SLUG
109
110     - when: on_success