blob: 480fec7f3813794efcd7f5044419b5363a77f75e [file] [log] [blame]
Oleh Prypin1a0593f2019-03-11 09:43:28 +01001#!/usr/bin/env lucicfg
2
3# Copyright (c) 2019 The WebRTC project authors. All rights reserved.
4# Use of this source code is governed by a BSD-style license that can be
5# found in the LICENSE file.
6
7# https://chromium.googlesource.com/infra/luci/luci-go/+/master/lucicfg/doc/
8
Jeremy Leconteea2016b2020-07-01 09:47:22 +02009"""LUCI project configuration for WebRTC CQ and CI."""
10
Andrii Shyshkalov0efa6da2021-04-26 20:40:33 +020011lucicfg.check_version("1.23.0")
Mirko Bonadei9189d9c2020-06-09 21:54:18 +020012
Oleh Prypin1a0593f2019-03-11 09:43:28 +010013WEBRTC_GIT = "https://webrtc.googlesource.com/src"
14WEBRTC_GERRIT = "https://webrtc-review.googlesource.com/src"
15
Mirko Bonadei32ca4862020-03-11 10:39:45 +010016GOMA_BACKEND_WEBRTC_RBE_PROD = {
Mirko Bonadei1e905342020-03-04 09:39:42 +010017 "$build/goma": {
18 "server_host": "goma.chromium.org",
Jeremy Leconteea2016b2020-07-01 09:47:22 +020019 "use_luci_auth": True,
20 },
Mirko Bonadei1e905342020-03-04 09:39:42 +010021}
22
Mirko Bonadei84360ca2020-03-12 08:35:48 +010023GOMA_BACKEND_WEBRTC_IOS_RBE_PROD = {
24 "$build/goma": {
25 "server_host": "goma.chromium.org",
Jeremy Leconteea2016b2020-07-01 09:47:22 +020026 "use_luci_auth": True,
Mirko Bonadei84360ca2020-03-12 08:35:48 +010027 },
Artem Titov1d47d312020-11-03 14:45:52 +010028 "$depot_tools/osx_sdk": {"sdk_version": "12a7209"},
Mirko Bonadei84360ca2020-03-12 08:35:48 +010029}
30
Patrik Höglund3916a972019-12-04 13:19:38 +010031GOMA_BACKEND_RBE_ATS_PROD = {
32 "$build/goma": {
33 "server_host": "goma.chromium.org",
Mirko Bonadei2688eca2020-03-25 09:15:54 +010034 "use_luci_auth": True,
Jeremy Leconteea2016b2020-07-01 09:47:22 +020035 "enable_ats": True,
36 },
Patrik Höglund3916a972019-12-04 13:19:38 +010037}
38
Mirko Bonadei5aafd472021-04-21 10:42:00 +020039# Disable ATS on CQ/try.
40GOMA_BACKEND_RBE_NO_ATS_PROD = {
41 "$build/goma": {
42 "server_host": "goma.chromium.org",
43 "use_luci_auth": True,
44 "enable_ats": False,
45 },
46}
47
Oleh Prypin1a0593f2019-03-11 09:43:28 +010048# Top-level configs:
49
Andrii Shyshkalov0efa6da2021-04-26 20:40:33 +020050# Enable LUCI Realms support.
51lucicfg.enable_experiment("crbug.com/1085650")
52
Oleh Prypin1a0593f2019-03-11 09:43:28 +010053lucicfg.config(
54 config_dir = ".",
55 tracked_files = [
56 "commit-queue.cfg",
57 "cr-buildbucket.cfg",
58 "luci-logdog.cfg",
59 "luci-milo.cfg",
Oleh Prypin71d17422019-03-28 08:43:16 +010060 "luci-notify.cfg",
Oleh Prypin705b6a62019-04-03 23:10:51 +020061 "luci-notify/**/*",
Oleh Prypin1a0593f2019-03-11 09:43:28 +010062 "luci-scheduler.cfg",
63 "project.cfg",
Andrii Shyshkalov0efa6da2021-04-26 20:40:33 +020064 "realms.cfg",
Oleh Prypin1a0593f2019-03-11 09:43:28 +010065 ],
Jeremy Leconteea2016b2020-07-01 09:47:22 +020066 lint_checks = ["default"],
Oleh Prypin1a0593f2019-03-11 09:43:28 +010067)
68
69luci.project(
70 name = "webrtc",
71 buildbucket = "cr-buildbucket.appspot.com",
72 logdog = "luci-logdog.appspot.com",
73 milo = "luci-milo.appspot.com",
Oleh Prypin71d17422019-03-28 08:43:16 +010074 notify = "luci-notify.appspot.com",
Oleh Prypin1a0593f2019-03-11 09:43:28 +010075 scheduler = "luci-scheduler.appspot.com",
76 swarming = "chromium-swarm.appspot.com",
77 acls = [
78 acl.entry(
79 [acl.BUILDBUCKET_READER, acl.LOGDOG_READER, acl.PROJECT_CONFIGS_READER, acl.SCHEDULER_READER],
80 groups = ["all"],
81 ),
82 acl.entry(acl.LOGDOG_WRITER, groups = ["luci-logdog-chromium-writers"]),
83 acl.entry(acl.SCHEDULER_OWNER, groups = ["project-webrtc-admins"]),
84 ],
Andrii Shyshkalov0efa6da2021-04-26 20:40:33 +020085 bindings = [
86 luci.binding(
87 roles = "role/swarming.poolOwner",
88 groups = "project-webrtc-admins",
89 ),
90 luci.binding(
91 roles = "role/swarming.poolViewer",
92 groups = "all",
93 ),
94 ],
Oleh Prypin1a0593f2019-03-11 09:43:28 +010095)
96
97luci.logdog(
98 gs_bucket = "chromium-luci-logdog",
99)
100
101luci.milo(
102 logo = "https://storage.googleapis.com/chrome-infra/webrtc-logo-vert-retro-255x305.png",
103)
104
Owen Rodleya55c38e2020-06-15 11:16:10 +1000105luci.notify(tree_closing_enabled = True)
106
Oleh Prypin1a0593f2019-03-11 09:43:28 +0100107luci.cq(
108 status_host = "chromium-cq-status.appspot.com",
109 submit_max_burst = 1,
110 submit_burst_delay = 1 * time.minute,
111)
112
113luci.gitiles_poller(
114 name = "webrtc-gitiles-trigger-master",
115 bucket = "ci",
116 repo = WEBRTC_GIT,
117)
118
Andrii Shyshkalov0efa6da2021-04-26 20:40:33 +0200119# Swarming permissions:
120
Andrii Shyshkalovc26aaad2021-04-27 16:47:26 +0200121luci.realm(name = "pools/cron", bindings = [
122 # Unlike WebRTC's own builders, other projects need an explicit grant to use this pool.
123 luci.binding(
124 roles = "role/swarming.poolUser",
125 projects = "libyuv",
126 ),
127])
128
Andrii Shyshkalov0efa6da2021-04-26 20:40:33 +0200129luci.realm(name = "pools/ci")
Andrii Shyshkalovc26aaad2021-04-27 16:47:26 +0200130luci.realm(name = "pools/ci-tests", bindings = [
131 # Allow task service accounts of .ci pool/bucket to trigger tasks here.
132 luci.binding(
133 roles = "role/swarming.poolUser",
134 groups = "project-webrtc-ci-task-accounts",
135 ),
136 # Allow tasks here to use .ci task service accounts.
137 luci.binding(
138 roles = "role/swarming.taskServiceAccount",
139 groups = "project-webrtc-ci-task-accounts",
140 ),
141])
142
Andrii Shyshkalov0efa6da2021-04-26 20:40:33 +0200143luci.realm(name = "pools/try")
Andrii Shyshkalovc26aaad2021-04-27 16:47:26 +0200144luci.realm(name = "pools/try-tests", bindings = [
145 # Allow task service accounts of .try pool/bucket to trigger tasks here.
146 luci.binding(
147 roles = "role/swarming.poolUser",
148 groups = "project-webrtc-try-task-accounts",
149 ),
150 # Allow tasks here to use .try task service accounts.
151 luci.binding(
152 roles = "role/swarming.taskServiceAccount",
153 groups = "project-webrtc-try-task-accounts",
154 ),
155])
Andrii Shyshkalov0efa6da2021-04-26 20:40:33 +0200156
157# Allow admins to use LED & Swarming "Debug" feature on all WebRTC bots.
158luci.binding(
159 realm = "@root",
160 roles = "role/swarming.poolUser",
161 groups = "project-webrtc-admins",
162)
163luci.binding(
164 realm = "@root",
165 roles = "role/swarming.taskTriggerer",
166 groups = "project-webrtc-admins",
167)
168
169# Allow to use LED & Swarming "Debug" feature to a larger group but only on try bots / builders.
170luci.binding(
171 realm = "pools/try",
172 roles = "role/swarming.poolUser",
173 groups = "project-webrtc-led-users",
174)
175luci.binding(
176 realm = "try",
177 roles = "role/swarming.taskTriggerer",
178 groups = "project-webrtc-led-users",
179)
180
Oleh Prypin1a0593f2019-03-11 09:43:28 +0100181# Bucket definitions:
182
183luci.bucket(
184 name = "try",
185 acls = [
186 acl.entry(acl.BUILDBUCKET_TRIGGERER, groups = [
187 "service-account-cq",
188 "project-webrtc-tryjob-access",
189 ]),
190 ],
191)
192
193luci.bucket(
194 name = "ci",
195 acls = [
Oleh Prypinf35939d2019-05-03 20:42:38 +0200196 acl.entry(acl.BUILDBUCKET_TRIGGERER, groups = [
197 "project-webrtc-ci-schedulers",
Oleh Prypin1a0593f2019-03-11 09:43:28 +0100198 ]),
Jeremy Leconte2e25bb52020-07-16 09:38:56 +0200199 acl.entry(acl.BUILDBUCKET_TRIGGERER, groups = [
200 # Allow Pinpoint to trigger builds for bisection
201 "service-account-chromeperf",
202 ]),
Oleh Prypin1a0593f2019-03-11 09:43:28 +0100203 ],
204)
205
206luci.bucket(
207 name = "perf",
208 acls = [
209 acl.entry(acl.BUILDBUCKET_TRIGGERER, users = [
Oleh Prypin1a0593f2019-03-11 09:43:28 +0100210 "webrtc-ci-builder@chops-service-accounts.iam.gserviceaccount.com",
211 ]),
212 ],
213)
214
215luci.bucket(
216 name = "cron",
Oleh Prypin1a0593f2019-03-11 09:43:28 +0100217)
218
219# Commit queue definitions:
220
221luci.cq_group(
222 name = "cq",
223 tree_status_host = "webrtc-status.appspot.com",
Oleh Prypin7d1cabe2019-03-14 15:10:30 +0100224 watch = [cq.refset(repo = WEBRTC_GERRIT, refs = ["refs/heads/master"])],
Oleh Prypin1a0593f2019-03-11 09:43:28 +0100225 acls = [
226 acl.entry(acl.CQ_COMMITTER, groups = ["project-webrtc-committers"]),
227 acl.entry(acl.CQ_DRY_RUNNER, groups = ["project-webrtc-tryjob-access"]),
228 ],
229 retry_config = cq.RETRY_ALL_FAILURES,
Oleh Prypin5416f2d2019-08-02 09:43:15 +0200230 cancel_stale_tryjobs = True,
Oleh Prypin1a0593f2019-03-11 09:43:28 +0100231)
232
233luci.cq_group(
Oleh Prypin7d1cabe2019-03-14 15:10:30 +0100234 name = "cq_branch",
235 watch = [cq.refset(repo = WEBRTC_GERRIT, refs = ["refs/branch-heads/.+"])],
236 acls = [
237 acl.entry(acl.CQ_COMMITTER, groups = ["project-webrtc-committers"]),
238 acl.entry(acl.CQ_DRY_RUNNER, groups = ["project-webrtc-tryjob-access"]),
239 ],
240 retry_config = cq.RETRY_ALL_FAILURES,
Oleh Prypin5416f2d2019-08-02 09:43:15 +0200241 cancel_stale_tryjobs = True,
Oleh Prypin7d1cabe2019-03-14 15:10:30 +0100242)
243
244luci.cq_group(
245 name = "cq_infra",
246 watch = [cq.refset(repo = WEBRTC_GERRIT, refs = ["refs/heads/infra/config"])],
Oleh Prypin1a0593f2019-03-11 09:43:28 +0100247 acls = [
248 acl.entry(acl.CQ_COMMITTER, groups = ["project-webrtc-admins"]),
249 acl.entry(acl.CQ_DRY_RUNNER, groups = ["project-webrtc-tryjob-access"]),
250 ],
251 retry_config = cq.RETRY_ALL_FAILURES,
Oleh Prypin5416f2d2019-08-02 09:43:15 +0200252 cancel_stale_tryjobs = True,
Oleh Prypin1a0593f2019-03-11 09:43:28 +0100253)
254
255luci.cq_tryjob_verifier(
256 builder = "presubmit",
Oleh Prypin7d1cabe2019-03-14 15:10:30 +0100257 cq_group = "cq_infra",
Oleh Prypin1a0593f2019-03-11 09:43:28 +0100258)
259
Oleh Prypine56cd9b2019-05-29 21:14:31 +0200260luci.cq_tryjob_verifier(
261 builder = "webrtc-internal:g3.webrtc-internal.try/internal_compile_lite",
262 owner_whitelist = ["project-webrtc-internal-tryjob-access"],
263 cq_group = "cq",
264)
265
Oleh Prypin71d17422019-03-28 08:43:16 +0100266# Notifier definitions:
267
268luci.notifier(
Mirko Bonadei875a27a2020-07-11 15:04:58 +0200269 name = "post_submit_failure_notifier",
270 on_new_status = ["FAILURE"],
Oleh Prypin71d17422019-03-28 08:43:16 +0100271 notify_emails = ["webrtc-sheriffs-robots@google.com"],
Oleh Prypin705b6a62019-04-03 23:10:51 +0200272 template = luci.notifier_template(
Mirko Bonadei875a27a2020-07-11 15:04:58 +0200273 name = "build_failure",
274 body = io.read_file("luci-notify/email-templates/build_failure.template"),
Oleh Prypin705b6a62019-04-03 23:10:51 +0200275 ),
Oleh Prypin71d17422019-03-28 08:43:16 +0100276)
277
278luci.notifier(
279 name = "cron_notifier",
Jeremy Leconte67a904e2020-07-08 11:48:18 +0200280 on_new_status = ["FAILURE", "INFRA_FAILURE"],
Mirko Bonadei450e9b72020-07-10 19:19:22 +0000281 notify_emails = ["webrtc-troopers-robots@google.com"],
Oleh Prypin705b6a62019-04-03 23:10:51 +0200282 template = luci.notifier_template(
283 name = "cron",
284 body = io.read_file("luci-notify/email-templates/cron.template"),
285 ),
Oleh Prypin71d17422019-03-28 08:43:16 +0100286)
287
Jeremy Leconte67a904e2020-07-08 11:48:18 +0200288luci.notifier(
Mirko Bonadei875a27a2020-07-11 15:04:58 +0200289 name = "infra_failure_notifier",
Jeremy Leconte67a904e2020-07-08 11:48:18 +0200290 on_new_status = ["INFRA_FAILURE"],
Mirko Bonadei450e9b72020-07-10 19:19:22 +0000291 notify_emails = ["webrtc-troopers-robots@google.com"],
Jeremy Leconte67a904e2020-07-08 11:48:18 +0200292 template = luci.notifier_template(
Mirko Bonadei875a27a2020-07-11 15:04:58 +0200293 name = "infra_failure",
294 body = io.read_file("luci-notify/email-templates/infra_failure.template"),
Jeremy Leconte67a904e2020-07-08 11:48:18 +0200295 ),
296)
297
Owen Rodley6b721ba2020-05-26 10:04:20 +1000298# Tree closer definitions:
299
300luci.tree_closer(
301 name = "webrtc_tree_closer",
302 tree_status_host = "webrtc-status.appspot.com",
Owen Rodley6b721ba2020-05-26 10:04:20 +1000303 # TODO: These step filters are copied verbatim from Gatekeeper, for testing
304 # that LUCI-Notify would take the exact same actions. Once we've switched
305 # over, this should be updated - several of these steps don't exist in
306 # WebRTC recipes.
307 failed_step_regexp = [
308 "bot_update",
309 "compile",
310 "gclient runhooks",
311 "runhooks",
312 "update",
313 "extract build",
314 "cleanup_temp",
315 "taskkill",
316 "compile",
317 "gn",
318 ],
319 failed_step_regexp_exclude = ".*\\(experimental\\).*",
320)
321
Oleh Prypin1a0593f2019-03-11 09:43:28 +0100322# Recipe definitions:
323
324def recipe(recipe, pkg = "infra/recipe_bundles/chromium.googlesource.com/chromium/tools/build"):
325 return luci.recipe(
326 name = recipe.split("/")[-1],
327 cipd_package = pkg,
328 cipd_version = "refs/heads/master",
329 recipe = recipe,
330 )
331
332recipe("chromium_trybot")
333recipe("run_presubmit")
334recipe("webrtc/auto_roll_webrtc_deps")
335recipe("webrtc/ios")
336recipe("webrtc/ios_api_framework")
337recipe("webrtc/libfuzzer")
338recipe("webrtc/more_configs")
Oleh Prypin1a0593f2019-03-11 09:43:28 +0100339recipe("webrtc/standalone")
Mirko Bonadei54bbd1c2020-12-14 15:54:46 +0100340recipe("webrtc/update_webrtc_binary_version")
Jeff Yoonf421c682020-12-17 00:16:22 -0800341recipe("lkgr_finder", pkg = "infra/recipe_bundles/chromium.googlesource.com/chromium/tools/build")
Oleh Prypin1a0593f2019-03-11 09:43:28 +0100342
343# Console definitions:
344
345luci.console_view(name = "ci", title = "Main", repo = WEBRTC_GIT, header = "console-header.textpb")
346luci.console_view(name = "perf", title = "Perf", repo = WEBRTC_GIT, header = "console-header.textpb")
347luci.list_view(name = "cron", title = "Cron")
348luci.console_view(name = "fyi", title = "FYI", repo = WEBRTC_GIT, header = "console-header.textpb")
349luci.list_view(name = "try", title = "Tryserver")
350
351def add_milo(builder, views):
352 """Add Milo console entries for the builder.
353
354 Args:
355 builder: builder name (str).
356 views: dict where keys are names of consoles and values are either a
357 category for the console (str, pipe-separated) or True, which means
358 adding to a list view rather than a console.
359 """
360 for view_name, category in views.items():
361 if category == None:
362 continue
363 elif type(category) == "string":
364 category, _, short_name = category.rpartition("|")
365 luci.console_view_entry(
366 console_view = view_name,
367 builder = builder,
368 category = category or None,
369 short_name = short_name or None,
370 )
371 elif category == True:
372 luci.list_view_entry(
373 list_view = view_name,
374 builder = builder,
375 )
376 else:
377 fail("Unexpected value for category: %r" % category)
378
Oleh Prypin8f0dc312019-05-31 15:54:35 +0200379lkgr_builders = {}
380
Oleh Prypin1a0593f2019-03-11 09:43:28 +0100381# Builder-defining functions:
382
Artem Titarenkof6588b72019-11-14 14:28:11 +0100383def webrtc_builder(
384 name,
385 recipe = "standalone",
386 dimensions = {},
Mirko Bonadei825f9c22020-07-01 11:52:39 +0200387 properties = {},
Artem Titarenkof6588b72019-11-14 14:28:11 +0100388 priority = 30,
389 execution_timeout = 2 * time.hour,
Mirko Bonadeib7ef4602020-07-01 13:28:26 +0200390 goma_jobs = None,
Artem Titarenkof6588b72019-11-14 14:28:11 +0100391 **kwargs):
Mirko Bonadeib7ef4602020-07-01 13:28:26 +0200392 """WebRTC specific wrapper around luci.builder.
393
394 Args:
395 name: builder name (str).
396 recipe: string with the name of the recipe to run.
397 dimensions: dict of Swarming dimensions (strings) to search machines by.
398 properties: dict of properties to pass to the recipe (on top of the default ones).
399 priority: int [1-255] or None, indicating swarming task priority, lower is
400 more important. If None, defer the decision to Buildbucket service.
401 execution_timeout: int or None, how long to wait for a running build to finish before
402 forcefully aborting it and marking the build as timed out. If None,
403 defer the decision to Buildbucket service.
404 goma_jobs: int or None, number of jobs to be used by the builder. If None, defer the
405 decition to the goma module.
406 **kwargs: Pass on to webrtc_builder / luci.builder.
407 Returns:
408 A luci.builder.
409 """
Oleh Prypin1a0593f2019-03-11 09:43:28 +0100410 dimensions = merge_dicts({"cpu": "x86-64"}, dimensions)
411
Mirko Bonadeib7ef4602020-07-01 13:28:26 +0200412 if goma_jobs != None:
413 goma_additional_params = {"$build/goma": {"jobs": goma_jobs}}
414 properties = merge_dicts(properties, goma_additional_params)
Ye Kuang8df20492020-10-15 14:54:17 +0900415 properties = merge_dicts(properties, {
416 "$recipe_engine/isolated": {
417 "server": "https://isolateserver.appspot.com",
418 },
419 })
Oleh Prypin1a0593f2019-03-11 09:43:28 +0100420 return luci.builder(
421 name = name,
Oleh Prypin705b6a62019-04-03 23:10:51 +0200422 executable = recipe,
Oleh Prypin1a0593f2019-03-11 09:43:28 +0100423 dimensions = {k: v for k, v in dimensions.items() if v != None},
Mirko Bonadeib7ef4602020-07-01 13:28:26 +0200424 properties = properties,
Artem Titarenkof6588b72019-11-14 14:28:11 +0100425 execution_timeout = execution_timeout,
Oleh Prypin1a0593f2019-03-11 09:43:28 +0100426 priority = priority,
427 build_numbers = True,
428 swarming_tags = ["vpython:native-python-wrapper"],
429 **kwargs
430 )
431
432def ci_builder(
433 name,
434 ci_cat,
435 perf_cat = None,
436 fyi_cat = None,
437 properties = {},
438 dimensions = {},
439 prioritized = False,
Oleh Prypinf5432c52019-03-19 15:10:37 +0100440 enabled = True,
Oleh Prypin1a0593f2019-03-11 09:43:28 +0100441 **kwargs):
Oleh Prypine5677672019-04-25 12:21:35 +0200442 """Add a post-submit builder.
443
444 Args:
445 name: builder name (str).
446 ci_cat: the category + name for the /ci/ console, or None to omit from the console.
447 perf_cat: the category + name for the /perf/ console, or None to omit from the console.
448 fyi_cat: the category + name for the /fyi/ console, or None to omit from the console.
449 properties: dict of properties to pass to the recipe (on top of the default ones).
450 dimensions: dict of Swarming dimensions (strings) to search machines by.
451 prioritized: True to make this builder have a higher priority and never batch builds.
452 enabled: False to exclude this builder from consoles and failure notifications.
453 **kwargs: Pass on to webrtc_builder / luci.builder.
454 Returns:
455 A luci.builder.
456
457 Notifications are also disabled if a builder is not on either of /ci/ or /perf/ consoles.
458 """
Oleh Prypin1a0593f2019-03-11 09:43:28 +0100459 if prioritized:
460 kwargs["triggering_policy"] = scheduler.greedy_batching(
461 max_batch_size = 1,
462 max_concurrent_invocations = 3,
463 )
464 kwargs["priority"] = 29
465
Oleh Prypinf5432c52019-03-19 15:10:37 +0100466 if enabled:
467 add_milo(name, {"ci": ci_cat, "perf": perf_cat, "fyi": fyi_cat})
Oleh Prypin8f0dc312019-05-31 15:54:35 +0200468 if ci_cat:
469 lkgr_builders[name] = True
Oleh Prypin1a0593f2019-03-11 09:43:28 +0100470 return webrtc_builder(
471 name = name,
Garrett Beaty4a106ce2020-09-09 14:51:23 -0700472 properties = merge_dicts({"builder_group": "client.webrtc"}, properties),
Oleh Prypin1a0593f2019-03-11 09:43:28 +0100473 dimensions = merge_dicts({"pool": "luci.webrtc.ci"}, dimensions),
474 bucket = "ci",
475 service_account = "webrtc-ci-builder@chops-service-accounts.iam.gserviceaccount.com",
Oleh Prypinf5432c52019-03-19 15:10:37 +0100476 triggered_by = ["webrtc-gitiles-trigger-master"] if enabled else None,
Oleh Prypin71d17422019-03-28 08:43:16 +0100477 repo = WEBRTC_GIT,
Mirko Bonadei875a27a2020-07-11 15:04:58 +0200478 notifies = ["post_submit_failure_notifier", "webrtc_tree_closer", "infra_failure_notifier"] if enabled and (ci_cat or perf_cat) else None,
Oleh Prypin1a0593f2019-03-11 09:43:28 +0100479 **kwargs
480 )
481
482def try_builder(
483 name,
484 try_cat = True,
485 fyi_cat = None,
486 properties = {},
487 dimensions = {},
488 cq = {},
Oleh Prypin7d1cabe2019-03-14 15:10:30 +0100489 branch_cq = True,
Oleh Prypin1a0593f2019-03-11 09:43:28 +0100490 **kwargs):
Oleh Prypine5677672019-04-25 12:21:35 +0200491 """Add a pre-submit builder.
492
493 Args:
494 name: builder name (str).
495 try_cat: boolean, whether to include this builder in the /try/ console. See also: `add_milo`.
496 fyi_cat: the category + name for the /fyi/ console, or None to omit from the console.
497 properties: dict of properties to pass to the recipe (on top of the default ones).
498 dimensions: dict of Swarming dimensions (strings) to search machines by.
499 cq: None to exclude this from all commit queues, or a dict of kwargs for cq_tryjob_verifier.
Oleh Prypin7d1cabe2019-03-14 15:10:30 +0100500 branch_cq: False to exclude this builder just from the release-branch CQ.
Oleh Prypine5677672019-04-25 12:21:35 +0200501 **kwargs: Pass on to webrtc_builder / luci.builder.
502 Returns:
503 A luci.builder.
504 """
Oleh Prypin1a0593f2019-03-11 09:43:28 +0100505 add_milo(name, {"try": try_cat, "fyi": fyi_cat})
506 if cq != None:
507 luci.cq_tryjob_verifier(
508 builder = name,
509 cq_group = "cq",
510 **cq
511 )
Oleh Prypin7d1cabe2019-03-14 15:10:30 +0100512 if branch_cq:
513 luci.cq_tryjob_verifier(
514 builder = name,
515 cq_group = "cq_branch",
516 **cq
517 )
Oleh Prypin1a0593f2019-03-11 09:43:28 +0100518
519 return webrtc_builder(
520 name = name,
Garrett Beaty4a106ce2020-09-09 14:51:23 -0700521 properties = merge_dicts({"builder_group": "tryserver.webrtc"}, properties),
Oleh Prypin1a0593f2019-03-11 09:43:28 +0100522 dimensions = merge_dicts({"pool": "luci.webrtc.try"}, dimensions),
523 bucket = "try",
524 service_account = "webrtc-try-builder@chops-service-accounts.iam.gserviceaccount.com",
Mirko Bonadei875a27a2020-07-11 15:04:58 +0200525 notifies = ["infra_failure_notifier"],
Oleh Prypin1a0593f2019-03-11 09:43:28 +0100526 **kwargs
527 )
528
529def perf_builder(
530 name,
531 perf_cat,
532 recipe = "standalone",
533 properties = {},
534 dimensions = {},
535 **kwargs):
536 add_milo(name, {"perf": perf_cat})
537 return webrtc_builder(
538 name = name,
539 recipe = recipe,
Garrett Beaty4a106ce2020-09-09 14:51:23 -0700540 properties = merge_dicts({"builder_group": "client.webrtc.perf"}, properties),
Oleh Prypin1a0593f2019-03-11 09:43:28 +0100541 dimensions = merge_dicts({"pool": "luci.webrtc.perf", "os": "Linux", "cpu": None}, dimensions),
542 bucket = "perf",
543 service_account = "webrtc-ci-builder@chops-service-accounts.iam.gserviceaccount.com",
544 # log_base of 1.7 means:
545 # when there are P pending builds, LUCI will batch the first B builds.
546 # P: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 ...
547 # B: 1 1 2 2 3 3 3 3 4 4 4 4 4 4 5 ...
Jeremy Leconteea2016b2020-07-01 09:47:22 +0200548 triggering_policy = scheduler.logarithmic_batching(log_base = 1.7),
Artem Titarenkof6588b72019-11-14 14:28:11 +0100549 execution_timeout = 3 * time.hour,
Mirko Bonadei875a27a2020-07-11 15:04:58 +0200550 notifies = ["post_submit_failure_notifier", "infra_failure_notifier"],
Oleh Prypin1a0593f2019-03-11 09:43:28 +0100551 **kwargs
552 )
553
Mirko Bonadei12643772020-03-27 13:16:35 +0100554def android_perf_builder(
555 name,
556 perf_cat,
557 recipe = "standalone",
558 properties = {},
559 dimensions = {},
560 **kwargs):
561 return perf_builder(
562 name = name,
563 perf_cat = perf_cat,
564 recipe = recipe,
565 properties = merge_dicts(GOMA_BACKEND_WEBRTC_RBE_PROD, properties),
566 dimensions = dimensions,
567 **kwargs
568 )
569
570def linux_perf_builder(
571 name,
572 perf_cat,
573 recipe = "standalone",
574 properties = {},
575 dimensions = {},
576 **kwargs):
577 return perf_builder(
578 name = name,
579 perf_cat = perf_cat,
580 recipe = recipe,
581 properties = merge_dicts(GOMA_BACKEND_WEBRTC_RBE_PROD, properties),
582 dimensions = dimensions,
583 **kwargs
584 )
585
586def mac_perf_builder(
587 name,
588 perf_cat,
589 recipe = "standalone",
590 properties = {},
591 dimensions = {},
592 **kwargs):
593 return perf_builder(
594 name = name,
595 perf_cat = perf_cat,
596 recipe = recipe,
597 properties = merge_dicts(GOMA_BACKEND_WEBRTC_RBE_PROD, properties),
598 dimensions = dimensions,
599 **kwargs
600 )
601
602def win_perf_builder(
603 name,
604 perf_cat,
605 recipe = "standalone",
606 properties = {},
607 dimensions = {},
608 **kwargs):
609 return perf_builder(
610 name = name,
611 perf_cat = perf_cat,
612 recipe = recipe,
613 properties = merge_dicts(GOMA_BACKEND_RBE_ATS_PROD, properties),
614 dimensions = dimensions,
615 **kwargs
616 )
617
Mirko Bonadei54bbd1c2020-12-14 15:54:46 +0100618def cron_builder(name, dimensions = {}, service_account = None, **kwargs):
619 if service_account == None:
620 service_account = "chromium-webrtc-autoroll@webrtc-ci.iam.gserviceaccount.com"
Oleh Prypin1a0593f2019-03-11 09:43:28 +0100621 add_milo(name, {"cron": True})
622 return webrtc_builder(
623 name = name,
624 dimensions = merge_dicts({"pool": "luci.webrtc.cron", "os": "Linux"}, dimensions),
625 bucket = "cron",
Mirko Bonadei54bbd1c2020-12-14 15:54:46 +0100626 service_account = service_account,
Oleh Prypin71d17422019-03-28 08:43:16 +0100627 notifies = ["cron_notifier"],
Oleh Prypin1a0593f2019-03-11 09:43:28 +0100628 **kwargs
629 )
630
631# Helpers:
632
633def merge_dicts(a, b):
634 """Return the result of merging two dicts.
635
636 If matching values are both dicts or both lists, they will be merged (non-recursively).
637
638 Args:
639 a: first dict.
640 b: second dict (takes priority).
641 Returns:
642 Merged dict.
643 """
644 a = dict(a)
645 for k, bv in b.items():
646 av = a.get(k)
647 if type(av) == "dict" and type(bv) == "dict":
648 a[k] = dict(av)
649 a[k].update(bv)
650 elif type(av) == "list" and type(bv) == "list":
651 a[k] = av + bv
652 else:
653 a[k] = bv
654 return a
655
656def normal_builder_factory(**common_kwargs):
657 def builder(*args, **kwargs):
658 return ci_builder(*args, **merge_dicts(common_kwargs, kwargs))
659
660 def try_job(*args, **kwargs):
661 return try_builder(*args, **merge_dicts(common_kwargs, kwargs))
662
663 return builder, try_job
664
665# Mixins:
666
667linux_builder, linux_try_job = normal_builder_factory(
668 dimensions = {"os": "Linux", "inside_docker": "0"},
Mirko Bonadei32ca4862020-03-11 10:39:45 +0100669 properties = GOMA_BACKEND_WEBRTC_RBE_PROD,
Oleh Prypin1a0593f2019-03-11 09:43:28 +0100670)
671
672android_builder, android_try_job = normal_builder_factory(
673 dimensions = {"os": "Linux"},
Mirko Bonadei32ca4862020-03-11 10:39:45 +0100674 properties = GOMA_BACKEND_WEBRTC_RBE_PROD,
Oleh Prypin1a0593f2019-03-11 09:43:28 +0100675)
676
Mirko Bonadei5aafd472021-04-21 10:42:00 +0200677def win_builder(*args, **kwargs):
678 return ci_builder(
679 *args,
680 **merge_dicts({
681 "dimensions": {"os": "Windows"},
682 "properties": GOMA_BACKEND_RBE_ATS_PROD,
683 }, kwargs)
684 )
685
686def win_try_job(*args, **kwargs):
687 return try_builder(
688 *args,
689 **merge_dicts({
690 "dimensions": {"os": "Windows"},
691 "properties": GOMA_BACKEND_RBE_NO_ATS_PROD,
692 }, kwargs)
693 )
Oleh Prypin1a0593f2019-03-11 09:43:28 +0100694
695mac_builder, mac_try_job = normal_builder_factory(
696 dimensions = {"os": "Mac"},
Mirko Bonadei32ca4862020-03-11 10:39:45 +0100697 properties = GOMA_BACKEND_WEBRTC_RBE_PROD,
Oleh Prypin1a0593f2019-03-11 09:43:28 +0100698)
699
700ios_builder, ios_try_job = normal_builder_factory(
Mirko Bonadei8096c232020-08-26 21:44:42 +0200701 dimensions = {"os": "Mac-10.15"},
Oleh Prypin1a0593f2019-03-11 09:43:28 +0100702 recipe = "ios",
Mirko Bonadei84360ca2020-03-12 08:35:48 +0100703 properties = GOMA_BACKEND_WEBRTC_IOS_RBE_PROD,
704 caches = [swarming.cache("osx_sdk")],
705)
706
707# Some iOS builders don't use goma because they build using
708# `use_xcode_clang=true` which is not supported by goma.
709# https://ci.chromium.org/p/webrtc/builders/ci/iOS%20API%20Framework%20Builder
710# https://ci.chromium.org/p/webrtc/builders/try/ios_api_framework
711ios_builder_no_goma, ios_try_job_no_goma = normal_builder_factory(
Mirko Bonadei8096c232020-08-26 21:44:42 +0200712 dimensions = {"os": "Mac-10.15"},
Mirko Bonadei84360ca2020-03-12 08:35:48 +0100713 recipe = "ios",
Artem Titov1d47d312020-11-03 14:45:52 +0100714 properties = {"$depot_tools/osx_sdk": {"sdk_version": "12a7209"}},
Oleh Prypin1a0593f2019-03-11 09:43:28 +0100715 caches = [swarming.cache("osx_sdk")],
716)
717
718# Actual builder configuration:
719
720android_builder("Android32 (M Nexus5X)(dbg)", "Android|arm|dbg")
721android_try_job("android_compile_arm_dbg", cq = None)
722android_try_job("android_arm_dbg")
723android_builder("Android32 (M Nexus5X)", "Android|arm|rel")
724android_try_job("android_arm_rel")
725android_builder("Android32 Builder arm", "Android|arm|size", perf_cat = "Android|arm|Builder|", prioritized = True)
726android_try_job("android_compile_arm_rel")
Mirko Bonadei86b4f2d2020-07-08 14:24:48 +0200727android_perf_builder("Perf Android32 (M Nexus5)", "Android|arm|Tester|M Nexus5", triggered_by = ["Android32 Builder arm"])
Mirko Bonadei12643772020-03-27 13:16:35 +0100728android_perf_builder("Perf Android32 (M AOSP Nexus6)", "Android|arm|Tester|M AOSP Nexus6", triggered_by = ["Android32 Builder arm"])
Oleh Prypin1a0593f2019-03-11 09:43:28 +0100729android_try_job("android_compile_arm64_dbg", cq = None)
730android_try_job("android_arm64_dbg", cq = None)
731android_builder("Android64 (M Nexus5X)", "Android|arm64|rel")
732android_try_job("android_arm64_rel")
733android_builder("Android64 Builder arm64", "Android|arm64|size", perf_cat = "Android|arm64|Builder|", prioritized = True)
Mirko Bonadei12643772020-03-27 13:16:35 +0100734android_perf_builder("Perf Android64 (M Nexus5X)", "Android|arm64|Tester|M Nexus5X", triggered_by = ["Android64 Builder arm64"])
735android_perf_builder("Perf Android64 (O Pixel2)", "Android|arm64|Tester|O Pixel2", triggered_by = ["Android64 Builder arm64"])
Oleh Prypin1a0593f2019-03-11 09:43:28 +0100736android_try_job("android_compile_arm64_rel")
Oleh Prypin1a0593f2019-03-11 09:43:28 +0100737android_builder("Android64 Builder x64 (dbg)", "Android|x64|dbg")
738android_try_job("android_compile_x64_dbg")
739android_try_job("android_compile_x64_rel", cq = None)
740android_builder("Android32 Builder x86 (dbg)", "Android|x86|dbg")
741android_try_job("android_compile_x86_dbg")
742android_builder("Android32 Builder x86", "Android|x86|rel")
743android_try_job("android_compile_x86_rel")
744android_builder("Android32 (more configs)", "Android|arm|more", recipe = "more_configs")
745android_try_job("android_arm_more_configs", recipe = "more_configs")
Oleh Prypin7d1cabe2019-03-14 15:10:30 +0100746android_try_job("android_chromium_compile", recipe = "chromium_trybot", branch_cq = False)
Oleh Prypin1a0593f2019-03-11 09:43:28 +0100747
748ios_builder("iOS32 Debug", "iOS|arm|dbg")
749ios_try_job("ios_compile_arm_dbg")
750ios_builder("iOS32 Release", "iOS|arm|rel")
751ios_try_job("ios_compile_arm_rel")
752ios_builder("iOS64 Debug", "iOS|arm64|dbg")
753ios_try_job("ios_compile_arm64_dbg")
754ios_builder("iOS64 Release", "iOS|arm64|rel")
755ios_try_job("ios_compile_arm64_rel")
Artem Titov1d47d312020-11-03 14:45:52 +0100756ios_builder("iOS64 Sim Debug (iOS 14.0)", "iOS|x64|14")
Mirko Bonadeif1e0c0b2021-01-12 13:05:52 +0100757ios_try_job("ios_sim_x64_dbg_ios14", cq = None)
Artem Titov1d47d312020-11-03 14:45:52 +0100758ios_builder("iOS64 Sim Debug (iOS 13)", "iOS|x64|13")
Artem Titove973dd62020-11-03 18:05:21 +0100759ios_try_job("ios_sim_x64_dbg_ios13", cq = None)
Oleh Prypin1a0593f2019-03-11 09:43:28 +0100760ios_builder("iOS64 Sim Debug (iOS 12)", "iOS|x64|12")
Andrey Logvin34ac6592021-02-04 13:03:49 +0000761
762# TODO(crbug.com/1174112): return ios_sim_x64_dbg_ios12 to cq.
763ios_try_job("ios_sim_x64_dbg_ios12", cq = None)
Mirko Bonadei84360ca2020-03-12 08:35:48 +0100764ios_builder_no_goma("iOS API Framework Builder", "iOS|fat|size", recipe = "ios_api_framework", prioritized = True)
Jeremy Leconteea2016b2020-07-01 09:47:22 +0200765ios_try_job_no_goma("ios_api_framework", recipe = "ios_api_framework", cq = None)
Oleh Prypin1a0593f2019-03-11 09:43:28 +0100766
767linux_builder("Linux32 Debug", "Linux|x86|dbg")
768linux_try_job("linux_x86_dbg")
769linux_builder("Linux32 Release", "Linux|x86|rel")
770linux_try_job("linux_x86_rel")
771linux_builder("Linux64 Debug", "Linux|x64|dbg")
772linux_try_job("linux_dbg", cq = None)
773linux_try_job("linux_compile_dbg")
774linux_builder("Linux64 Release", "Linux|x64|rel")
775linux_try_job("linux_rel")
776linux_builder("Linux64 Builder", "Linux|x64|size", perf_cat = "Linux|x64|Builder|", prioritized = True)
777linux_try_job("linux_compile_rel")
Mirko Bonadei12643772020-03-27 13:16:35 +0100778linux_perf_builder("Perf Linux Trusty", "Linux|x64|Tester|Trusty", triggered_by = ["Linux64 Builder"])
779linux_perf_builder("Perf Linux Xenial", None, triggered_by = ["Linux64 Builder"])
Oleh Prypin1a0593f2019-03-11 09:43:28 +0100780linux_builder("Linux32 Debug (ARM)", "Linux|arm|dbg")
781linux_try_job("linux_compile_arm_dbg")
782linux_builder("Linux32 Release (ARM)", "Linux|arm|rel")
783linux_try_job("linux_compile_arm_rel")
784linux_builder("Linux64 Debug (ARM)", "Linux|arm64|dbg")
785linux_try_job("linux_compile_arm64_dbg")
786linux_builder("Linux64 Release (ARM)", "Linux|arm64|rel")
787linux_try_job("linux_compile_arm64_rel")
Oleh Prypin1a0593f2019-03-11 09:43:28 +0100788linux_builder("Linux Asan", "Linux|x64|asan")
789linux_try_job("linux_asan")
790linux_builder("Linux MSan", "Linux|x64|msan")
791linux_try_job("linux_msan")
792linux_builder("Linux Tsan v2", "Linux|x64|tsan")
793linux_try_job("linux_tsan2")
794linux_builder("Linux UBSan", "Linux|x64|ubsan")
795linux_try_job("linux_ubsan")
796linux_builder("Linux UBSan vptr", "Linux|x64|ubsan")
797linux_try_job("linux_ubsan_vptr")
798linux_builder("Linux64 Release (Libfuzzer)", "Linux|x64|fuzz", recipe = "libfuzzer")
799linux_try_job("linux_libfuzzer_rel", recipe = "libfuzzer")
800linux_builder("Linux (more configs)", "Linux|x64|more", recipe = "more_configs")
801linux_try_job("linux_more_configs", recipe = "more_configs")
Oleh Prypin7d1cabe2019-03-14 15:10:30 +0100802linux_try_job("linux_chromium_compile", recipe = "chromium_trybot", branch_cq = False)
Mirko Bonadei40de50f2019-11-07 11:23:47 +0100803linux_try_job("linux_chromium_compile_dbg", recipe = "chromium_trybot", branch_cq = False)
Oleh Prypin1a0593f2019-03-11 09:43:28 +0100804
805mac_builder("Mac64 Debug", "Mac|x64|dbg")
806mac_try_job("mac_dbg", cq = None)
807mac_try_job("mac_compile_dbg")
808mac_builder("Mac64 Release", "Mac|x64|rel")
Andrey Logvina9501222021-04-27 18:08:39 +0000809mac_try_job("mac_rel")
Oleh Prypin1a0593f2019-03-11 09:43:28 +0100810mac_try_job("mac_compile_rel", cq = None)
811mac_builder("Mac64 Builder", ci_cat = None, perf_cat = "Mac|x64|Builder|")
Mirko Bonadei12643772020-03-27 13:16:35 +0100812mac_perf_builder("Perf Mac 10.11", "Mac|x64|Tester|10.11", triggered_by = ["Mac64 Builder"])
Oleh Prypin1a0593f2019-03-11 09:43:28 +0100813mac_builder("Mac Asan", "Mac|x64|asan")
Andrey Logvina9501222021-04-27 18:08:39 +0000814mac_try_job("mac_asan")
Oleh Prypin7d1cabe2019-03-14 15:10:30 +0100815mac_try_job("mac_chromium_compile", recipe = "chromium_trybot", dimensions = {"cores": "8"}, branch_cq = False)
Oleh Prypin1a0593f2019-03-11 09:43:28 +0100816
817win_builder("Win32 Debug", "Win MSVC|x86|dbg")
818win_try_job("win_x86_msvc_dbg")
819win_try_job("win_compile_x86_msvc_dbg", cq = None)
Oleh Prypin63041b82019-03-19 22:56:01 +0000820win_builder("Win32 Release", "Win MSVC|x86|rel")
821win_try_job("win_x86_msvc_rel")
Oleh Prypin1a0593f2019-03-11 09:43:28 +0100822win_try_job("win_compile_x86_msvc_rel", cq = None)
823win_builder("Win64 Debug", "Win MSVC|x64|dbg")
824win_try_job("win_x64_msvc_dbg")
825win_try_job("win_compile_x64_msvc_dbg", cq = None)
826win_builder("Win64 Release", "Win MSVC|x64|rel")
827win_try_job("win_x64_msvc_rel")
828win_try_job("win_compile_x64_msvc_rel", cq = None)
829win_builder("Win32 Debug (Clang)", "Win Clang|x86|dbg")
830win_try_job("win_x86_clang_dbg", cq = None)
831win_try_job("win_compile_x86_clang_dbg")
832win_builder("Win32 Release (Clang)", "Win Clang|x86|rel")
833win_try_job("win_x86_clang_rel")
834win_try_job("win_compile_x86_clang_rel", cq = None)
835win_builder("Win32 Builder (Clang)", ci_cat = None, perf_cat = "Win|x86|Builder|")
Mirko Bonadei12643772020-03-27 13:16:35 +0100836win_perf_builder("Perf Win7", "Win|x86|Tester|7", triggered_by = ["Win32 Builder (Clang)"])
Oleh Prypin1a0593f2019-03-11 09:43:28 +0100837win_builder("Win64 Debug (Clang)", "Win Clang|x64|dbg")
838win_try_job("win_x64_clang_dbg", cq = None)
839win_try_job("win_x64_clang_dbg_win8", cq = None)
840win_try_job("win_x64_clang_dbg_win10", cq = None)
841win_try_job("win_compile_x64_clang_dbg")
842win_builder("Win64 Release (Clang)", "Win Clang|x64|rel")
843win_try_job("win_x64_clang_rel", cq = None)
844win_try_job("win_compile_x64_clang_rel")
Mirko Bonadeiafbe33d2019-05-31 09:27:54 +0200845win_builder("Win64 ASan", "Win Clang|x64|asan")
Oleh Prypin1a0593f2019-03-11 09:43:28 +0100846win_try_job("win_asan")
847win_builder("Win64 UWP", ci_cat = None, fyi_cat = "")
848win_try_job("win_x64_uwp", cq = None, try_cat = None, fyi_cat = "")
849win_builder("Win (more configs)", "Win Clang|x86|more", recipe = "more_configs")
850win_try_job("win_x86_more_configs", recipe = "more_configs")
Mirko Bonadei825f9c22020-07-01 11:52:39 +0200851win_try_job("win_chromium_compile", recipe = "chromium_trybot", branch_cq = False, goma_jobs = 150)
852win_try_job("win_chromium_compile_dbg", recipe = "chromium_trybot", branch_cq = False, goma_jobs = 150)
Oleh Prypin1a0593f2019-03-11 09:43:28 +0100853
854linux_try_job(
855 "presubmit",
856 recipe = "run_presubmit",
857 properties = {"repo_name": "webrtc", "runhooks": True},
858 priority = 28,
859 cq = {"disable_reuse": True},
860)
Oleh Prypin1a0593f2019-03-11 09:43:28 +0100861
862cron_builder(
863 "Auto-roll - WebRTC DEPS",
864 recipe = "auto_roll_webrtc_deps",
Oleh Prypindc68a722019-06-25 10:43:13 +0200865 schedule = "0 */2 * * *", # Every 2 hours.
Oleh Prypin1a0593f2019-03-11 09:43:28 +0100866)
Oleh Prypin8f0dc312019-05-31 15:54:35 +0200867
Mirko Bonadei54bbd1c2020-12-14 15:54:46 +0100868cron_builder(
869 "WebRTC version update",
870 recipe = "update_webrtc_binary_version",
871 schedule = "0 4 * * *", # Every day at 4am.
872 service_account = "webrtc-version-updater@webrtc-ci.iam.gserviceaccount.com",
873)
874
Mirko Bonadeiab3ff262020-12-18 10:17:43 +0100875skipped_lkgr_bots = [
876 "iOS64 Sim Debug (iOS 14.0)",
877 "iOS64 Sim Debug (iOS 13)",
878 "iOS64 Sim Debug (iOS 12)",
879]
880
Oleh Prypin8f0dc312019-05-31 15:54:35 +0200881lkgr_config = {
882 "project": "webrtc",
883 "source_url": WEBRTC_GIT,
884 "status_url": "https://webrtc-status.appspot.com",
885 "allowed_lag": 300, # hours
886 "allowed_gap": 12, # commits behind
Mirko Bonadei450e9b72020-07-10 19:19:22 +0000887 "error_recipients": "webrtc-troopers-robots@google.com",
Michael Achenbach09dd7dc2019-07-26 15:26:11 +0200888 "buckets": {
889 "webrtc/ci": {
890 # bucket alias: luci.webrtc.ci
Mirko Bonadeiab3ff262020-12-18 10:17:43 +0100891 "builders": [
892 b
893 for b in sorted(lkgr_builders)
894 if b not in skipped_lkgr_bots
895 ],
Oleh Prypin8f0dc312019-05-31 15:54:35 +0200896 },
Michael Achenbach09dd7dc2019-07-26 15:26:11 +0200897 "chromium/webrtc.fyi": {
898 # bucket alias: luci.chromium.webrtc.fyi
Oleh Prypin8f0dc312019-05-31 15:54:35 +0200899 "builders": [
900 "WebRTC Chromium FYI Android Builder (dbg)",
901 "WebRTC Chromium FYI Android Builder ARM64 (dbg)",
902 "WebRTC Chromium FYI Android Builder",
Mirko Bonadei04fe32f2020-05-01 00:45:58 +0200903 "WebRTC Chromium FYI Android Tests (dbg) (L Nexus5)",
Oleh Prypin8f0dc312019-05-31 15:54:35 +0200904 "WebRTC Chromium FYI Android Tests (dbg) (M Nexus5X)",
905 "WebRTC Chromium FYI Linux Builder (dbg)",
906 "WebRTC Chromium FYI Linux Builder",
907 "WebRTC Chromium FYI Linux Tester",
908 "WebRTC Chromium FYI Mac Builder (dbg)",
909 "WebRTC Chromium FYI Mac Builder",
910 "WebRTC Chromium FYI Mac Tester",
911 "WebRTC Chromium FYI Win Builder (dbg)",
912 "WebRTC Chromium FYI Win Builder",
913 "WebRTC Chromium FYI Win10 Tester",
Mirko Bonadeif1ef9292021-03-25 18:07:48 +0100914 # TODO(bugs.webrtc.org/12616): Re-enable when the gclient
915 # runhooks step is fixed or skipped.
916 # "WebRTC Chromium FYI Win7 Tester",
Oleh Prypin8f0dc312019-05-31 15:54:35 +0200917 "WebRTC Chromium FYI Win8 Tester",
Mirko Bonadei2f05cfe2020-11-25 10:41:58 +0100918 "WebRTC Chromium FYI ios-device",
919 "WebRTC Chromium FYI ios-simulator",
Oleh Prypin8f0dc312019-05-31 15:54:35 +0200920 ],
921 },
922 },
923}
924
Oleh Prypin1a0593f2019-03-11 09:43:28 +0100925cron_builder(
926 "WebRTC lkgr finder",
927 recipe = "lkgr_finder",
Oleh Prypin8f0dc312019-05-31 15:54:35 +0200928 properties = {
929 "project": "webrtc",
930 "repo": WEBRTC_GIT,
931 "ref": "refs/heads/lkgr",
932 "lkgr_status_gs_path": "chromium-webrtc/lkgr-status",
933 "config": lkgr_config,
934 },
Oleh Prypin1a0593f2019-03-11 09:43:28 +0100935 schedule = "*/10 * * * *", # Every 10 minutes.
936)