aboutsummaryrefslogtreecommitdiffstats
path: root/schedulers.py
blob: 06a12d958aa4332d6da0e8824e920d4d1f9bcbbf (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
from buildbot.plugins import schedulers as sched
from buildbot.plugins import util
from yoctoabb import config

from yoctoabb.yocto_console_view.yocto_console_view import ReleaseSelector

schedulers = []


def create_repo_inputs(reponame):
    """
    Given the name of a repository in yoctoab.config's repo dict creates
    StringParameter inputs to allow specification of alternative uri, branch
    and commit/hash values
    """

    repo = util.StringParameter("repo_{}".format(reponame),
                                label="Repository:",
                                default=config.repos[reponame][0])
    branch = util.StringParameter("branch_{}".format(reponame),
                                  label="Branch:",
                                  default=config.repos[reponame][1])
    commit = util.StringParameter("commit_{}".format(reponame),
                                  label="Revision:",
                                  default="HEAD")
    return [repo, branch, commit]


def repos_for_builder(buildername):
    """
    Returns a list of additional properties for a scheduler, a list of
    StringParameter allowing all of the repositories used by the
    builder/scheduler to be customised
    """

    parameters = []
    repos = config.buildertorepos.get(buildername)
    if not repos:
        repos = config.buildertorepos["default"]
    for repo in repos:
        inputs = create_repo_inputs(repo)
        parameters = parameters + [util.NestedParameter(name='', label=repo, fields=inputs, columns=2)]
    return parameters

def parent_default_props(buildername):
    props = {}
    repos = config.buildertorepos.get(buildername)
    if not repos:
        repos = config.buildertorepos["default"]
    for repo in repos:
        props["repo_{}".format(repo)] = config.repos[repo][0]
        props["branch_{}".format(repo)] = config.repos[repo][1]
        props["commit_{}".format(repo)] = "HEAD"
    return props

def buildappsrcrev_param():
    return util.StringParameter(
            name="buildappsrcrev",
            label="""Build appliance source revision to use. "None" means default to the srcrev currently in the recipe, use "AUTOREV" to use latest revision or specify a revision to use:""",
            default="AUTOREV")

def props_for_builder(builder):
    """
    Generate an appropriate list of properties to use on a builder-specific
    scheduler
    """

    props = []
    if builder == 'build-appliance':
        props.append(buildappsrcrev_param())
    if builder in ['build-appliance', 'buildtools']:
        props.append(util.BooleanParameter(
            name="deploy_artefacts",
            label="Do we want to deploy artefacts? ",
            default=False
        ))

    props = props + repos_for_builder(builder)
    return props


for builder in config.subbuilders:
    schedulers.append(sched.ForceScheduler(
        name=builder,
        builderNames=[builder],
        reason=util.StringParameter(
                name="reason",
                label="""Reason (please note the reason for triggering the
 build and any expectations for the build's outcome:""",
                required=False),
        properties=props_for_builder(builder),
        buttonName="Force Build"))

# nightly builder triggers various other builders
wait_quick = sched.Triggerable(name="wait-quick",
                         builderNames=config.trigger_builders_wait_quick)
schedulers.append(wait_quick)
wait_full = sched.Triggerable(name="wait-full",
                         builderNames=config.trigger_builders_wait_full)
schedulers.append(wait_full)

def parent_scheduler(target):
    return sched.ForceScheduler(
    name=target,
    builderNames=[target],
    buttonName="Start " + target + " Build",
    codebases = [util.CodebaseParameter(codebase='', label="yocto-autobuilder-helper:", project=None)],
    reason=util.StringParameter(
        name="reason",
        label="""Reason (please note the reason for triggering the build and
 any expectations for the build's outcome:""",
        required=False),
    properties=[
        ReleaseSelector(
            name="branchselector",
            default="master",
            label="Release Shortcut Selector",
            choices=["master", "master-next", "mut", "thud", "sumo", "rocko", "pyro", "morty"],
            selectors={
              'master': {
                'branch': 'master',
                'branch_poky': 'master',
                'branch_bitbake': 'master',
                'branch_eclipse-poky-neon': 'neon-master',
                'branch_eclipse-poky-oxygen': 'oxygen-master',
                'branch_meta-gplv2': 'master',
                'branch_meta-intel': 'master',
                'branch_meta-mingw': 'master',
                'branch_meta-qt3': 'master',
                'branch_meta-qt4': 'master',
                'branch_oecore': 'master',
              },
              'master-next': {
                'branch': 'master',
                'branch_poky': 'master-next',
                'branch_bitbake': 'master-next',
                'branch_eclipse-poky-neon': 'neon-master',
                'branch_eclipse-poky-oxygen': 'oxygen-master',
                'branch_meta-gplv2': 'master',
                'branch_meta-intel': 'master',
                'branch_meta-mingw': 'master',
                'branch_meta-qt3': 'master',
                'branch_meta-qt4': 'master',
                'branch_oecore': 'master-next',
              },
              'mut': {
                'branch': 'master',
                'branch_poky': 'ross/mut',
                'repo_poky': 'git://git.yoctoproject.org/poky-contrib',
                'branch_bitbake': 'master',
                'branch_eclipse-poky-neon': 'neon-master',
                'branch_eclipse-poky-oxygen': 'oxygen-master',
                'branch_meta-gplv2': 'master',
                'branch_meta-intel': 'master',
                'branch_meta-mingw': 'master',
                'branch_meta-qt3': 'master',
                'branch_meta-qt4': 'master',
                'branch_oecore': 'master',
              },
              'thud': {
                'branch': 'thud',
                'branch_poky': 'thud',
                'branch_bitbake': '1.40',
                'branch_eclipse-poky-neon': 'neon/thud',
                'branch_eclipse-poky-oxygen': 'oxygen/thud',
                'branch_meta-gplv2': 'thud',
                'branch_meta-intel': 'thud',
                'branch_meta-mingw': 'thud',
                'branch_meta-qt3': 'thud',
                'branch_meta-qt4': 'thud',
                'branch_oecore': 'thud',
              },
              'sumo': {
                'branch': 'sumo',
                'branch_poky': 'sumo',
                'branch_bitbake': '1.38',
                'branch_eclipse-poky-neon': 'neon/sumo',
                'branch_eclipse-poky-oxygen': 'oxygen/sumo',
                'branch_meta-gplv2': 'sumo',
                'branch_meta-intel': 'sumo',
                'branch_meta-mingw': 'sumo',
                'branch_meta-qt3': 'sumo',
                'branch_meta-qt4': 'sumo',
                'branch_oecore': 'sumo',
              },
              'rocko': {
                'branch': 'rocko',
                'branch_poky': 'rocko',
                'branch_bitbake': '1.36',
                'branch_eclipse-poky-neon': 'neon/rocko',
                'branch_eclipse-poky-oxygen': 'oxygen/rocko',
                'branch_meta-gplv2': 'rocko',
                'branch_meta-intel': 'rocko',
                'branch_meta-mingw': 'rocko',
                'branch_meta-qt3': 'rocko',
                'branch_meta-qt4': 'rocko',
                'branch_oecore': 'rocko',
              },
              'pyro': {
                'branch': 'pyro',
                'branch_poky': 'pyro',
                'branch_bitbake': '1.34',
                'branch_eclipse-poky-neon': 'neon/pyro',
                'branch_eclipse-poky-oxygen': 'oxygen/pyro',
                'branch_meta-gplv2': 'pyro',
                'branch_meta-intel': 'pyro',
                'branch_meta-mingw': 'pyro',
                'branch_meta-qt3': 'pyro',
                'branch_meta-qt4': 'pyro',
                'branch_oecore': 'pyro',
              },
              'morty': {
                'branch': 'morty',
                'branch_poky': 'morty',
                'branch_bitbake': '1.32',
                'branch_eclipse-poky-neon': 'neon/morty',
                'branch_eclipse-poky-oxygen': 'oxygen/morty',
                'branch_meta-gplv2': 'master',
                'branch_meta-intel': 'morty',
                'branch_meta-mingw': 'morty',
                'branch_meta-qt3': 'morty',
                'branch_meta-qt4': 'morty',
                'branch_oecore': 'morty',
              }
            }),
        buildappsrcrev_param(),
        util.BooleanParameter(
            name="is_release",
            label="Generate a release?",
            default=False),
        util.StringParameter(
            name="yocto_number",  # used to form publish path
            label="Yocto Project Release Number (1.5, 1.6 etc.)"),
        util.ChoiceStringParameter(
            name="milestone_number",
            label="Milestone number",
            choices=["", "M1", "M2", "M3", "M4"],
            default=""
        ),
        util.ChoiceStringParameter(
            name="rc_number",
            label="Release candidate number",
            choices=["", "rc1", "rc2", "rc3", "rc4", "rc5", "rc6", "rc7",
                     "rc8", "rc9"],
            default=""),
        util.BooleanParameter(
            name="send_email",
            label="Send QA alert emails?",
            default=False),
        util.BooleanParameter(
            name="deploy_artefacts",
            label="Do we want to save build output? ",
            default=False)
    ]+repos_for_builder(target))

schedulers.append(parent_scheduler("a-quick"))
schedulers.append(parent_scheduler("a-full"))

# Run a-quick at 1am each day so we keep master tested and up to date in sstate and buildhistory
schedulers.append(sched.Nightly(name='nightly-quick', branch='master', properties=parent_default_props('a-quick'),
                  builderNames=['a-quick'], hour=1, minute=0))

# Run the build performance tests at 3am, 9am, 3pm and 9pm
#schedulers.append(sched.Nightly(name='nightly-buildperf-ubuntu1604', branch='master', properties=parent_default_props('buildperf-ubuntu1604'),
#                  builderNames=['buildperf-ubuntu1604'], hour=[3,9,15,21], minute=0))
#schedulers.append(sched.Nightly(name='nightly-buildperf-centos7', branch='master', properties=parent_default_props('buildperf-centos7'),
#                  builderNames=['buildperf-centos7'], hour=[3,9,15,21], minute=0))