blob: 001d6fd88cd864dc1a4b6637f2740934a33da64a [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"
Mirko Bonadeif4b78bf2021-04-29 11:23:41 +020015WEBRTC_TROOPER_EMAIL = "webrtc-troopers-robots@google.com"
Oleh Prypin1a0593f2019-03-11 09:43:28 +010016
Mirko Bonadei32ca4862020-03-11 10:39:45 +010017GOMA_BACKEND_WEBRTC_RBE_PROD = {
Mirko Bonadei1e905342020-03-04 09:39:42 +010018 "$build/goma": {
19 "server_host": "goma.chromium.org",
Jeremy Leconteea2016b2020-07-01 09:47:22 +020020 "use_luci_auth": True,
21 },
Mirko Bonadei1e905342020-03-04 09:39:42 +010022}
23
Mirko Bonadei84360ca2020-03-12 08:35:48 +010024GOMA_BACKEND_WEBRTC_IOS_RBE_PROD = {
25 "$build/goma": {
26 "server_host": "goma.chromium.org",
Jeremy Leconteea2016b2020-07-01 09:47:22 +020027 "use_luci_auth": True,
Mirko Bonadei84360ca2020-03-12 08:35:48 +010028 },
Artem Titov1d47d312020-11-03 14:45:52 +010029 "$depot_tools/osx_sdk": {"sdk_version": "12a7209"},
Mirko Bonadei84360ca2020-03-12 08:35:48 +010030}
31
Patrik Höglund3916a972019-12-04 13:19:38 +010032GOMA_BACKEND_RBE_ATS_PROD = {
33 "$build/goma": {
34 "server_host": "goma.chromium.org",
Mirko Bonadei2688eca2020-03-25 09:15:54 +010035 "use_luci_auth": True,
Jeremy Leconteea2016b2020-07-01 09:47:22 +020036 "enable_ats": True,
37 },
Patrik Höglund3916a972019-12-04 13:19:38 +010038}
39
Mirko Bonadei5aafd472021-04-21 10:42:00 +020040# Disable ATS on CQ/try.
41GOMA_BACKEND_RBE_NO_ATS_PROD = {
42 "$build/goma": {
43 "server_host": "goma.chromium.org",
44 "use_luci_auth": True,
45 "enable_ats": False,
46 },
47}
48
Oleh Prypin1a0593f2019-03-11 09:43:28 +010049# Top-level configs:
50
Andrii Shyshkalov0efa6da2021-04-26 20:40:33 +020051# Enable LUCI Realms support.
52lucicfg.enable_experiment("crbug.com/1085650")
53
Andrii Shyshkalov32515d42021-04-29 14:39:42 +020054# Launch all builds in "realms-aware mode", crbug.com/1177975.
55luci.builder.defaults.experiments.set({"luci.use_realms": 100})
Andrii Shyshkalov20b21872021-04-28 15:10:53 +020056
Oleh Prypin1a0593f2019-03-11 09:43:28 +010057lucicfg.config(
58 config_dir = ".",
59 tracked_files = [
60 "commit-queue.cfg",
61 "cr-buildbucket.cfg",
62 "luci-logdog.cfg",
63 "luci-milo.cfg",
Oleh Prypin71d17422019-03-28 08:43:16 +010064 "luci-notify.cfg",
Oleh Prypin705b6a62019-04-03 23:10:51 +020065 "luci-notify/**/*",
Oleh Prypin1a0593f2019-03-11 09:43:28 +010066 "luci-scheduler.cfg",
67 "project.cfg",
Andrii Shyshkalov0efa6da2021-04-26 20:40:33 +020068 "realms.cfg",
Oleh Prypin1a0593f2019-03-11 09:43:28 +010069 ],
Jeremy Leconteea2016b2020-07-01 09:47:22 +020070 lint_checks = ["default"],
Oleh Prypin1a0593f2019-03-11 09:43:28 +010071)
72
73luci.project(
74 name = "webrtc",
75 buildbucket = "cr-buildbucket.appspot.com",
76 logdog = "luci-logdog.appspot.com",
77 milo = "luci-milo.appspot.com",
Oleh Prypin71d17422019-03-28 08:43:16 +010078 notify = "luci-notify.appspot.com",
Oleh Prypin1a0593f2019-03-11 09:43:28 +010079 scheduler = "luci-scheduler.appspot.com",
80 swarming = "chromium-swarm.appspot.com",
81 acls = [
82 acl.entry(
83 [acl.BUILDBUCKET_READER, acl.LOGDOG_READER, acl.PROJECT_CONFIGS_READER, acl.SCHEDULER_READER],
84 groups = ["all"],
85 ),
86 acl.entry(acl.LOGDOG_WRITER, groups = ["luci-logdog-chromium-writers"]),
87 acl.entry(acl.SCHEDULER_OWNER, groups = ["project-webrtc-admins"]),
88 ],
Andrii Shyshkalov0efa6da2021-04-26 20:40:33 +020089 bindings = [
90 luci.binding(
91 roles = "role/swarming.poolOwner",
92 groups = "project-webrtc-admins",
93 ),
94 luci.binding(
95 roles = "role/swarming.poolViewer",
96 groups = "all",
97 ),
Andrii Shyshkalov2961b642021-04-29 14:01:53 +020098 # Allow any WebRTC build to trigger a test ran under chromium-tester@
99 # task service account.
100 luci.binding(
101 roles = "role/swarming.taskServiceAccount",
102 users = [
103 "chromium-tester@chops-service-accounts.iam.gserviceaccount.com",
104 ],
105 ),
Andrii Shyshkalov0efa6da2021-04-26 20:40:33 +0200106 ],
Oleh Prypin1a0593f2019-03-11 09:43:28 +0100107)
108
109luci.logdog(
110 gs_bucket = "chromium-luci-logdog",
111)
112
113luci.milo(
114 logo = "https://storage.googleapis.com/chrome-infra/webrtc-logo-vert-retro-255x305.png",
115)
116
Owen Rodleya55c38e2020-06-15 11:16:10 +1000117luci.notify(tree_closing_enabled = True)
118
Oleh Prypin1a0593f2019-03-11 09:43:28 +0100119luci.cq(
120 status_host = "chromium-cq-status.appspot.com",
121 submit_max_burst = 1,
122 submit_burst_delay = 1 * time.minute,
123)
124
125luci.gitiles_poller(
Christoffer Janssonfa646892021-06-28 17:34:20 +0200126 name = "webrtc-gitiles-trigger-main",
Oleh Prypin1a0593f2019-03-11 09:43:28 +0100127 bucket = "ci",
128 repo = WEBRTC_GIT,
Christoffer Janssonfa646892021-06-28 17:34:20 +0200129 refs = ["refs/heads/main"],
Oleh Prypin1a0593f2019-03-11 09:43:28 +0100130)
131
Andrii Shyshkalov0efa6da2021-04-26 20:40:33 +0200132# Swarming permissions:
133
Andrii Shyshkalovc26aaad2021-04-27 16:47:26 +0200134luci.realm(name = "pools/cron", bindings = [
135 # Unlike WebRTC's own builders, other projects need an explicit grant to use this pool.
136 luci.binding(
137 roles = "role/swarming.poolUser",
138 projects = "libyuv",
139 ),
140])
141
Andrii Shyshkalov0efa6da2021-04-26 20:40:33 +0200142luci.realm(name = "pools/ci")
Andrii Shyshkalovc26aaad2021-04-27 16:47:26 +0200143luci.realm(name = "pools/ci-tests", bindings = [
144 # Allow task service accounts of .ci pool/bucket to trigger tasks here.
145 luci.binding(
146 roles = "role/swarming.poolUser",
147 groups = "project-webrtc-ci-task-accounts",
148 ),
149 # Allow tasks here to use .ci task service accounts.
150 luci.binding(
151 roles = "role/swarming.taskServiceAccount",
152 groups = "project-webrtc-ci-task-accounts",
153 ),
154])
155
Andrii Shyshkalov0efa6da2021-04-26 20:40:33 +0200156luci.realm(name = "pools/try")
Andrii Shyshkalovc26aaad2021-04-27 16:47:26 +0200157luci.realm(name = "pools/try-tests", bindings = [
158 # Allow task service accounts of .try pool/bucket to trigger tasks here.
159 luci.binding(
160 roles = "role/swarming.poolUser",
161 groups = "project-webrtc-try-task-accounts",
162 ),
163 # Allow tasks here to use .try task service accounts.
164 luci.binding(
165 roles = "role/swarming.taskServiceAccount",
166 groups = "project-webrtc-try-task-accounts",
167 ),
168])
Andrii Shyshkalov0efa6da2021-04-26 20:40:33 +0200169
170# Allow admins to use LED & Swarming "Debug" feature on all WebRTC bots.
171luci.binding(
172 realm = "@root",
173 roles = "role/swarming.poolUser",
174 groups = "project-webrtc-admins",
175)
176luci.binding(
177 realm = "@root",
178 roles = "role/swarming.taskTriggerer",
179 groups = "project-webrtc-admins",
180)
181
Emil Lundmark0842a992021-08-26 15:38:28 +0200182# Allow to use LED & Swarming "Debug" feature to a larger group but only on perf
183# and try bots / builders.
184luci.binding(
185 realm = "perf",
186 roles = "role/swarming.poolUser",
187 groups = "project-webrtc-led-users",
188)
Andrii Shyshkalov0efa6da2021-04-26 20:40:33 +0200189luci.binding(
190 realm = "pools/try",
191 roles = "role/swarming.poolUser",
192 groups = "project-webrtc-led-users",
193)
194luci.binding(
195 realm = "try",
196 roles = "role/swarming.taskTriggerer",
197 groups = "project-webrtc-led-users",
198)
199
Oleh Prypin1a0593f2019-03-11 09:43:28 +0100200# Bucket definitions:
201
202luci.bucket(
203 name = "try",
204 acls = [
205 acl.entry(acl.BUILDBUCKET_TRIGGERER, groups = [
206 "service-account-cq",
207 "project-webrtc-tryjob-access",
208 ]),
209 ],
210)
211
212luci.bucket(
213 name = "ci",
214 acls = [
Oleh Prypinf35939d2019-05-03 20:42:38 +0200215 acl.entry(acl.BUILDBUCKET_TRIGGERER, groups = [
216 "project-webrtc-ci-schedulers",
Oleh Prypin1a0593f2019-03-11 09:43:28 +0100217 ]),
Jeremy Leconte2e25bb52020-07-16 09:38:56 +0200218 acl.entry(acl.BUILDBUCKET_TRIGGERER, groups = [
219 # Allow Pinpoint to trigger builds for bisection
220 "service-account-chromeperf",
221 ]),
Oleh Prypin1a0593f2019-03-11 09:43:28 +0100222 ],
223)
224
225luci.bucket(
226 name = "perf",
227 acls = [
228 acl.entry(acl.BUILDBUCKET_TRIGGERER, users = [
Oleh Prypin1a0593f2019-03-11 09:43:28 +0100229 "webrtc-ci-builder@chops-service-accounts.iam.gserviceaccount.com",
230 ]),
231 ],
232)
233
234luci.bucket(
235 name = "cron",
Oleh Prypin1a0593f2019-03-11 09:43:28 +0100236)
237
238# Commit queue definitions:
239
240luci.cq_group(
241 name = "cq",
242 tree_status_host = "webrtc-status.appspot.com",
Christoffer Jansson1746b252021-05-31 16:03:55 +0200243 watch = [cq.refset(repo = WEBRTC_GERRIT, refs = ["refs/heads/master", "refs/heads/main"])],
Oleh Prypin1a0593f2019-03-11 09:43:28 +0100244 acls = [
245 acl.entry(acl.CQ_COMMITTER, groups = ["project-webrtc-committers"]),
246 acl.entry(acl.CQ_DRY_RUNNER, groups = ["project-webrtc-tryjob-access"]),
247 ],
248 retry_config = cq.RETRY_ALL_FAILURES,
Oleh Prypin5416f2d2019-08-02 09:43:15 +0200249 cancel_stale_tryjobs = True,
Oleh Prypin1a0593f2019-03-11 09:43:28 +0100250)
251
252luci.cq_group(
Oleh Prypin7d1cabe2019-03-14 15:10:30 +0100253 name = "cq_branch",
254 watch = [cq.refset(repo = WEBRTC_GERRIT, refs = ["refs/branch-heads/.+"])],
255 acls = [
256 acl.entry(acl.CQ_COMMITTER, groups = ["project-webrtc-committers"]),
257 acl.entry(acl.CQ_DRY_RUNNER, groups = ["project-webrtc-tryjob-access"]),
258 ],
259 retry_config = cq.RETRY_ALL_FAILURES,
Oleh Prypin5416f2d2019-08-02 09:43:15 +0200260 cancel_stale_tryjobs = True,
Oleh Prypin7d1cabe2019-03-14 15:10:30 +0100261)
262
263luci.cq_group(
264 name = "cq_infra",
265 watch = [cq.refset(repo = WEBRTC_GERRIT, refs = ["refs/heads/infra/config"])],
Oleh Prypin1a0593f2019-03-11 09:43:28 +0100266 acls = [
267 acl.entry(acl.CQ_COMMITTER, groups = ["project-webrtc-admins"]),
268 acl.entry(acl.CQ_DRY_RUNNER, groups = ["project-webrtc-tryjob-access"]),
269 ],
270 retry_config = cq.RETRY_ALL_FAILURES,
Oleh Prypin5416f2d2019-08-02 09:43:15 +0200271 cancel_stale_tryjobs = True,
Oleh Prypin1a0593f2019-03-11 09:43:28 +0100272)
273
274luci.cq_tryjob_verifier(
275 builder = "presubmit",
Oleh Prypin7d1cabe2019-03-14 15:10:30 +0100276 cq_group = "cq_infra",
Oleh Prypin1a0593f2019-03-11 09:43:28 +0100277)
278
Oleh Prypine56cd9b2019-05-29 21:14:31 +0200279luci.cq_tryjob_verifier(
280 builder = "webrtc-internal:g3.webrtc-internal.try/internal_compile_lite",
281 owner_whitelist = ["project-webrtc-internal-tryjob-access"],
282 cq_group = "cq",
283)
284
Oleh Prypin71d17422019-03-28 08:43:16 +0100285# Notifier definitions:
286
287luci.notifier(
Mirko Bonadei875a27a2020-07-11 15:04:58 +0200288 name = "post_submit_failure_notifier",
289 on_new_status = ["FAILURE"],
Mirko Bonadeif4b78bf2021-04-29 11:23:41 +0200290 notify_emails = [WEBRTC_TROOPER_EMAIL],
Oleh Prypin705b6a62019-04-03 23:10:51 +0200291 template = luci.notifier_template(
Mirko Bonadei875a27a2020-07-11 15:04:58 +0200292 name = "build_failure",
293 body = io.read_file("luci-notify/email-templates/build_failure.template"),
Oleh Prypin705b6a62019-04-03 23:10:51 +0200294 ),
Oleh Prypin71d17422019-03-28 08:43:16 +0100295)
296
297luci.notifier(
298 name = "cron_notifier",
Jeremy Leconte67a904e2020-07-08 11:48:18 +0200299 on_new_status = ["FAILURE", "INFRA_FAILURE"],
Mirko Bonadeif4b78bf2021-04-29 11:23:41 +0200300 notify_emails = [WEBRTC_TROOPER_EMAIL],
Oleh Prypin705b6a62019-04-03 23:10:51 +0200301 template = luci.notifier_template(
302 name = "cron",
303 body = io.read_file("luci-notify/email-templates/cron.template"),
304 ),
Oleh Prypin71d17422019-03-28 08:43:16 +0100305)
306
Jeremy Leconte67a904e2020-07-08 11:48:18 +0200307luci.notifier(
Mirko Bonadei875a27a2020-07-11 15:04:58 +0200308 name = "infra_failure_notifier",
Jeremy Leconte67a904e2020-07-08 11:48:18 +0200309 on_new_status = ["INFRA_FAILURE"],
Mirko Bonadeif4b78bf2021-04-29 11:23:41 +0200310 notify_emails = [WEBRTC_TROOPER_EMAIL],
Jeremy Leconte67a904e2020-07-08 11:48:18 +0200311 template = luci.notifier_template(
Mirko Bonadei875a27a2020-07-11 15:04:58 +0200312 name = "infra_failure",
313 body = io.read_file("luci-notify/email-templates/infra_failure.template"),
Jeremy Leconte67a904e2020-07-08 11:48:18 +0200314 ),
315)
316
Owen Rodley6b721ba2020-05-26 10:04:20 +1000317# Tree closer definitions:
318
319luci.tree_closer(
320 name = "webrtc_tree_closer",
321 tree_status_host = "webrtc-status.appspot.com",
Owen Rodley6b721ba2020-05-26 10:04:20 +1000322 # TODO: These step filters are copied verbatim from Gatekeeper, for testing
323 # that LUCI-Notify would take the exact same actions. Once we've switched
324 # over, this should be updated - several of these steps don't exist in
325 # WebRTC recipes.
326 failed_step_regexp = [
327 "bot_update",
328 "compile",
329 "gclient runhooks",
330 "runhooks",
331 "update",
332 "extract build",
333 "cleanup_temp",
334 "taskkill",
335 "compile",
336 "gn",
337 ],
338 failed_step_regexp_exclude = ".*\\(experimental\\).*",
339)
340
Oleh Prypin1a0593f2019-03-11 09:43:28 +0100341# Recipe definitions:
342
343def recipe(recipe, pkg = "infra/recipe_bundles/chromium.googlesource.com/chromium/tools/build"):
344 return luci.recipe(
345 name = recipe.split("/")[-1],
346 cipd_package = pkg,
347 cipd_version = "refs/heads/master",
348 recipe = recipe,
349 )
350
351recipe("chromium_trybot")
352recipe("run_presubmit")
353recipe("webrtc/auto_roll_webrtc_deps")
354recipe("webrtc/ios")
355recipe("webrtc/ios_api_framework")
356recipe("webrtc/libfuzzer")
357recipe("webrtc/more_configs")
Oleh Prypin1a0593f2019-03-11 09:43:28 +0100358recipe("webrtc/standalone")
Mirko Bonadei54bbd1c2020-12-14 15:54:46 +0100359recipe("webrtc/update_webrtc_binary_version")
Jeff Yoonf421c682020-12-17 00:16:22 -0800360recipe("lkgr_finder", pkg = "infra/recipe_bundles/chromium.googlesource.com/chromium/tools/build")
Oleh Prypin1a0593f2019-03-11 09:43:28 +0100361
362# Console definitions:
363
Josip Sokcevic5a906ed2021-06-28 08:55:46 -0700364luci.console_view(name = "ci", title = "Main", repo = WEBRTC_GIT, header = "console-header.textpb", refs = ["refs/heads/master", "refs/heads/main"])
365luci.console_view(name = "perf", title = "Perf", repo = WEBRTC_GIT, header = "console-header.textpb", refs = ["refs/heads/master", "refs/heads/main"])
Oleh Prypin1a0593f2019-03-11 09:43:28 +0100366luci.list_view(name = "cron", title = "Cron")
Oleh Prypin1a0593f2019-03-11 09:43:28 +0100367luci.list_view(name = "try", title = "Tryserver")
368
369def add_milo(builder, views):
370 """Add Milo console entries for the builder.
371
372 Args:
373 builder: builder name (str).
374 views: dict where keys are names of consoles and values are either a
375 category for the console (str, pipe-separated) or True, which means
376 adding to a list view rather than a console.
377 """
378 for view_name, category in views.items():
379 if category == None:
380 continue
381 elif type(category) == "string":
382 category, _, short_name = category.rpartition("|")
383 luci.console_view_entry(
384 console_view = view_name,
385 builder = builder,
386 category = category or None,
387 short_name = short_name or None,
388 )
389 elif category == True:
390 luci.list_view_entry(
391 list_view = view_name,
392 builder = builder,
393 )
394 else:
395 fail("Unexpected value for category: %r" % category)
396
Oleh Prypin8f0dc312019-05-31 15:54:35 +0200397lkgr_builders = {}
398
Oleh Prypin1a0593f2019-03-11 09:43:28 +0100399# Builder-defining functions:
400
Artem Titarenkof6588b72019-11-14 14:28:11 +0100401def webrtc_builder(
402 name,
403 recipe = "standalone",
404 dimensions = {},
Mirko Bonadei825f9c22020-07-01 11:52:39 +0200405 properties = {},
Artem Titarenkof6588b72019-11-14 14:28:11 +0100406 priority = 30,
407 execution_timeout = 2 * time.hour,
Mirko Bonadeib7ef4602020-07-01 13:28:26 +0200408 goma_jobs = None,
Artem Titarenkof6588b72019-11-14 14:28:11 +0100409 **kwargs):
Mirko Bonadeib7ef4602020-07-01 13:28:26 +0200410 """WebRTC specific wrapper around luci.builder.
411
412 Args:
413 name: builder name (str).
414 recipe: string with the name of the recipe to run.
415 dimensions: dict of Swarming dimensions (strings) to search machines by.
416 properties: dict of properties to pass to the recipe (on top of the default ones).
417 priority: int [1-255] or None, indicating swarming task priority, lower is
418 more important. If None, defer the decision to Buildbucket service.
419 execution_timeout: int or None, how long to wait for a running build to finish before
420 forcefully aborting it and marking the build as timed out. If None,
421 defer the decision to Buildbucket service.
422 goma_jobs: int or None, number of jobs to be used by the builder. If None, defer the
423 decition to the goma module.
424 **kwargs: Pass on to webrtc_builder / luci.builder.
425 Returns:
426 A luci.builder.
427 """
Oleh Prypin1a0593f2019-03-11 09:43:28 +0100428 dimensions = merge_dicts({"cpu": "x86-64"}, dimensions)
429
Mirko Bonadeib7ef4602020-07-01 13:28:26 +0200430 if goma_jobs != None:
431 goma_additional_params = {"$build/goma": {"jobs": goma_jobs}}
432 properties = merge_dicts(properties, goma_additional_params)
Ye Kuang8df20492020-10-15 14:54:17 +0900433 properties = merge_dicts(properties, {
434 "$recipe_engine/isolated": {
435 "server": "https://isolateserver.appspot.com",
436 },
437 })
Oleh Prypin1a0593f2019-03-11 09:43:28 +0100438 return luci.builder(
439 name = name,
Oleh Prypin705b6a62019-04-03 23:10:51 +0200440 executable = recipe,
Oleh Prypin1a0593f2019-03-11 09:43:28 +0100441 dimensions = {k: v for k, v in dimensions.items() if v != None},
Mirko Bonadeib7ef4602020-07-01 13:28:26 +0200442 properties = properties,
Artem Titarenkof6588b72019-11-14 14:28:11 +0100443 execution_timeout = execution_timeout,
Oleh Prypin1a0593f2019-03-11 09:43:28 +0100444 priority = priority,
445 build_numbers = True,
446 swarming_tags = ["vpython:native-python-wrapper"],
447 **kwargs
448 )
449
450def ci_builder(
451 name,
452 ci_cat,
453 perf_cat = None,
454 fyi_cat = None,
455 properties = {},
456 dimensions = {},
457 prioritized = False,
Oleh Prypinf5432c52019-03-19 15:10:37 +0100458 enabled = True,
Oleh Prypin1a0593f2019-03-11 09:43:28 +0100459 **kwargs):
Oleh Prypine5677672019-04-25 12:21:35 +0200460 """Add a post-submit builder.
461
462 Args:
463 name: builder name (str).
464 ci_cat: the category + name for the /ci/ console, or None to omit from the console.
465 perf_cat: the category + name for the /perf/ console, or None to omit from the console.
466 fyi_cat: the category + name for the /fyi/ console, or None to omit from the console.
467 properties: dict of properties to pass to the recipe (on top of the default ones).
468 dimensions: dict of Swarming dimensions (strings) to search machines by.
469 prioritized: True to make this builder have a higher priority and never batch builds.
470 enabled: False to exclude this builder from consoles and failure notifications.
471 **kwargs: Pass on to webrtc_builder / luci.builder.
472 Returns:
473 A luci.builder.
474
475 Notifications are also disabled if a builder is not on either of /ci/ or /perf/ consoles.
476 """
Oleh Prypin1a0593f2019-03-11 09:43:28 +0100477 if prioritized:
478 kwargs["triggering_policy"] = scheduler.greedy_batching(
479 max_batch_size = 1,
480 max_concurrent_invocations = 3,
481 )
482 kwargs["priority"] = 29
483
Oleh Prypinf5432c52019-03-19 15:10:37 +0100484 if enabled:
485 add_milo(name, {"ci": ci_cat, "perf": perf_cat, "fyi": fyi_cat})
Oleh Prypin8f0dc312019-05-31 15:54:35 +0200486 if ci_cat:
487 lkgr_builders[name] = True
Oleh Prypin1a0593f2019-03-11 09:43:28 +0100488 return webrtc_builder(
489 name = name,
Garrett Beaty4a106ce2020-09-09 14:51:23 -0700490 properties = merge_dicts({"builder_group": "client.webrtc"}, properties),
Oleh Prypin1a0593f2019-03-11 09:43:28 +0100491 dimensions = merge_dicts({"pool": "luci.webrtc.ci"}, dimensions),
492 bucket = "ci",
493 service_account = "webrtc-ci-builder@chops-service-accounts.iam.gserviceaccount.com",
Christoffer Janssonfa646892021-06-28 17:34:20 +0200494 triggered_by = ["webrtc-gitiles-trigger-main"] if enabled else None,
Oleh Prypin71d17422019-03-28 08:43:16 +0100495 repo = WEBRTC_GIT,
Mirko Bonadei875a27a2020-07-11 15:04:58 +0200496 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 +0100497 **kwargs
498 )
499
500def try_builder(
501 name,
502 try_cat = True,
503 fyi_cat = None,
504 properties = {},
505 dimensions = {},
506 cq = {},
Oleh Prypin7d1cabe2019-03-14 15:10:30 +0100507 branch_cq = True,
Oleh Prypin1a0593f2019-03-11 09:43:28 +0100508 **kwargs):
Oleh Prypine5677672019-04-25 12:21:35 +0200509 """Add a pre-submit builder.
510
511 Args:
512 name: builder name (str).
513 try_cat: boolean, whether to include this builder in the /try/ console. See also: `add_milo`.
514 fyi_cat: the category + name for the /fyi/ console, or None to omit from the console.
515 properties: dict of properties to pass to the recipe (on top of the default ones).
516 dimensions: dict of Swarming dimensions (strings) to search machines by.
517 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 +0100518 branch_cq: False to exclude this builder just from the release-branch CQ.
Oleh Prypine5677672019-04-25 12:21:35 +0200519 **kwargs: Pass on to webrtc_builder / luci.builder.
520 Returns:
521 A luci.builder.
522 """
Oleh Prypin1a0593f2019-03-11 09:43:28 +0100523 add_milo(name, {"try": try_cat, "fyi": fyi_cat})
524 if cq != None:
525 luci.cq_tryjob_verifier(
526 builder = name,
527 cq_group = "cq",
528 **cq
529 )
Oleh Prypin7d1cabe2019-03-14 15:10:30 +0100530 if branch_cq:
531 luci.cq_tryjob_verifier(
532 builder = name,
533 cq_group = "cq_branch",
534 **cq
535 )
Oleh Prypin1a0593f2019-03-11 09:43:28 +0100536
537 return webrtc_builder(
538 name = name,
Garrett Beaty4a106ce2020-09-09 14:51:23 -0700539 properties = merge_dicts({"builder_group": "tryserver.webrtc"}, properties),
Oleh Prypin1a0593f2019-03-11 09:43:28 +0100540 dimensions = merge_dicts({"pool": "luci.webrtc.try"}, dimensions),
541 bucket = "try",
542 service_account = "webrtc-try-builder@chops-service-accounts.iam.gserviceaccount.com",
Mirko Bonadei875a27a2020-07-11 15:04:58 +0200543 notifies = ["infra_failure_notifier"],
Oleh Prypin1a0593f2019-03-11 09:43:28 +0100544 **kwargs
545 )
546
547def perf_builder(
548 name,
549 perf_cat,
550 recipe = "standalone",
551 properties = {},
552 dimensions = {},
553 **kwargs):
554 add_milo(name, {"perf": perf_cat})
555 return webrtc_builder(
556 name = name,
557 recipe = recipe,
Garrett Beaty4a106ce2020-09-09 14:51:23 -0700558 properties = merge_dicts({"builder_group": "client.webrtc.perf"}, properties),
Oleh Prypin1a0593f2019-03-11 09:43:28 +0100559 dimensions = merge_dicts({"pool": "luci.webrtc.perf", "os": "Linux", "cpu": None}, dimensions),
560 bucket = "perf",
561 service_account = "webrtc-ci-builder@chops-service-accounts.iam.gserviceaccount.com",
562 # log_base of 1.7 means:
563 # when there are P pending builds, LUCI will batch the first B builds.
564 # P: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 ...
565 # B: 1 1 2 2 3 3 3 3 4 4 4 4 4 4 5 ...
Jeremy Leconteea2016b2020-07-01 09:47:22 +0200566 triggering_policy = scheduler.logarithmic_batching(log_base = 1.7),
Artem Titarenkof6588b72019-11-14 14:28:11 +0100567 execution_timeout = 3 * time.hour,
Mirko Bonadei875a27a2020-07-11 15:04:58 +0200568 notifies = ["post_submit_failure_notifier", "infra_failure_notifier"],
Oleh Prypin1a0593f2019-03-11 09:43:28 +0100569 **kwargs
570 )
571
Mirko Bonadei12643772020-03-27 13:16:35 +0100572def android_perf_builder(
573 name,
574 perf_cat,
575 recipe = "standalone",
576 properties = {},
577 dimensions = {},
578 **kwargs):
579 return perf_builder(
580 name = name,
581 perf_cat = perf_cat,
582 recipe = recipe,
583 properties = merge_dicts(GOMA_BACKEND_WEBRTC_RBE_PROD, properties),
584 dimensions = dimensions,
585 **kwargs
586 )
587
588def linux_perf_builder(
589 name,
590 perf_cat,
591 recipe = "standalone",
592 properties = {},
593 dimensions = {},
594 **kwargs):
595 return perf_builder(
596 name = name,
597 perf_cat = perf_cat,
598 recipe = recipe,
599 properties = merge_dicts(GOMA_BACKEND_WEBRTC_RBE_PROD, properties),
600 dimensions = dimensions,
601 **kwargs
602 )
603
604def mac_perf_builder(
605 name,
606 perf_cat,
607 recipe = "standalone",
608 properties = {},
609 dimensions = {},
610 **kwargs):
611 return perf_builder(
612 name = name,
613 perf_cat = perf_cat,
614 recipe = recipe,
615 properties = merge_dicts(GOMA_BACKEND_WEBRTC_RBE_PROD, properties),
616 dimensions = dimensions,
617 **kwargs
618 )
619
620def win_perf_builder(
621 name,
622 perf_cat,
623 recipe = "standalone",
624 properties = {},
625 dimensions = {},
626 **kwargs):
627 return perf_builder(
628 name = name,
629 perf_cat = perf_cat,
630 recipe = recipe,
631 properties = merge_dicts(GOMA_BACKEND_RBE_ATS_PROD, properties),
632 dimensions = dimensions,
633 **kwargs
634 )
635
Mirko Bonadei54bbd1c2020-12-14 15:54:46 +0100636def cron_builder(name, dimensions = {}, service_account = None, **kwargs):
637 if service_account == None:
638 service_account = "chromium-webrtc-autoroll@webrtc-ci.iam.gserviceaccount.com"
Oleh Prypin1a0593f2019-03-11 09:43:28 +0100639 add_milo(name, {"cron": True})
640 return webrtc_builder(
641 name = name,
642 dimensions = merge_dicts({"pool": "luci.webrtc.cron", "os": "Linux"}, dimensions),
643 bucket = "cron",
Mirko Bonadei54bbd1c2020-12-14 15:54:46 +0100644 service_account = service_account,
Oleh Prypin71d17422019-03-28 08:43:16 +0100645 notifies = ["cron_notifier"],
Oleh Prypin1a0593f2019-03-11 09:43:28 +0100646 **kwargs
647 )
648
649# Helpers:
650
651def merge_dicts(a, b):
652 """Return the result of merging two dicts.
653
654 If matching values are both dicts or both lists, they will be merged (non-recursively).
655
656 Args:
657 a: first dict.
658 b: second dict (takes priority).
659 Returns:
660 Merged dict.
661 """
662 a = dict(a)
663 for k, bv in b.items():
664 av = a.get(k)
665 if type(av) == "dict" and type(bv) == "dict":
666 a[k] = dict(av)
667 a[k].update(bv)
668 elif type(av) == "list" and type(bv) == "list":
669 a[k] = av + bv
670 else:
671 a[k] = bv
672 return a
673
674def normal_builder_factory(**common_kwargs):
675 def builder(*args, **kwargs):
676 return ci_builder(*args, **merge_dicts(common_kwargs, kwargs))
677
678 def try_job(*args, **kwargs):
679 return try_builder(*args, **merge_dicts(common_kwargs, kwargs))
680
681 return builder, try_job
682
683# Mixins:
684
685linux_builder, linux_try_job = normal_builder_factory(
686 dimensions = {"os": "Linux", "inside_docker": "0"},
Mirko Bonadei32ca4862020-03-11 10:39:45 +0100687 properties = GOMA_BACKEND_WEBRTC_RBE_PROD,
Oleh Prypin1a0593f2019-03-11 09:43:28 +0100688)
689
690android_builder, android_try_job = normal_builder_factory(
691 dimensions = {"os": "Linux"},
Mirko Bonadei32ca4862020-03-11 10:39:45 +0100692 properties = GOMA_BACKEND_WEBRTC_RBE_PROD,
Oleh Prypin1a0593f2019-03-11 09:43:28 +0100693)
694
Mirko Bonadei5aafd472021-04-21 10:42:00 +0200695def win_builder(*args, **kwargs):
696 return ci_builder(
697 *args,
698 **merge_dicts({
699 "dimensions": {"os": "Windows"},
700 "properties": GOMA_BACKEND_RBE_ATS_PROD,
701 }, kwargs)
702 )
703
704def win_try_job(*args, **kwargs):
705 return try_builder(
706 *args,
707 **merge_dicts({
708 "dimensions": {"os": "Windows"},
709 "properties": GOMA_BACKEND_RBE_NO_ATS_PROD,
710 }, kwargs)
711 )
Oleh Prypin1a0593f2019-03-11 09:43:28 +0100712
713mac_builder, mac_try_job = normal_builder_factory(
714 dimensions = {"os": "Mac"},
Mirko Bonadei32ca4862020-03-11 10:39:45 +0100715 properties = GOMA_BACKEND_WEBRTC_RBE_PROD,
Oleh Prypin1a0593f2019-03-11 09:43:28 +0100716)
717
718ios_builder, ios_try_job = normal_builder_factory(
Mirko Bonadei8096c232020-08-26 21:44:42 +0200719 dimensions = {"os": "Mac-10.15"},
Oleh Prypin1a0593f2019-03-11 09:43:28 +0100720 recipe = "ios",
Mirko Bonadei84360ca2020-03-12 08:35:48 +0100721 properties = GOMA_BACKEND_WEBRTC_IOS_RBE_PROD,
722 caches = [swarming.cache("osx_sdk")],
723)
724
725# Some iOS builders don't use goma because they build using
726# `use_xcode_clang=true` which is not supported by goma.
727# https://ci.chromium.org/p/webrtc/builders/ci/iOS%20API%20Framework%20Builder
728# https://ci.chromium.org/p/webrtc/builders/try/ios_api_framework
729ios_builder_no_goma, ios_try_job_no_goma = normal_builder_factory(
Mirko Bonadei8096c232020-08-26 21:44:42 +0200730 dimensions = {"os": "Mac-10.15"},
Mirko Bonadei84360ca2020-03-12 08:35:48 +0100731 recipe = "ios",
Artem Titov1d47d312020-11-03 14:45:52 +0100732 properties = {"$depot_tools/osx_sdk": {"sdk_version": "12a7209"}},
Oleh Prypin1a0593f2019-03-11 09:43:28 +0100733 caches = [swarming.cache("osx_sdk")],
734)
735
736# Actual builder configuration:
737
738android_builder("Android32 (M Nexus5X)(dbg)", "Android|arm|dbg")
739android_try_job("android_compile_arm_dbg", cq = None)
740android_try_job("android_arm_dbg")
741android_builder("Android32 (M Nexus5X)", "Android|arm|rel")
742android_try_job("android_arm_rel")
743android_builder("Android32 Builder arm", "Android|arm|size", perf_cat = "Android|arm|Builder|", prioritized = True)
744android_try_job("android_compile_arm_rel")
Mirko Bonadei86b4f2d2020-07-08 14:24:48 +0200745android_perf_builder("Perf Android32 (M Nexus5)", "Android|arm|Tester|M Nexus5", triggered_by = ["Android32 Builder arm"])
Mirko Bonadei12643772020-03-27 13:16:35 +0100746android_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 +0100747android_try_job("android_compile_arm64_dbg", cq = None)
748android_try_job("android_arm64_dbg", cq = None)
749android_builder("Android64 (M Nexus5X)", "Android|arm64|rel")
750android_try_job("android_arm64_rel")
751android_builder("Android64 Builder arm64", "Android|arm64|size", perf_cat = "Android|arm64|Builder|", prioritized = True)
Mirko Bonadei12643772020-03-27 13:16:35 +0100752android_perf_builder("Perf Android64 (M Nexus5X)", "Android|arm64|Tester|M Nexus5X", triggered_by = ["Android64 Builder arm64"])
753android_perf_builder("Perf Android64 (O Pixel2)", "Android|arm64|Tester|O Pixel2", triggered_by = ["Android64 Builder arm64"])
Oleh Prypin1a0593f2019-03-11 09:43:28 +0100754android_try_job("android_compile_arm64_rel")
Oleh Prypin1a0593f2019-03-11 09:43:28 +0100755android_builder("Android64 Builder x64 (dbg)", "Android|x64|dbg")
756android_try_job("android_compile_x64_dbg")
757android_try_job("android_compile_x64_rel", cq = None)
758android_builder("Android32 Builder x86 (dbg)", "Android|x86|dbg")
759android_try_job("android_compile_x86_dbg")
760android_builder("Android32 Builder x86", "Android|x86|rel")
761android_try_job("android_compile_x86_rel")
762android_builder("Android32 (more configs)", "Android|arm|more", recipe = "more_configs")
763android_try_job("android_arm_more_configs", recipe = "more_configs")
Oleh Prypin7d1cabe2019-03-14 15:10:30 +0100764android_try_job("android_chromium_compile", recipe = "chromium_trybot", branch_cq = False)
Oleh Prypin1a0593f2019-03-11 09:43:28 +0100765
Oleh Prypin1a0593f2019-03-11 09:43:28 +0100766ios_builder("iOS64 Debug", "iOS|arm64|dbg")
767ios_try_job("ios_compile_arm64_dbg")
768ios_builder("iOS64 Release", "iOS|arm64|rel")
769ios_try_job("ios_compile_arm64_rel")
Artem Titov1d47d312020-11-03 14:45:52 +0100770ios_builder("iOS64 Sim Debug (iOS 14.0)", "iOS|x64|14")
Andrey Logvin81320ad2021-06-02 16:45:09 +0000771ios_try_job("ios_sim_x64_dbg_ios14")
Artem Titov1d47d312020-11-03 14:45:52 +0100772ios_builder("iOS64 Sim Debug (iOS 13)", "iOS|x64|13")
Andrey Logvin81320ad2021-06-02 16:45:09 +0000773ios_try_job("ios_sim_x64_dbg_ios13")
Oleh Prypin1a0593f2019-03-11 09:43:28 +0100774ios_builder("iOS64 Sim Debug (iOS 12)", "iOS|x64|12")
Andrey Logvin81320ad2021-06-02 16:45:09 +0000775ios_try_job("ios_sim_x64_dbg_ios12")
Mirko Bonadei84360ca2020-03-12 08:35:48 +0100776ios_builder_no_goma("iOS API Framework Builder", "iOS|fat|size", recipe = "ios_api_framework", prioritized = True)
Jeremy Leconteea2016b2020-07-01 09:47:22 +0200777ios_try_job_no_goma("ios_api_framework", recipe = "ios_api_framework", cq = None)
Oleh Prypin1a0593f2019-03-11 09:43:28 +0100778
779linux_builder("Linux32 Debug", "Linux|x86|dbg")
780linux_try_job("linux_x86_dbg")
781linux_builder("Linux32 Release", "Linux|x86|rel")
782linux_try_job("linux_x86_rel")
783linux_builder("Linux64 Debug", "Linux|x64|dbg")
784linux_try_job("linux_dbg", cq = None)
785linux_try_job("linux_compile_dbg")
786linux_builder("Linux64 Release", "Linux|x64|rel")
787linux_try_job("linux_rel")
788linux_builder("Linux64 Builder", "Linux|x64|size", perf_cat = "Linux|x64|Builder|", prioritized = True)
789linux_try_job("linux_compile_rel")
Mirko Bonadei12643772020-03-27 13:16:35 +0100790linux_perf_builder("Perf Linux Trusty", "Linux|x64|Tester|Trusty", triggered_by = ["Linux64 Builder"])
Christoffer Jansson627cb052021-06-29 12:34:58 +0200791linux_perf_builder("Perf Linux Bionic", "Linux|x64|Tester|Bionic", triggered_by = ["Linux64 Builder"])
Oleh Prypin1a0593f2019-03-11 09:43:28 +0100792linux_builder("Linux32 Debug (ARM)", "Linux|arm|dbg")
793linux_try_job("linux_compile_arm_dbg")
794linux_builder("Linux32 Release (ARM)", "Linux|arm|rel")
795linux_try_job("linux_compile_arm_rel")
796linux_builder("Linux64 Debug (ARM)", "Linux|arm64|dbg")
797linux_try_job("linux_compile_arm64_dbg")
798linux_builder("Linux64 Release (ARM)", "Linux|arm64|rel")
799linux_try_job("linux_compile_arm64_rel")
Oleh Prypin1a0593f2019-03-11 09:43:28 +0100800linux_builder("Linux Asan", "Linux|x64|asan")
801linux_try_job("linux_asan")
802linux_builder("Linux MSan", "Linux|x64|msan")
803linux_try_job("linux_msan")
804linux_builder("Linux Tsan v2", "Linux|x64|tsan")
805linux_try_job("linux_tsan2")
806linux_builder("Linux UBSan", "Linux|x64|ubsan")
807linux_try_job("linux_ubsan")
808linux_builder("Linux UBSan vptr", "Linux|x64|ubsan")
809linux_try_job("linux_ubsan_vptr")
810linux_builder("Linux64 Release (Libfuzzer)", "Linux|x64|fuzz", recipe = "libfuzzer")
811linux_try_job("linux_libfuzzer_rel", recipe = "libfuzzer")
812linux_builder("Linux (more configs)", "Linux|x64|more", recipe = "more_configs")
813linux_try_job("linux_more_configs", recipe = "more_configs")
Oleh Prypin7d1cabe2019-03-14 15:10:30 +0100814linux_try_job("linux_chromium_compile", recipe = "chromium_trybot", branch_cq = False)
Mirko Bonadei40de50f2019-11-07 11:23:47 +0100815linux_try_job("linux_chromium_compile_dbg", recipe = "chromium_trybot", branch_cq = False)
Oleh Prypin1a0593f2019-03-11 09:43:28 +0100816
817mac_builder("Mac64 Debug", "Mac|x64|dbg")
818mac_try_job("mac_dbg", cq = None)
819mac_try_job("mac_compile_dbg")
820mac_builder("Mac64 Release", "Mac|x64|rel")
Andrey Logvina9501222021-04-27 18:08:39 +0000821mac_try_job("mac_rel")
Oleh Prypin1a0593f2019-03-11 09:43:28 +0100822mac_try_job("mac_compile_rel", cq = None)
823mac_builder("Mac64 Builder", ci_cat = None, perf_cat = "Mac|x64|Builder|")
Mirko Bonadei12643772020-03-27 13:16:35 +0100824mac_perf_builder("Perf Mac 10.11", "Mac|x64|Tester|10.11", triggered_by = ["Mac64 Builder"])
Oleh Prypin1a0593f2019-03-11 09:43:28 +0100825mac_builder("Mac Asan", "Mac|x64|asan")
Andrey Logvina9501222021-04-27 18:08:39 +0000826mac_try_job("mac_asan")
Mirko Bonadei2f407ea2021-08-31 07:27:22 +0000827mac_try_job("mac_chromium_compile", recipe = "chromium_trybot", dimensions = {"cores": "8"}, branch_cq = False)
Christoffer Janssonb21c9502021-06-09 16:15:39 +0200828mac_builder("MacARM64 M1 Release", "Mac|arm64M1|rel", dimensions = {"cpu": "arm64-64-Apple_M1"})
Oleh Prypin1a0593f2019-03-11 09:43:28 +0100829
830win_builder("Win32 Debug", "Win MSVC|x86|dbg")
831win_try_job("win_x86_msvc_dbg")
832win_try_job("win_compile_x86_msvc_dbg", cq = None)
Oleh Prypin63041b82019-03-19 22:56:01 +0000833win_builder("Win32 Release", "Win MSVC|x86|rel")
834win_try_job("win_x86_msvc_rel")
Oleh Prypin1a0593f2019-03-11 09:43:28 +0100835win_try_job("win_compile_x86_msvc_rel", cq = None)
836win_builder("Win64 Debug", "Win MSVC|x64|dbg")
837win_try_job("win_x64_msvc_dbg")
838win_try_job("win_compile_x64_msvc_dbg", cq = None)
839win_builder("Win64 Release", "Win MSVC|x64|rel")
840win_try_job("win_x64_msvc_rel")
841win_try_job("win_compile_x64_msvc_rel", cq = None)
842win_builder("Win32 Debug (Clang)", "Win Clang|x86|dbg")
843win_try_job("win_x86_clang_dbg", cq = None)
844win_try_job("win_compile_x86_clang_dbg")
845win_builder("Win32 Release (Clang)", "Win Clang|x86|rel")
846win_try_job("win_x86_clang_rel")
847win_try_job("win_compile_x86_clang_rel", cq = None)
848win_builder("Win32 Builder (Clang)", ci_cat = None, perf_cat = "Win|x86|Builder|")
Mirko Bonadei12643772020-03-27 13:16:35 +0100849win_perf_builder("Perf Win7", "Win|x86|Tester|7", triggered_by = ["Win32 Builder (Clang)"])
Oleh Prypin1a0593f2019-03-11 09:43:28 +0100850win_builder("Win64 Debug (Clang)", "Win Clang|x64|dbg")
851win_try_job("win_x64_clang_dbg", cq = None)
852win_try_job("win_x64_clang_dbg_win8", cq = None)
853win_try_job("win_x64_clang_dbg_win10", cq = None)
854win_try_job("win_compile_x64_clang_dbg")
855win_builder("Win64 Release (Clang)", "Win Clang|x64|rel")
856win_try_job("win_x64_clang_rel", cq = None)
857win_try_job("win_compile_x64_clang_rel")
Mirko Bonadeiafbe33d2019-05-31 09:27:54 +0200858win_builder("Win64 ASan", "Win Clang|x64|asan")
Oleh Prypin1a0593f2019-03-11 09:43:28 +0100859win_try_job("win_asan")
Oleh Prypin1a0593f2019-03-11 09:43:28 +0100860win_builder("Win (more configs)", "Win Clang|x86|more", recipe = "more_configs")
861win_try_job("win_x86_more_configs", recipe = "more_configs")
Mirko Bonadei825f9c22020-07-01 11:52:39 +0200862win_try_job("win_chromium_compile", recipe = "chromium_trybot", branch_cq = False, goma_jobs = 150)
863win_try_job("win_chromium_compile_dbg", recipe = "chromium_trybot", branch_cq = False, goma_jobs = 150)
Oleh Prypin1a0593f2019-03-11 09:43:28 +0100864
865linux_try_job(
866 "presubmit",
867 recipe = "run_presubmit",
868 properties = {"repo_name": "webrtc", "runhooks": True},
869 priority = 28,
870 cq = {"disable_reuse": True},
871)
Oleh Prypin1a0593f2019-03-11 09:43:28 +0100872
873cron_builder(
874 "Auto-roll - WebRTC DEPS",
875 recipe = "auto_roll_webrtc_deps",
Oleh Prypindc68a722019-06-25 10:43:13 +0200876 schedule = "0 */2 * * *", # Every 2 hours.
Oleh Prypin1a0593f2019-03-11 09:43:28 +0100877)
Oleh Prypin8f0dc312019-05-31 15:54:35 +0200878
Mirko Bonadei54bbd1c2020-12-14 15:54:46 +0100879cron_builder(
880 "WebRTC version update",
881 recipe = "update_webrtc_binary_version",
882 schedule = "0 4 * * *", # Every day at 4am.
883 service_account = "webrtc-version-updater@webrtc-ci.iam.gserviceaccount.com",
884)
885
Mirko Bonadeic8ce5ea2021-07-12 10:54:14 +0200886# Add names of builders to remove from LKGR finder to this list. This is
887# useful when a failure can be safely ignored while fixing it without
888# blocking the LKGR finder on it.
Mirko Bonadeiab3ff262020-12-18 10:17:43 +0100889skipped_lkgr_bots = [
Mirko Bonadeiab3ff262020-12-18 10:17:43 +0100890]
891
Oleh Prypin8f0dc312019-05-31 15:54:35 +0200892lkgr_config = {
893 "project": "webrtc",
894 "source_url": WEBRTC_GIT,
895 "status_url": "https://webrtc-status.appspot.com",
896 "allowed_lag": 300, # hours
897 "allowed_gap": 12, # commits behind
Mirko Bonadeif4b78bf2021-04-29 11:23:41 +0200898 "error_recipients": WEBRTC_TROOPER_EMAIL,
Michael Achenbach09dd7dc2019-07-26 15:26:11 +0200899 "buckets": {
900 "webrtc/ci": {
901 # bucket alias: luci.webrtc.ci
Mirko Bonadeiab3ff262020-12-18 10:17:43 +0100902 "builders": [
903 b
904 for b in sorted(lkgr_builders)
905 if b not in skipped_lkgr_bots
906 ],
Oleh Prypin8f0dc312019-05-31 15:54:35 +0200907 },
Michael Achenbach09dd7dc2019-07-26 15:26:11 +0200908 "chromium/webrtc.fyi": {
909 # bucket alias: luci.chromium.webrtc.fyi
Oleh Prypin8f0dc312019-05-31 15:54:35 +0200910 "builders": [
911 "WebRTC Chromium FYI Android Builder (dbg)",
912 "WebRTC Chromium FYI Android Builder ARM64 (dbg)",
913 "WebRTC Chromium FYI Android Builder",
Mirko Bonadei04fe32f2020-05-01 00:45:58 +0200914 "WebRTC Chromium FYI Android Tests (dbg) (L Nexus5)",
Oleh Prypin8f0dc312019-05-31 15:54:35 +0200915 "WebRTC Chromium FYI Android Tests (dbg) (M Nexus5X)",
916 "WebRTC Chromium FYI Linux Builder (dbg)",
917 "WebRTC Chromium FYI Linux Builder",
918 "WebRTC Chromium FYI Linux Tester",
919 "WebRTC Chromium FYI Mac Builder (dbg)",
920 "WebRTC Chromium FYI Mac Builder",
921 "WebRTC Chromium FYI Mac Tester",
922 "WebRTC Chromium FYI Win Builder (dbg)",
923 "WebRTC Chromium FYI Win Builder",
924 "WebRTC Chromium FYI Win10 Tester",
Christoffer Jansson0a8266f2021-06-29 11:34:11 +0200925 "WebRTC Chromium FYI Win7 Tester",
Oleh Prypin8f0dc312019-05-31 15:54:35 +0200926 "WebRTC Chromium FYI Win8 Tester",
Mirko Bonadei2f05cfe2020-11-25 10:41:58 +0100927 "WebRTC Chromium FYI ios-device",
Björn Tereliusc20ed6b2021-06-21 14:31:35 +0200928 "WebRTC Chromium FYI ios-simulator",
Oleh Prypin8f0dc312019-05-31 15:54:35 +0200929 ],
930 },
931 },
932}
933
Oleh Prypin1a0593f2019-03-11 09:43:28 +0100934cron_builder(
935 "WebRTC lkgr finder",
936 recipe = "lkgr_finder",
Oleh Prypin8f0dc312019-05-31 15:54:35 +0200937 properties = {
938 "project": "webrtc",
939 "repo": WEBRTC_GIT,
940 "ref": "refs/heads/lkgr",
Christoffer Janssone9fcc7b2021-06-29 13:02:15 +0200941 "src_ref": "refs/heads/main",
Oleh Prypin8f0dc312019-05-31 15:54:35 +0200942 "lkgr_status_gs_path": "chromium-webrtc/lkgr-status",
943 "config": lkgr_config,
944 },
Oleh Prypin1a0593f2019-03-11 09:43:28 +0100945 schedule = "*/10 * * * *", # Every 10 minutes.
946)