blob: 4e9fafeca9edb2797157af4834abde7ee277ad8e [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
Andrii Shyshkalov0fc17062021-04-28 16:50:15 +020053# Launch 5% of Builds in "realms-aware mode", crbug.com/1177975.
54luci.builder.defaults.experiments.set({"luci.use_realms": 5})
Andrii Shyshkalov20b21872021-04-28 15:10:53 +020055
Oleh Prypin1a0593f2019-03-11 09:43:28 +010056lucicfg.config(
57 config_dir = ".",
58 tracked_files = [
59 "commit-queue.cfg",
60 "cr-buildbucket.cfg",
61 "luci-logdog.cfg",
62 "luci-milo.cfg",
Oleh Prypin71d17422019-03-28 08:43:16 +010063 "luci-notify.cfg",
Oleh Prypin705b6a62019-04-03 23:10:51 +020064 "luci-notify/**/*",
Oleh Prypin1a0593f2019-03-11 09:43:28 +010065 "luci-scheduler.cfg",
66 "project.cfg",
Andrii Shyshkalov0efa6da2021-04-26 20:40:33 +020067 "realms.cfg",
Oleh Prypin1a0593f2019-03-11 09:43:28 +010068 ],
Jeremy Leconteea2016b2020-07-01 09:47:22 +020069 lint_checks = ["default"],
Oleh Prypin1a0593f2019-03-11 09:43:28 +010070)
71
72luci.project(
73 name = "webrtc",
74 buildbucket = "cr-buildbucket.appspot.com",
75 logdog = "luci-logdog.appspot.com",
76 milo = "luci-milo.appspot.com",
Oleh Prypin71d17422019-03-28 08:43:16 +010077 notify = "luci-notify.appspot.com",
Oleh Prypin1a0593f2019-03-11 09:43:28 +010078 scheduler = "luci-scheduler.appspot.com",
79 swarming = "chromium-swarm.appspot.com",
80 acls = [
81 acl.entry(
82 [acl.BUILDBUCKET_READER, acl.LOGDOG_READER, acl.PROJECT_CONFIGS_READER, acl.SCHEDULER_READER],
83 groups = ["all"],
84 ),
85 acl.entry(acl.LOGDOG_WRITER, groups = ["luci-logdog-chromium-writers"]),
86 acl.entry(acl.SCHEDULER_OWNER, groups = ["project-webrtc-admins"]),
87 ],
Andrii Shyshkalov0efa6da2021-04-26 20:40:33 +020088 bindings = [
89 luci.binding(
90 roles = "role/swarming.poolOwner",
91 groups = "project-webrtc-admins",
92 ),
93 luci.binding(
94 roles = "role/swarming.poolViewer",
95 groups = "all",
96 ),
97 ],
Oleh Prypin1a0593f2019-03-11 09:43:28 +010098)
99
100luci.logdog(
101 gs_bucket = "chromium-luci-logdog",
102)
103
104luci.milo(
105 logo = "https://storage.googleapis.com/chrome-infra/webrtc-logo-vert-retro-255x305.png",
106)
107
Owen Rodleya55c38e2020-06-15 11:16:10 +1000108luci.notify(tree_closing_enabled = True)
109
Oleh Prypin1a0593f2019-03-11 09:43:28 +0100110luci.cq(
111 status_host = "chromium-cq-status.appspot.com",
112 submit_max_burst = 1,
113 submit_burst_delay = 1 * time.minute,
114)
115
116luci.gitiles_poller(
117 name = "webrtc-gitiles-trigger-master",
118 bucket = "ci",
119 repo = WEBRTC_GIT,
120)
121
Andrii Shyshkalov0efa6da2021-04-26 20:40:33 +0200122# Swarming permissions:
123
Andrii Shyshkalovc26aaad2021-04-27 16:47:26 +0200124luci.realm(name = "pools/cron", bindings = [
125 # Unlike WebRTC's own builders, other projects need an explicit grant to use this pool.
126 luci.binding(
127 roles = "role/swarming.poolUser",
128 projects = "libyuv",
129 ),
130])
131
Andrii Shyshkalov0efa6da2021-04-26 20:40:33 +0200132luci.realm(name = "pools/ci")
Andrii Shyshkalovc26aaad2021-04-27 16:47:26 +0200133luci.realm(name = "pools/ci-tests", bindings = [
134 # Allow task service accounts of .ci pool/bucket to trigger tasks here.
135 luci.binding(
136 roles = "role/swarming.poolUser",
137 groups = "project-webrtc-ci-task-accounts",
138 ),
139 # Allow tasks here to use .ci task service accounts.
140 luci.binding(
141 roles = "role/swarming.taskServiceAccount",
142 groups = "project-webrtc-ci-task-accounts",
143 ),
144])
145
Andrii Shyshkalov0efa6da2021-04-26 20:40:33 +0200146luci.realm(name = "pools/try")
Andrii Shyshkalovc26aaad2021-04-27 16:47:26 +0200147luci.realm(name = "pools/try-tests", bindings = [
148 # Allow task service accounts of .try pool/bucket to trigger tasks here.
149 luci.binding(
150 roles = "role/swarming.poolUser",
151 groups = "project-webrtc-try-task-accounts",
152 ),
153 # Allow tasks here to use .try task service accounts.
154 luci.binding(
155 roles = "role/swarming.taskServiceAccount",
156 groups = "project-webrtc-try-task-accounts",
157 ),
158])
Andrii Shyshkalov0efa6da2021-04-26 20:40:33 +0200159
160# Allow admins to use LED & Swarming "Debug" feature on all WebRTC bots.
161luci.binding(
162 realm = "@root",
163 roles = "role/swarming.poolUser",
164 groups = "project-webrtc-admins",
165)
166luci.binding(
167 realm = "@root",
168 roles = "role/swarming.taskTriggerer",
169 groups = "project-webrtc-admins",
170)
171
172# Allow to use LED & Swarming "Debug" feature to a larger group but only on try bots / builders.
173luci.binding(
174 realm = "pools/try",
175 roles = "role/swarming.poolUser",
176 groups = "project-webrtc-led-users",
177)
178luci.binding(
179 realm = "try",
180 roles = "role/swarming.taskTriggerer",
181 groups = "project-webrtc-led-users",
182)
183
Oleh Prypin1a0593f2019-03-11 09:43:28 +0100184# Bucket definitions:
185
186luci.bucket(
187 name = "try",
188 acls = [
189 acl.entry(acl.BUILDBUCKET_TRIGGERER, groups = [
190 "service-account-cq",
191 "project-webrtc-tryjob-access",
192 ]),
193 ],
194)
195
196luci.bucket(
197 name = "ci",
198 acls = [
Oleh Prypinf35939d2019-05-03 20:42:38 +0200199 acl.entry(acl.BUILDBUCKET_TRIGGERER, groups = [
200 "project-webrtc-ci-schedulers",
Oleh Prypin1a0593f2019-03-11 09:43:28 +0100201 ]),
Jeremy Leconte2e25bb52020-07-16 09:38:56 +0200202 acl.entry(acl.BUILDBUCKET_TRIGGERER, groups = [
203 # Allow Pinpoint to trigger builds for bisection
204 "service-account-chromeperf",
205 ]),
Oleh Prypin1a0593f2019-03-11 09:43:28 +0100206 ],
207)
208
209luci.bucket(
210 name = "perf",
211 acls = [
212 acl.entry(acl.BUILDBUCKET_TRIGGERER, users = [
Oleh Prypin1a0593f2019-03-11 09:43:28 +0100213 "webrtc-ci-builder@chops-service-accounts.iam.gserviceaccount.com",
214 ]),
215 ],
216)
217
218luci.bucket(
219 name = "cron",
Oleh Prypin1a0593f2019-03-11 09:43:28 +0100220)
221
222# Commit queue definitions:
223
224luci.cq_group(
225 name = "cq",
226 tree_status_host = "webrtc-status.appspot.com",
Oleh Prypin7d1cabe2019-03-14 15:10:30 +0100227 watch = [cq.refset(repo = WEBRTC_GERRIT, refs = ["refs/heads/master"])],
Oleh Prypin1a0593f2019-03-11 09:43:28 +0100228 acls = [
229 acl.entry(acl.CQ_COMMITTER, groups = ["project-webrtc-committers"]),
230 acl.entry(acl.CQ_DRY_RUNNER, groups = ["project-webrtc-tryjob-access"]),
231 ],
232 retry_config = cq.RETRY_ALL_FAILURES,
Oleh Prypin5416f2d2019-08-02 09:43:15 +0200233 cancel_stale_tryjobs = True,
Oleh Prypin1a0593f2019-03-11 09:43:28 +0100234)
235
236luci.cq_group(
Oleh Prypin7d1cabe2019-03-14 15:10:30 +0100237 name = "cq_branch",
238 watch = [cq.refset(repo = WEBRTC_GERRIT, refs = ["refs/branch-heads/.+"])],
239 acls = [
240 acl.entry(acl.CQ_COMMITTER, groups = ["project-webrtc-committers"]),
241 acl.entry(acl.CQ_DRY_RUNNER, groups = ["project-webrtc-tryjob-access"]),
242 ],
243 retry_config = cq.RETRY_ALL_FAILURES,
Oleh Prypin5416f2d2019-08-02 09:43:15 +0200244 cancel_stale_tryjobs = True,
Oleh Prypin7d1cabe2019-03-14 15:10:30 +0100245)
246
247luci.cq_group(
248 name = "cq_infra",
249 watch = [cq.refset(repo = WEBRTC_GERRIT, refs = ["refs/heads/infra/config"])],
Oleh Prypin1a0593f2019-03-11 09:43:28 +0100250 acls = [
251 acl.entry(acl.CQ_COMMITTER, groups = ["project-webrtc-admins"]),
252 acl.entry(acl.CQ_DRY_RUNNER, groups = ["project-webrtc-tryjob-access"]),
253 ],
254 retry_config = cq.RETRY_ALL_FAILURES,
Oleh Prypin5416f2d2019-08-02 09:43:15 +0200255 cancel_stale_tryjobs = True,
Oleh Prypin1a0593f2019-03-11 09:43:28 +0100256)
257
258luci.cq_tryjob_verifier(
259 builder = "presubmit",
Oleh Prypin7d1cabe2019-03-14 15:10:30 +0100260 cq_group = "cq_infra",
Oleh Prypin1a0593f2019-03-11 09:43:28 +0100261)
262
Oleh Prypine56cd9b2019-05-29 21:14:31 +0200263luci.cq_tryjob_verifier(
264 builder = "webrtc-internal:g3.webrtc-internal.try/internal_compile_lite",
265 owner_whitelist = ["project-webrtc-internal-tryjob-access"],
266 cq_group = "cq",
267)
268
Oleh Prypin71d17422019-03-28 08:43:16 +0100269# Notifier definitions:
270
271luci.notifier(
Mirko Bonadei875a27a2020-07-11 15:04:58 +0200272 name = "post_submit_failure_notifier",
273 on_new_status = ["FAILURE"],
Oleh Prypin71d17422019-03-28 08:43:16 +0100274 notify_emails = ["webrtc-sheriffs-robots@google.com"],
Oleh Prypin705b6a62019-04-03 23:10:51 +0200275 template = luci.notifier_template(
Mirko Bonadei875a27a2020-07-11 15:04:58 +0200276 name = "build_failure",
277 body = io.read_file("luci-notify/email-templates/build_failure.template"),
Oleh Prypin705b6a62019-04-03 23:10:51 +0200278 ),
Oleh Prypin71d17422019-03-28 08:43:16 +0100279)
280
281luci.notifier(
282 name = "cron_notifier",
Jeremy Leconte67a904e2020-07-08 11:48:18 +0200283 on_new_status = ["FAILURE", "INFRA_FAILURE"],
Mirko Bonadei450e9b72020-07-10 19:19:22 +0000284 notify_emails = ["webrtc-troopers-robots@google.com"],
Oleh Prypin705b6a62019-04-03 23:10:51 +0200285 template = luci.notifier_template(
286 name = "cron",
287 body = io.read_file("luci-notify/email-templates/cron.template"),
288 ),
Oleh Prypin71d17422019-03-28 08:43:16 +0100289)
290
Jeremy Leconte67a904e2020-07-08 11:48:18 +0200291luci.notifier(
Mirko Bonadei875a27a2020-07-11 15:04:58 +0200292 name = "infra_failure_notifier",
Jeremy Leconte67a904e2020-07-08 11:48:18 +0200293 on_new_status = ["INFRA_FAILURE"],
Mirko Bonadei450e9b72020-07-10 19:19:22 +0000294 notify_emails = ["webrtc-troopers-robots@google.com"],
Jeremy Leconte67a904e2020-07-08 11:48:18 +0200295 template = luci.notifier_template(
Mirko Bonadei875a27a2020-07-11 15:04:58 +0200296 name = "infra_failure",
297 body = io.read_file("luci-notify/email-templates/infra_failure.template"),
Jeremy Leconte67a904e2020-07-08 11:48:18 +0200298 ),
299)
300
Owen Rodley6b721ba2020-05-26 10:04:20 +1000301# Tree closer definitions:
302
303luci.tree_closer(
304 name = "webrtc_tree_closer",
305 tree_status_host = "webrtc-status.appspot.com",
Owen Rodley6b721ba2020-05-26 10:04:20 +1000306 # TODO: These step filters are copied verbatim from Gatekeeper, for testing
307 # that LUCI-Notify would take the exact same actions. Once we've switched
308 # over, this should be updated - several of these steps don't exist in
309 # WebRTC recipes.
310 failed_step_regexp = [
311 "bot_update",
312 "compile",
313 "gclient runhooks",
314 "runhooks",
315 "update",
316 "extract build",
317 "cleanup_temp",
318 "taskkill",
319 "compile",
320 "gn",
321 ],
322 failed_step_regexp_exclude = ".*\\(experimental\\).*",
323)
324
Oleh Prypin1a0593f2019-03-11 09:43:28 +0100325# Recipe definitions:
326
327def recipe(recipe, pkg = "infra/recipe_bundles/chromium.googlesource.com/chromium/tools/build"):
328 return luci.recipe(
329 name = recipe.split("/")[-1],
330 cipd_package = pkg,
331 cipd_version = "refs/heads/master",
332 recipe = recipe,
333 )
334
335recipe("chromium_trybot")
336recipe("run_presubmit")
337recipe("webrtc/auto_roll_webrtc_deps")
338recipe("webrtc/ios")
339recipe("webrtc/ios_api_framework")
340recipe("webrtc/libfuzzer")
341recipe("webrtc/more_configs")
Oleh Prypin1a0593f2019-03-11 09:43:28 +0100342recipe("webrtc/standalone")
Mirko Bonadei54bbd1c2020-12-14 15:54:46 +0100343recipe("webrtc/update_webrtc_binary_version")
Jeff Yoonf421c682020-12-17 00:16:22 -0800344recipe("lkgr_finder", pkg = "infra/recipe_bundles/chromium.googlesource.com/chromium/tools/build")
Oleh Prypin1a0593f2019-03-11 09:43:28 +0100345
346# Console definitions:
347
348luci.console_view(name = "ci", title = "Main", repo = WEBRTC_GIT, header = "console-header.textpb")
349luci.console_view(name = "perf", title = "Perf", repo = WEBRTC_GIT, header = "console-header.textpb")
350luci.list_view(name = "cron", title = "Cron")
351luci.console_view(name = "fyi", title = "FYI", repo = WEBRTC_GIT, header = "console-header.textpb")
352luci.list_view(name = "try", title = "Tryserver")
353
354def add_milo(builder, views):
355 """Add Milo console entries for the builder.
356
357 Args:
358 builder: builder name (str).
359 views: dict where keys are names of consoles and values are either a
360 category for the console (str, pipe-separated) or True, which means
361 adding to a list view rather than a console.
362 """
363 for view_name, category in views.items():
364 if category == None:
365 continue
366 elif type(category) == "string":
367 category, _, short_name = category.rpartition("|")
368 luci.console_view_entry(
369 console_view = view_name,
370 builder = builder,
371 category = category or None,
372 short_name = short_name or None,
373 )
374 elif category == True:
375 luci.list_view_entry(
376 list_view = view_name,
377 builder = builder,
378 )
379 else:
380 fail("Unexpected value for category: %r" % category)
381
Oleh Prypin8f0dc312019-05-31 15:54:35 +0200382lkgr_builders = {}
383
Oleh Prypin1a0593f2019-03-11 09:43:28 +0100384# Builder-defining functions:
385
Artem Titarenkof6588b72019-11-14 14:28:11 +0100386def webrtc_builder(
387 name,
388 recipe = "standalone",
389 dimensions = {},
Mirko Bonadei825f9c22020-07-01 11:52:39 +0200390 properties = {},
Artem Titarenkof6588b72019-11-14 14:28:11 +0100391 priority = 30,
392 execution_timeout = 2 * time.hour,
Mirko Bonadeib7ef4602020-07-01 13:28:26 +0200393 goma_jobs = None,
Artem Titarenkof6588b72019-11-14 14:28:11 +0100394 **kwargs):
Mirko Bonadeib7ef4602020-07-01 13:28:26 +0200395 """WebRTC specific wrapper around luci.builder.
396
397 Args:
398 name: builder name (str).
399 recipe: string with the name of the recipe to run.
400 dimensions: dict of Swarming dimensions (strings) to search machines by.
401 properties: dict of properties to pass to the recipe (on top of the default ones).
402 priority: int [1-255] or None, indicating swarming task priority, lower is
403 more important. If None, defer the decision to Buildbucket service.
404 execution_timeout: int or None, how long to wait for a running build to finish before
405 forcefully aborting it and marking the build as timed out. If None,
406 defer the decision to Buildbucket service.
407 goma_jobs: int or None, number of jobs to be used by the builder. If None, defer the
408 decition to the goma module.
409 **kwargs: Pass on to webrtc_builder / luci.builder.
410 Returns:
411 A luci.builder.
412 """
Oleh Prypin1a0593f2019-03-11 09:43:28 +0100413 dimensions = merge_dicts({"cpu": "x86-64"}, dimensions)
414
Mirko Bonadeib7ef4602020-07-01 13:28:26 +0200415 if goma_jobs != None:
416 goma_additional_params = {"$build/goma": {"jobs": goma_jobs}}
417 properties = merge_dicts(properties, goma_additional_params)
Ye Kuang8df20492020-10-15 14:54:17 +0900418 properties = merge_dicts(properties, {
419 "$recipe_engine/isolated": {
420 "server": "https://isolateserver.appspot.com",
421 },
422 })
Oleh Prypin1a0593f2019-03-11 09:43:28 +0100423 return luci.builder(
424 name = name,
Oleh Prypin705b6a62019-04-03 23:10:51 +0200425 executable = recipe,
Oleh Prypin1a0593f2019-03-11 09:43:28 +0100426 dimensions = {k: v for k, v in dimensions.items() if v != None},
Mirko Bonadeib7ef4602020-07-01 13:28:26 +0200427 properties = properties,
Artem Titarenkof6588b72019-11-14 14:28:11 +0100428 execution_timeout = execution_timeout,
Oleh Prypin1a0593f2019-03-11 09:43:28 +0100429 priority = priority,
430 build_numbers = True,
431 swarming_tags = ["vpython:native-python-wrapper"],
432 **kwargs
433 )
434
435def ci_builder(
436 name,
437 ci_cat,
438 perf_cat = None,
439 fyi_cat = None,
440 properties = {},
441 dimensions = {},
442 prioritized = False,
Oleh Prypinf5432c52019-03-19 15:10:37 +0100443 enabled = True,
Oleh Prypin1a0593f2019-03-11 09:43:28 +0100444 **kwargs):
Oleh Prypine5677672019-04-25 12:21:35 +0200445 """Add a post-submit builder.
446
447 Args:
448 name: builder name (str).
449 ci_cat: the category + name for the /ci/ console, or None to omit from the console.
450 perf_cat: the category + name for the /perf/ console, or None to omit from the console.
451 fyi_cat: the category + name for the /fyi/ console, or None to omit from the console.
452 properties: dict of properties to pass to the recipe (on top of the default ones).
453 dimensions: dict of Swarming dimensions (strings) to search machines by.
454 prioritized: True to make this builder have a higher priority and never batch builds.
455 enabled: False to exclude this builder from consoles and failure notifications.
456 **kwargs: Pass on to webrtc_builder / luci.builder.
457 Returns:
458 A luci.builder.
459
460 Notifications are also disabled if a builder is not on either of /ci/ or /perf/ consoles.
461 """
Oleh Prypin1a0593f2019-03-11 09:43:28 +0100462 if prioritized:
463 kwargs["triggering_policy"] = scheduler.greedy_batching(
464 max_batch_size = 1,
465 max_concurrent_invocations = 3,
466 )
467 kwargs["priority"] = 29
468
Oleh Prypinf5432c52019-03-19 15:10:37 +0100469 if enabled:
470 add_milo(name, {"ci": ci_cat, "perf": perf_cat, "fyi": fyi_cat})
Oleh Prypin8f0dc312019-05-31 15:54:35 +0200471 if ci_cat:
472 lkgr_builders[name] = True
Oleh Prypin1a0593f2019-03-11 09:43:28 +0100473 return webrtc_builder(
474 name = name,
Garrett Beaty4a106ce2020-09-09 14:51:23 -0700475 properties = merge_dicts({"builder_group": "client.webrtc"}, properties),
Oleh Prypin1a0593f2019-03-11 09:43:28 +0100476 dimensions = merge_dicts({"pool": "luci.webrtc.ci"}, dimensions),
477 bucket = "ci",
478 service_account = "webrtc-ci-builder@chops-service-accounts.iam.gserviceaccount.com",
Oleh Prypinf5432c52019-03-19 15:10:37 +0100479 triggered_by = ["webrtc-gitiles-trigger-master"] if enabled else None,
Oleh Prypin71d17422019-03-28 08:43:16 +0100480 repo = WEBRTC_GIT,
Mirko Bonadei875a27a2020-07-11 15:04:58 +0200481 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 +0100482 **kwargs
483 )
484
485def try_builder(
486 name,
487 try_cat = True,
488 fyi_cat = None,
489 properties = {},
490 dimensions = {},
491 cq = {},
Oleh Prypin7d1cabe2019-03-14 15:10:30 +0100492 branch_cq = True,
Oleh Prypin1a0593f2019-03-11 09:43:28 +0100493 **kwargs):
Oleh Prypine5677672019-04-25 12:21:35 +0200494 """Add a pre-submit builder.
495
496 Args:
497 name: builder name (str).
498 try_cat: boolean, whether to include this builder in the /try/ console. See also: `add_milo`.
499 fyi_cat: the category + name for the /fyi/ console, or None to omit from the console.
500 properties: dict of properties to pass to the recipe (on top of the default ones).
501 dimensions: dict of Swarming dimensions (strings) to search machines by.
502 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 +0100503 branch_cq: False to exclude this builder just from the release-branch CQ.
Oleh Prypine5677672019-04-25 12:21:35 +0200504 **kwargs: Pass on to webrtc_builder / luci.builder.
505 Returns:
506 A luci.builder.
507 """
Oleh Prypin1a0593f2019-03-11 09:43:28 +0100508 add_milo(name, {"try": try_cat, "fyi": fyi_cat})
509 if cq != None:
510 luci.cq_tryjob_verifier(
511 builder = name,
512 cq_group = "cq",
513 **cq
514 )
Oleh Prypin7d1cabe2019-03-14 15:10:30 +0100515 if branch_cq:
516 luci.cq_tryjob_verifier(
517 builder = name,
518 cq_group = "cq_branch",
519 **cq
520 )
Oleh Prypin1a0593f2019-03-11 09:43:28 +0100521
522 return webrtc_builder(
523 name = name,
Garrett Beaty4a106ce2020-09-09 14:51:23 -0700524 properties = merge_dicts({"builder_group": "tryserver.webrtc"}, properties),
Oleh Prypin1a0593f2019-03-11 09:43:28 +0100525 dimensions = merge_dicts({"pool": "luci.webrtc.try"}, dimensions),
526 bucket = "try",
527 service_account = "webrtc-try-builder@chops-service-accounts.iam.gserviceaccount.com",
Mirko Bonadei875a27a2020-07-11 15:04:58 +0200528 notifies = ["infra_failure_notifier"],
Oleh Prypin1a0593f2019-03-11 09:43:28 +0100529 **kwargs
530 )
531
532def perf_builder(
533 name,
534 perf_cat,
535 recipe = "standalone",
536 properties = {},
537 dimensions = {},
538 **kwargs):
539 add_milo(name, {"perf": perf_cat})
540 return webrtc_builder(
541 name = name,
542 recipe = recipe,
Garrett Beaty4a106ce2020-09-09 14:51:23 -0700543 properties = merge_dicts({"builder_group": "client.webrtc.perf"}, properties),
Oleh Prypin1a0593f2019-03-11 09:43:28 +0100544 dimensions = merge_dicts({"pool": "luci.webrtc.perf", "os": "Linux", "cpu": None}, dimensions),
545 bucket = "perf",
546 service_account = "webrtc-ci-builder@chops-service-accounts.iam.gserviceaccount.com",
547 # log_base of 1.7 means:
548 # when there are P pending builds, LUCI will batch the first B builds.
549 # P: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 ...
550 # B: 1 1 2 2 3 3 3 3 4 4 4 4 4 4 5 ...
Jeremy Leconteea2016b2020-07-01 09:47:22 +0200551 triggering_policy = scheduler.logarithmic_batching(log_base = 1.7),
Artem Titarenkof6588b72019-11-14 14:28:11 +0100552 execution_timeout = 3 * time.hour,
Mirko Bonadei875a27a2020-07-11 15:04:58 +0200553 notifies = ["post_submit_failure_notifier", "infra_failure_notifier"],
Oleh Prypin1a0593f2019-03-11 09:43:28 +0100554 **kwargs
555 )
556
Mirko Bonadei12643772020-03-27 13:16:35 +0100557def android_perf_builder(
558 name,
559 perf_cat,
560 recipe = "standalone",
561 properties = {},
562 dimensions = {},
563 **kwargs):
564 return perf_builder(
565 name = name,
566 perf_cat = perf_cat,
567 recipe = recipe,
568 properties = merge_dicts(GOMA_BACKEND_WEBRTC_RBE_PROD, properties),
569 dimensions = dimensions,
570 **kwargs
571 )
572
573def linux_perf_builder(
574 name,
575 perf_cat,
576 recipe = "standalone",
577 properties = {},
578 dimensions = {},
579 **kwargs):
580 return perf_builder(
581 name = name,
582 perf_cat = perf_cat,
583 recipe = recipe,
584 properties = merge_dicts(GOMA_BACKEND_WEBRTC_RBE_PROD, properties),
585 dimensions = dimensions,
586 **kwargs
587 )
588
589def mac_perf_builder(
590 name,
591 perf_cat,
592 recipe = "standalone",
593 properties = {},
594 dimensions = {},
595 **kwargs):
596 return perf_builder(
597 name = name,
598 perf_cat = perf_cat,
599 recipe = recipe,
600 properties = merge_dicts(GOMA_BACKEND_WEBRTC_RBE_PROD, properties),
601 dimensions = dimensions,
602 **kwargs
603 )
604
605def win_perf_builder(
606 name,
607 perf_cat,
608 recipe = "standalone",
609 properties = {},
610 dimensions = {},
611 **kwargs):
612 return perf_builder(
613 name = name,
614 perf_cat = perf_cat,
615 recipe = recipe,
616 properties = merge_dicts(GOMA_BACKEND_RBE_ATS_PROD, properties),
617 dimensions = dimensions,
618 **kwargs
619 )
620
Mirko Bonadei54bbd1c2020-12-14 15:54:46 +0100621def cron_builder(name, dimensions = {}, service_account = None, **kwargs):
622 if service_account == None:
623 service_account = "chromium-webrtc-autoroll@webrtc-ci.iam.gserviceaccount.com"
Oleh Prypin1a0593f2019-03-11 09:43:28 +0100624 add_milo(name, {"cron": True})
625 return webrtc_builder(
626 name = name,
627 dimensions = merge_dicts({"pool": "luci.webrtc.cron", "os": "Linux"}, dimensions),
628 bucket = "cron",
Mirko Bonadei54bbd1c2020-12-14 15:54:46 +0100629 service_account = service_account,
Oleh Prypin71d17422019-03-28 08:43:16 +0100630 notifies = ["cron_notifier"],
Oleh Prypin1a0593f2019-03-11 09:43:28 +0100631 **kwargs
632 )
633
634# Helpers:
635
636def merge_dicts(a, b):
637 """Return the result of merging two dicts.
638
639 If matching values are both dicts or both lists, they will be merged (non-recursively).
640
641 Args:
642 a: first dict.
643 b: second dict (takes priority).
644 Returns:
645 Merged dict.
646 """
647 a = dict(a)
648 for k, bv in b.items():
649 av = a.get(k)
650 if type(av) == "dict" and type(bv) == "dict":
651 a[k] = dict(av)
652 a[k].update(bv)
653 elif type(av) == "list" and type(bv) == "list":
654 a[k] = av + bv
655 else:
656 a[k] = bv
657 return a
658
659def normal_builder_factory(**common_kwargs):
660 def builder(*args, **kwargs):
661 return ci_builder(*args, **merge_dicts(common_kwargs, kwargs))
662
663 def try_job(*args, **kwargs):
664 return try_builder(*args, **merge_dicts(common_kwargs, kwargs))
665
666 return builder, try_job
667
668# Mixins:
669
670linux_builder, linux_try_job = normal_builder_factory(
671 dimensions = {"os": "Linux", "inside_docker": "0"},
Mirko Bonadei32ca4862020-03-11 10:39:45 +0100672 properties = GOMA_BACKEND_WEBRTC_RBE_PROD,
Oleh Prypin1a0593f2019-03-11 09:43:28 +0100673)
674
675android_builder, android_try_job = normal_builder_factory(
676 dimensions = {"os": "Linux"},
Mirko Bonadei32ca4862020-03-11 10:39:45 +0100677 properties = GOMA_BACKEND_WEBRTC_RBE_PROD,
Oleh Prypin1a0593f2019-03-11 09:43:28 +0100678)
679
Mirko Bonadei5aafd472021-04-21 10:42:00 +0200680def win_builder(*args, **kwargs):
681 return ci_builder(
682 *args,
683 **merge_dicts({
684 "dimensions": {"os": "Windows"},
685 "properties": GOMA_BACKEND_RBE_ATS_PROD,
686 }, kwargs)
687 )
688
689def win_try_job(*args, **kwargs):
690 return try_builder(
691 *args,
692 **merge_dicts({
693 "dimensions": {"os": "Windows"},
694 "properties": GOMA_BACKEND_RBE_NO_ATS_PROD,
695 }, kwargs)
696 )
Oleh Prypin1a0593f2019-03-11 09:43:28 +0100697
698mac_builder, mac_try_job = normal_builder_factory(
699 dimensions = {"os": "Mac"},
Mirko Bonadei32ca4862020-03-11 10:39:45 +0100700 properties = GOMA_BACKEND_WEBRTC_RBE_PROD,
Oleh Prypin1a0593f2019-03-11 09:43:28 +0100701)
702
703ios_builder, ios_try_job = normal_builder_factory(
Mirko Bonadei8096c232020-08-26 21:44:42 +0200704 dimensions = {"os": "Mac-10.15"},
Oleh Prypin1a0593f2019-03-11 09:43:28 +0100705 recipe = "ios",
Mirko Bonadei84360ca2020-03-12 08:35:48 +0100706 properties = GOMA_BACKEND_WEBRTC_IOS_RBE_PROD,
707 caches = [swarming.cache("osx_sdk")],
708)
709
710# Some iOS builders don't use goma because they build using
711# `use_xcode_clang=true` which is not supported by goma.
712# https://ci.chromium.org/p/webrtc/builders/ci/iOS%20API%20Framework%20Builder
713# https://ci.chromium.org/p/webrtc/builders/try/ios_api_framework
714ios_builder_no_goma, ios_try_job_no_goma = normal_builder_factory(
Mirko Bonadei8096c232020-08-26 21:44:42 +0200715 dimensions = {"os": "Mac-10.15"},
Mirko Bonadei84360ca2020-03-12 08:35:48 +0100716 recipe = "ios",
Artem Titov1d47d312020-11-03 14:45:52 +0100717 properties = {"$depot_tools/osx_sdk": {"sdk_version": "12a7209"}},
Oleh Prypin1a0593f2019-03-11 09:43:28 +0100718 caches = [swarming.cache("osx_sdk")],
719)
720
721# Actual builder configuration:
722
723android_builder("Android32 (M Nexus5X)(dbg)", "Android|arm|dbg")
724android_try_job("android_compile_arm_dbg", cq = None)
725android_try_job("android_arm_dbg")
726android_builder("Android32 (M Nexus5X)", "Android|arm|rel")
727android_try_job("android_arm_rel")
728android_builder("Android32 Builder arm", "Android|arm|size", perf_cat = "Android|arm|Builder|", prioritized = True)
729android_try_job("android_compile_arm_rel")
Mirko Bonadei86b4f2d2020-07-08 14:24:48 +0200730android_perf_builder("Perf Android32 (M Nexus5)", "Android|arm|Tester|M Nexus5", triggered_by = ["Android32 Builder arm"])
Mirko Bonadei12643772020-03-27 13:16:35 +0100731android_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 +0100732android_try_job("android_compile_arm64_dbg", cq = None)
733android_try_job("android_arm64_dbg", cq = None)
734android_builder("Android64 (M Nexus5X)", "Android|arm64|rel")
735android_try_job("android_arm64_rel")
736android_builder("Android64 Builder arm64", "Android|arm64|size", perf_cat = "Android|arm64|Builder|", prioritized = True)
Mirko Bonadei12643772020-03-27 13:16:35 +0100737android_perf_builder("Perf Android64 (M Nexus5X)", "Android|arm64|Tester|M Nexus5X", triggered_by = ["Android64 Builder arm64"])
738android_perf_builder("Perf Android64 (O Pixel2)", "Android|arm64|Tester|O Pixel2", triggered_by = ["Android64 Builder arm64"])
Oleh Prypin1a0593f2019-03-11 09:43:28 +0100739android_try_job("android_compile_arm64_rel")
Oleh Prypin1a0593f2019-03-11 09:43:28 +0100740android_builder("Android64 Builder x64 (dbg)", "Android|x64|dbg")
741android_try_job("android_compile_x64_dbg")
742android_try_job("android_compile_x64_rel", cq = None)
743android_builder("Android32 Builder x86 (dbg)", "Android|x86|dbg")
744android_try_job("android_compile_x86_dbg")
745android_builder("Android32 Builder x86", "Android|x86|rel")
746android_try_job("android_compile_x86_rel")
747android_builder("Android32 (more configs)", "Android|arm|more", recipe = "more_configs")
748android_try_job("android_arm_more_configs", recipe = "more_configs")
Oleh Prypin7d1cabe2019-03-14 15:10:30 +0100749android_try_job("android_chromium_compile", recipe = "chromium_trybot", branch_cq = False)
Oleh Prypin1a0593f2019-03-11 09:43:28 +0100750
751ios_builder("iOS32 Debug", "iOS|arm|dbg")
752ios_try_job("ios_compile_arm_dbg")
753ios_builder("iOS32 Release", "iOS|arm|rel")
754ios_try_job("ios_compile_arm_rel")
755ios_builder("iOS64 Debug", "iOS|arm64|dbg")
756ios_try_job("ios_compile_arm64_dbg")
757ios_builder("iOS64 Release", "iOS|arm64|rel")
758ios_try_job("ios_compile_arm64_rel")
Artem Titov1d47d312020-11-03 14:45:52 +0100759ios_builder("iOS64 Sim Debug (iOS 14.0)", "iOS|x64|14")
Mirko Bonadeif1e0c0b2021-01-12 13:05:52 +0100760ios_try_job("ios_sim_x64_dbg_ios14", cq = None)
Artem Titov1d47d312020-11-03 14:45:52 +0100761ios_builder("iOS64 Sim Debug (iOS 13)", "iOS|x64|13")
Artem Titove973dd62020-11-03 18:05:21 +0100762ios_try_job("ios_sim_x64_dbg_ios13", cq = None)
Oleh Prypin1a0593f2019-03-11 09:43:28 +0100763ios_builder("iOS64 Sim Debug (iOS 12)", "iOS|x64|12")
Andrey Logvin34ac6592021-02-04 13:03:49 +0000764
765# TODO(crbug.com/1174112): return ios_sim_x64_dbg_ios12 to cq.
766ios_try_job("ios_sim_x64_dbg_ios12", cq = None)
Mirko Bonadei84360ca2020-03-12 08:35:48 +0100767ios_builder_no_goma("iOS API Framework Builder", "iOS|fat|size", recipe = "ios_api_framework", prioritized = True)
Jeremy Leconteea2016b2020-07-01 09:47:22 +0200768ios_try_job_no_goma("ios_api_framework", recipe = "ios_api_framework", cq = None)
Oleh Prypin1a0593f2019-03-11 09:43:28 +0100769
770linux_builder("Linux32 Debug", "Linux|x86|dbg")
771linux_try_job("linux_x86_dbg")
772linux_builder("Linux32 Release", "Linux|x86|rel")
773linux_try_job("linux_x86_rel")
774linux_builder("Linux64 Debug", "Linux|x64|dbg")
775linux_try_job("linux_dbg", cq = None)
776linux_try_job("linux_compile_dbg")
777linux_builder("Linux64 Release", "Linux|x64|rel")
778linux_try_job("linux_rel")
779linux_builder("Linux64 Builder", "Linux|x64|size", perf_cat = "Linux|x64|Builder|", prioritized = True)
780linux_try_job("linux_compile_rel")
Mirko Bonadei12643772020-03-27 13:16:35 +0100781linux_perf_builder("Perf Linux Trusty", "Linux|x64|Tester|Trusty", triggered_by = ["Linux64 Builder"])
782linux_perf_builder("Perf Linux Xenial", None, triggered_by = ["Linux64 Builder"])
Oleh Prypin1a0593f2019-03-11 09:43:28 +0100783linux_builder("Linux32 Debug (ARM)", "Linux|arm|dbg")
784linux_try_job("linux_compile_arm_dbg")
785linux_builder("Linux32 Release (ARM)", "Linux|arm|rel")
786linux_try_job("linux_compile_arm_rel")
787linux_builder("Linux64 Debug (ARM)", "Linux|arm64|dbg")
788linux_try_job("linux_compile_arm64_dbg")
789linux_builder("Linux64 Release (ARM)", "Linux|arm64|rel")
790linux_try_job("linux_compile_arm64_rel")
Oleh Prypin1a0593f2019-03-11 09:43:28 +0100791linux_builder("Linux Asan", "Linux|x64|asan")
792linux_try_job("linux_asan")
793linux_builder("Linux MSan", "Linux|x64|msan")
794linux_try_job("linux_msan")
795linux_builder("Linux Tsan v2", "Linux|x64|tsan")
796linux_try_job("linux_tsan2")
797linux_builder("Linux UBSan", "Linux|x64|ubsan")
798linux_try_job("linux_ubsan")
799linux_builder("Linux UBSan vptr", "Linux|x64|ubsan")
800linux_try_job("linux_ubsan_vptr")
801linux_builder("Linux64 Release (Libfuzzer)", "Linux|x64|fuzz", recipe = "libfuzzer")
802linux_try_job("linux_libfuzzer_rel", recipe = "libfuzzer")
803linux_builder("Linux (more configs)", "Linux|x64|more", recipe = "more_configs")
804linux_try_job("linux_more_configs", recipe = "more_configs")
Oleh Prypin7d1cabe2019-03-14 15:10:30 +0100805linux_try_job("linux_chromium_compile", recipe = "chromium_trybot", branch_cq = False)
Mirko Bonadei40de50f2019-11-07 11:23:47 +0100806linux_try_job("linux_chromium_compile_dbg", recipe = "chromium_trybot", branch_cq = False)
Oleh Prypin1a0593f2019-03-11 09:43:28 +0100807
808mac_builder("Mac64 Debug", "Mac|x64|dbg")
809mac_try_job("mac_dbg", cq = None)
810mac_try_job("mac_compile_dbg")
811mac_builder("Mac64 Release", "Mac|x64|rel")
Andrey Logvina9501222021-04-27 18:08:39 +0000812mac_try_job("mac_rel")
Oleh Prypin1a0593f2019-03-11 09:43:28 +0100813mac_try_job("mac_compile_rel", cq = None)
814mac_builder("Mac64 Builder", ci_cat = None, perf_cat = "Mac|x64|Builder|")
Mirko Bonadei12643772020-03-27 13:16:35 +0100815mac_perf_builder("Perf Mac 10.11", "Mac|x64|Tester|10.11", triggered_by = ["Mac64 Builder"])
Oleh Prypin1a0593f2019-03-11 09:43:28 +0100816mac_builder("Mac Asan", "Mac|x64|asan")
Andrey Logvina9501222021-04-27 18:08:39 +0000817mac_try_job("mac_asan")
Oleh Prypin7d1cabe2019-03-14 15:10:30 +0100818mac_try_job("mac_chromium_compile", recipe = "chromium_trybot", dimensions = {"cores": "8"}, branch_cq = False)
Oleh Prypin1a0593f2019-03-11 09:43:28 +0100819
820win_builder("Win32 Debug", "Win MSVC|x86|dbg")
821win_try_job("win_x86_msvc_dbg")
822win_try_job("win_compile_x86_msvc_dbg", cq = None)
Oleh Prypin63041b82019-03-19 22:56:01 +0000823win_builder("Win32 Release", "Win MSVC|x86|rel")
824win_try_job("win_x86_msvc_rel")
Oleh Prypin1a0593f2019-03-11 09:43:28 +0100825win_try_job("win_compile_x86_msvc_rel", cq = None)
826win_builder("Win64 Debug", "Win MSVC|x64|dbg")
827win_try_job("win_x64_msvc_dbg")
828win_try_job("win_compile_x64_msvc_dbg", cq = None)
829win_builder("Win64 Release", "Win MSVC|x64|rel")
830win_try_job("win_x64_msvc_rel")
831win_try_job("win_compile_x64_msvc_rel", cq = None)
832win_builder("Win32 Debug (Clang)", "Win Clang|x86|dbg")
833win_try_job("win_x86_clang_dbg", cq = None)
834win_try_job("win_compile_x86_clang_dbg")
835win_builder("Win32 Release (Clang)", "Win Clang|x86|rel")
836win_try_job("win_x86_clang_rel")
837win_try_job("win_compile_x86_clang_rel", cq = None)
838win_builder("Win32 Builder (Clang)", ci_cat = None, perf_cat = "Win|x86|Builder|")
Mirko Bonadei12643772020-03-27 13:16:35 +0100839win_perf_builder("Perf Win7", "Win|x86|Tester|7", triggered_by = ["Win32 Builder (Clang)"])
Oleh Prypin1a0593f2019-03-11 09:43:28 +0100840win_builder("Win64 Debug (Clang)", "Win Clang|x64|dbg")
841win_try_job("win_x64_clang_dbg", cq = None)
842win_try_job("win_x64_clang_dbg_win8", cq = None)
843win_try_job("win_x64_clang_dbg_win10", cq = None)
844win_try_job("win_compile_x64_clang_dbg")
845win_builder("Win64 Release (Clang)", "Win Clang|x64|rel")
846win_try_job("win_x64_clang_rel", cq = None)
847win_try_job("win_compile_x64_clang_rel")
Mirko Bonadeiafbe33d2019-05-31 09:27:54 +0200848win_builder("Win64 ASan", "Win Clang|x64|asan")
Oleh Prypin1a0593f2019-03-11 09:43:28 +0100849win_try_job("win_asan")
850win_builder("Win64 UWP", ci_cat = None, fyi_cat = "")
851win_try_job("win_x64_uwp", cq = None, try_cat = None, fyi_cat = "")
852win_builder("Win (more configs)", "Win Clang|x86|more", recipe = "more_configs")
853win_try_job("win_x86_more_configs", recipe = "more_configs")
Mirko Bonadei825f9c22020-07-01 11:52:39 +0200854win_try_job("win_chromium_compile", recipe = "chromium_trybot", branch_cq = False, goma_jobs = 150)
855win_try_job("win_chromium_compile_dbg", recipe = "chromium_trybot", branch_cq = False, goma_jobs = 150)
Oleh Prypin1a0593f2019-03-11 09:43:28 +0100856
857linux_try_job(
858 "presubmit",
859 recipe = "run_presubmit",
860 properties = {"repo_name": "webrtc", "runhooks": True},
861 priority = 28,
862 cq = {"disable_reuse": True},
863)
Oleh Prypin1a0593f2019-03-11 09:43:28 +0100864
865cron_builder(
866 "Auto-roll - WebRTC DEPS",
867 recipe = "auto_roll_webrtc_deps",
Oleh Prypindc68a722019-06-25 10:43:13 +0200868 schedule = "0 */2 * * *", # Every 2 hours.
Oleh Prypin1a0593f2019-03-11 09:43:28 +0100869)
Oleh Prypin8f0dc312019-05-31 15:54:35 +0200870
Mirko Bonadei54bbd1c2020-12-14 15:54:46 +0100871cron_builder(
872 "WebRTC version update",
873 recipe = "update_webrtc_binary_version",
874 schedule = "0 4 * * *", # Every day at 4am.
875 service_account = "webrtc-version-updater@webrtc-ci.iam.gserviceaccount.com",
876)
877
Mirko Bonadeiab3ff262020-12-18 10:17:43 +0100878skipped_lkgr_bots = [
879 "iOS64 Sim Debug (iOS 14.0)",
880 "iOS64 Sim Debug (iOS 13)",
881 "iOS64 Sim Debug (iOS 12)",
882]
883
Oleh Prypin8f0dc312019-05-31 15:54:35 +0200884lkgr_config = {
885 "project": "webrtc",
886 "source_url": WEBRTC_GIT,
887 "status_url": "https://webrtc-status.appspot.com",
888 "allowed_lag": 300, # hours
889 "allowed_gap": 12, # commits behind
Mirko Bonadei450e9b72020-07-10 19:19:22 +0000890 "error_recipients": "webrtc-troopers-robots@google.com",
Michael Achenbach09dd7dc2019-07-26 15:26:11 +0200891 "buckets": {
892 "webrtc/ci": {
893 # bucket alias: luci.webrtc.ci
Mirko Bonadeiab3ff262020-12-18 10:17:43 +0100894 "builders": [
895 b
896 for b in sorted(lkgr_builders)
897 if b not in skipped_lkgr_bots
898 ],
Oleh Prypin8f0dc312019-05-31 15:54:35 +0200899 },
Michael Achenbach09dd7dc2019-07-26 15:26:11 +0200900 "chromium/webrtc.fyi": {
901 # bucket alias: luci.chromium.webrtc.fyi
Oleh Prypin8f0dc312019-05-31 15:54:35 +0200902 "builders": [
903 "WebRTC Chromium FYI Android Builder (dbg)",
904 "WebRTC Chromium FYI Android Builder ARM64 (dbg)",
905 "WebRTC Chromium FYI Android Builder",
Mirko Bonadei04fe32f2020-05-01 00:45:58 +0200906 "WebRTC Chromium FYI Android Tests (dbg) (L Nexus5)",
Oleh Prypin8f0dc312019-05-31 15:54:35 +0200907 "WebRTC Chromium FYI Android Tests (dbg) (M Nexus5X)",
908 "WebRTC Chromium FYI Linux Builder (dbg)",
909 "WebRTC Chromium FYI Linux Builder",
910 "WebRTC Chromium FYI Linux Tester",
911 "WebRTC Chromium FYI Mac Builder (dbg)",
912 "WebRTC Chromium FYI Mac Builder",
913 "WebRTC Chromium FYI Mac Tester",
914 "WebRTC Chromium FYI Win Builder (dbg)",
915 "WebRTC Chromium FYI Win Builder",
916 "WebRTC Chromium FYI Win10 Tester",
Mirko Bonadeif1ef9292021-03-25 18:07:48 +0100917 # TODO(bugs.webrtc.org/12616): Re-enable when the gclient
918 # runhooks step is fixed or skipped.
919 # "WebRTC Chromium FYI Win7 Tester",
Oleh Prypin8f0dc312019-05-31 15:54:35 +0200920 "WebRTC Chromium FYI Win8 Tester",
Mirko Bonadei2f05cfe2020-11-25 10:41:58 +0100921 "WebRTC Chromium FYI ios-device",
922 "WebRTC Chromium FYI ios-simulator",
Oleh Prypin8f0dc312019-05-31 15:54:35 +0200923 ],
924 },
925 },
926}
927
Oleh Prypin1a0593f2019-03-11 09:43:28 +0100928cron_builder(
929 "WebRTC lkgr finder",
930 recipe = "lkgr_finder",
Oleh Prypin8f0dc312019-05-31 15:54:35 +0200931 properties = {
932 "project": "webrtc",
933 "repo": WEBRTC_GIT,
934 "ref": "refs/heads/lkgr",
935 "lkgr_status_gs_path": "chromium-webrtc/lkgr-status",
936 "config": lkgr_config,
937 },
Oleh Prypin1a0593f2019-03-11 09:43:28 +0100938 schedule = "*/10 * * * *", # Every 10 minutes.
939)