xref: /aosp_15_r20/external/libyuv/infra/config/main.star (revision 4e366538070a3a6c5c163c31b791eab742e1657a)
1#!/usr/bin/env lucicfg
2# https://chromium.googlesource.com/infra/luci/luci-go/+/master/lucicfg/doc/
3
4"""LUCI project configuration for libyuv CQ and CI."""
5
6lucicfg.check_version("1.30.9")
7
8LIBYUV_GIT = "https://chromium.googlesource.com/libyuv/libyuv"
9LIBYUV_GERRIT = "https://chromium-review.googlesource.com/libyuv/libyuv"
10
11RECLIENT_CI = {
12    "instance": "rbe-webrtc-trusted",
13    "metrics_project": "chromium-reclient-metrics",
14}
15
16RECLIENT_CQ = {
17    "instance": "rbe-webrtc-untrusted",
18    "metrics_project": "chromium-reclient-metrics",
19}
20
21# Use LUCI Scheduler BBv2 names and add Scheduler realms configs.
22lucicfg.enable_experiment("crbug.com/1182002")
23
24luci.builder.defaults.experiments.set(
25    {
26        "luci.recipes.use_python3": 100,
27    },
28)
29
30lucicfg.config(
31    lint_checks = ["default"],
32    config_dir = ".",
33    tracked_files = [
34        "commit-queue.cfg",
35        "cr-buildbucket.cfg",
36        "luci-logdog.cfg",
37        "luci-milo.cfg",
38        "luci-scheduler.cfg",
39        "project.cfg",
40        "realms.cfg",
41    ],
42)
43
44# Generates project.cfg
45
46luci.project(
47    name = "libyuv",
48    buildbucket = "cr-buildbucket.appspot.com",
49    logdog = "luci-logdog.appspot.com",
50    milo = "luci-milo.appspot.com",
51    notify = "luci-notify.appspot.com",
52    scheduler = "luci-scheduler.appspot.com",
53    swarming = "chromium-swarm.appspot.com",
54    acls = [
55        acl.entry(acl.PROJECT_CONFIGS_READER, groups = ["all"]),
56        acl.entry(acl.LOGDOG_READER, groups = ["all"]),
57        acl.entry(acl.LOGDOG_WRITER, groups = ["luci-logdog-chromium-writers"]),
58        acl.entry(acl.SCHEDULER_READER, groups = ["all"]),
59        acl.entry(acl.SCHEDULER_OWNER, groups = ["project-libyuv-admins"]),
60        acl.entry(acl.BUILDBUCKET_READER, groups = ["all"]),
61        acl.entry(acl.BUILDBUCKET_OWNER, groups = ["project-libyuv-admins"]),
62    ],
63    bindings = [
64        luci.binding(
65            roles = "role/swarming.taskTriggerer",  # for LED tasks.
66            groups = "project-libyuv-admins",
67        ),
68        luci.binding(
69            roles = "role/configs.validator",
70            users = "libyuv-try-builder@chops-service-accounts.iam.gserviceaccount.com",
71        ),
72    ],
73)
74
75# Generates luci-logdog.cfg
76
77luci.logdog(
78    gs_bucket = "chromium-luci-logdog",
79)
80
81# Generates luci-scheduler.cfg
82
83luci.gitiles_poller(
84    name = "master-gitiles-trigger",
85    bucket = "ci",
86    repo = LIBYUV_GIT,
87)
88
89# Generates luci-milo.cfg
90
91luci.milo(
92    logo = "https://storage.googleapis.com/chrome-infra-public/logo/libyuv-logo.png",
93)
94
95def libyuv_ci_view(name, category, short_name):
96    return luci.console_view_entry(
97        console_view = "main",
98        builder = name,
99        category = category,
100        short_name = short_name,
101    )
102
103def libyuv_try_view(name):
104    return luci.list_view_entry(
105        list_view = "try",
106        builder = name,
107    )
108
109luci.console_view(
110    name = "main",
111    title = "libyuv Main Console",
112    include_experimental_builds = True,
113    repo = LIBYUV_GIT,
114)
115
116luci.list_view(
117    name = "cron",
118    title = "Cron",
119    entries = ["DEPS Autoroller"],
120)
121
122luci.list_view(
123    name = "try",
124    title = "libyuv Try Builders",
125)
126
127# Generates commit-queue.cfg
128
129def libyuv_try_job_verifier(name, cq_group, experiment_percentage):
130    return luci.cq_tryjob_verifier(
131        builder = name,
132        cq_group = cq_group,
133        experiment_percentage = experiment_percentage,
134    )
135
136luci.cq(
137    status_host = "chromium-cq-status.appspot.com",
138    submit_max_burst = 4,
139    submit_burst_delay = 8 * time.minute,
140)
141
142luci.cq_group(
143    name = "master",
144    watch = [
145        cq.refset(
146            repo = LIBYUV_GERRIT,
147            refs = ["refs/heads/main", "refs/heads/master"],
148        ),
149    ],
150    acls = [
151        acl.entry(acl.CQ_COMMITTER, groups = ["project-libyuv-committers"]),
152        acl.entry(acl.CQ_DRY_RUNNER, groups = ["project-libyuv-tryjob-access"]),
153    ],
154    retry_config = cq.RETRY_ALL_FAILURES,
155    cancel_stale_tryjobs = True,
156)
157
158luci.cq_group(
159    name = "config",
160    watch = [
161        cq.refset(
162            repo = LIBYUV_GERRIT,
163            refs = ["refs/heads/infra/config"],
164        ),
165    ],
166    acls = [
167        acl.entry(acl.CQ_COMMITTER, groups = ["project-libyuv-committers"]),
168        acl.entry(acl.CQ_DRY_RUNNER, groups = ["project-libyuv-tryjob-access"]),
169    ],
170    retry_config = cq.RETRY_ALL_FAILURES,
171    cancel_stale_tryjobs = True,
172)
173
174# Generates cr-buildbucket.cfg
175
176luci.bucket(
177    name = "ci",
178)
179luci.bucket(
180    name = "try",
181    acls = [
182        acl.entry(acl.BUILDBUCKET_TRIGGERER, groups = [
183            "project-libyuv-tryjob-access",
184            "service-account-cq",
185        ]),
186    ],
187)
188luci.bucket(
189    name = "cron",
190)
191
192def get_os_dimensions(os):
193    if os == "android":
194        return {"device_type": "walleye"}
195    if os == "ios" or os == "mac":
196        return {"os": "Mac-12", "cpu": "x86-64"}
197    elif os == "win":
198        return {"os": "Windows-10", "cores": "8", "cpu": "x86-64"}
199    elif os == "linux":
200        return {"os": "Ubuntu-18.04", "cores": "8", "cpu": "x86-64"}
201    return {}
202
203def libyuv_ci_builder(name, dimensions, properties, triggered_by):
204    return luci.builder(
205        name = name,
206        dimensions = dimensions,
207        properties = properties,
208        bucket = "ci",
209        service_account = "[email protected]",
210        triggered_by = triggered_by,
211        swarming_tags = ["vpython:native-python-wrapper"],
212        execution_timeout = 180 * time.minute,
213        build_numbers = True,
214        executable = luci.recipe(
215            name = "libyuv/libyuv",
216            cipd_package = "infra/recipe_bundles/chromium.googlesource.com/chromium/tools/build",
217            use_python3 = True,
218        ),
219    )
220
221def libyuv_try_builder(name, dimensions, properties, recipe_name = "libyuv/libyuv"):
222    return luci.builder(
223        name = name,
224        dimensions = dimensions,
225        properties = properties,
226        bucket = "try",
227        service_account = "libyuv-try-builder@chops-service-accounts.iam.gserviceaccount.com",
228        swarming_tags = ["vpython:native-python-wrapper"],
229        execution_timeout = 180 * time.minute,
230        build_numbers = True,
231        executable = luci.recipe(
232            name = recipe_name,
233            cipd_package = "infra/recipe_bundles/chromium.googlesource.com/chromium/tools/build",
234            use_python3 = True,
235        ),
236    )
237
238def ci_builder(name, os, category, short_name = None):
239    dimensions = get_os_dimensions(os)
240    properties = {"$build/reclient": RECLIENT_CI}
241
242    dimensions["pool"] = "luci.flex.ci"
243    properties["builder_group"] = "client.libyuv"
244
245    triggered_by = ["master-gitiles-trigger" if os != "android" else "Android Debug"]
246    libyuv_ci_view(name, category, short_name)
247    return libyuv_ci_builder(name, dimensions, properties, triggered_by)
248
249def try_builder(name, os, experiment_percentage = None):
250    dimensions = get_os_dimensions(os)
251    properties = {"$build/reclient": RECLIENT_CQ}
252
253    dimensions["pool"] = "luci.flex.try"
254    properties["builder_group"] = "tryserver.libyuv"
255
256    if name == "presubmit":
257        recipe_name = "run_presubmit"
258        properties["repo_name"] = "libyuv"
259        properties["runhooks"] = True
260        libyuv_try_job_verifier(name, "config", experiment_percentage)
261        return libyuv_try_builder(name, dimensions, properties, recipe_name)
262
263    libyuv_try_job_verifier(name, "master", experiment_percentage)
264    libyuv_try_view(name)
265    return libyuv_try_builder(name, dimensions, properties)
266
267luci.builder(
268    name = "DEPS Autoroller",
269    bucket = "cron",
270    service_account = "libyuv-ci-autoroll-builder@chops-service-accounts.iam.gserviceaccount.com",
271    dimensions = {
272        "pool": "luci.webrtc.cron",
273        "os": "Linux",
274        "cpu": "x86-64",
275    },
276    swarming_tags = ["vpython:native-python-wrapper"],
277    execution_timeout = 120 * time.minute,
278    build_numbers = True,
279    schedule = "0 14 * * *",  # Every 2 hours.
280    executable = luci.recipe(
281        name = "libyuv/roll_deps",
282        cipd_package = "infra/recipe_bundles/chromium.googlesource.com/chromium/tools/build",
283        use_python3 = True,
284    ),
285)
286
287ci_builder("Android ARM64 Debug", "linux", "Android|Builder", "dbg")
288ci_builder("Android Debug", "linux", "Android|Builder", "dbg")
289ci_builder("Android Release", "linux", "Android|Builder", "rel")
290ci_builder("Android32 x86 Debug", "linux", "Android|Builder|x86", "dbg")
291ci_builder("Android64 x64 Debug", "linux", "Android|Builder|x64", "dbg")
292ci_builder("Android Tester ARM32 Debug (Nexus 5X)", "android", "Android|Tester|ARM 32", "dbg")
293ci_builder("Android Tester ARM32 Release (Nexus 5X)", "android", "Android|Tester|ARM 32", "rel")
294ci_builder("Android Tester ARM64 Debug (Nexus 5X)", "android", "Android|Tester|ARM 64", "dbg")
295ci_builder("Linux Asan", "linux", "Linux", "asan")
296ci_builder("Linux MSan", "linux", "Linux", "msan")
297ci_builder("Linux Tsan v2", "linux", "Linux", "tsan")
298ci_builder("Linux UBSan", "linux", "Linux|UBSan")
299ci_builder("Linux UBSan vptr", "linux", "Linux|UBSan", "vptr")
300ci_builder("Linux32 Debug", "linux", "Linux|32", "dbg")
301ci_builder("Linux32 Release", "linux", "Linux|32", "rel")
302ci_builder("Linux64 Debug", "linux", "Linux|64", "dbg")
303ci_builder("Linux64 Release", "linux", "Linux|64", "rel")
304ci_builder("Mac Asan", "mac", "Mac", "asan")
305ci_builder("Mac64 Debug", "mac", "Mac", "dbg")
306ci_builder("Mac64 Release", "mac", "Mac", "rel")
307ci_builder("Win32 Debug", "win", "Win|32|Debug")
308ci_builder("Win32 Debug (Clang)", "win", "Win|32|Debug", "clg")
309ci_builder("Win32 Release", "win", "Win|32|Release")
310ci_builder("Win32 Release (Clang)", "win", "Win|32|Release", "clg")
311ci_builder("Win64 Debug", "win", "Win|64|Debug", "clg")
312ci_builder("Win64 Debug (Clang)", "win", "Win|64|Debug", "clg")
313ci_builder("Win64 Release", "win", "Win|64|Release")
314ci_builder("Win64 Release (Clang)", "win", "Win|64|Release", "clg")
315ci_builder("iOS ARM64 Debug", "ios", "iOS|ARM64", "dbg")
316ci_builder("iOS ARM64 Release", "ios", "iOS|ARM64", "rel")
317
318# TODO(crbug.com/1242847): make this not experimental.
319try_builder("android", "android", experiment_percentage = 100)
320try_builder("android_arm64", "android", experiment_percentage = 100)
321try_builder("android_rel", "android", experiment_percentage = 100)
322
323try_builder("android_x64", "linux")
324try_builder("android_x86", "linux")
325try_builder("ios_arm64", "ios")
326try_builder("ios_arm64_rel", "ios")
327try_builder("linux", "linux")
328try_builder("linux_asan", "linux")
329try_builder("linux_gcc", "linux", experiment_percentage = 100)
330try_builder("linux_msan", "linux")
331try_builder("linux_rel", "linux")
332try_builder("linux_tsan2", "linux")
333try_builder("linux_ubsan", "linux")
334try_builder("linux_ubsan_vptr", "linux")
335try_builder("mac", "mac")
336try_builder("mac_asan", "mac")
337try_builder("mac_rel", "mac")
338try_builder("win", "win")
339try_builder("win_clang", "win")
340try_builder("win_clang_rel", "win")
341try_builder("win_rel", "win")
342try_builder("win_x64_clang_rel", "win")
343try_builder("win_x64_rel", "win")
344try_builder("presubmit", "linux")
345