blob: b08d539efea5a78e83f067f575c8f0d736e2607a [file] [log] [blame]
Ryan Harrisoncd5492c2021-06-03 19:58:51 +00001#!/usr/bin/env lucicfg
2#
3# Copyright 2021 The Tint 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"""
8main.star: lucicfg configuration for Tint's standalone builers.
9"""
10
Ryan Harrisond148be42021-11-01 19:00:52 +000011luci.builder.defaults.experiments.set({
Ryan Harrisond148be42021-11-01 19:00:52 +000012 "luci.recipes.use_python3": 100,
13})
Andrii Shyshkalov762c81b2021-07-12 14:40:22 +000014
Ryan Harrisoncd5492c2021-06-03 19:58:51 +000015lucicfg.config(fail_on_warnings = True)
16
17luci.project(
18 name = "tint",
19 buildbucket = "cr-buildbucket.appspot.com",
20 logdog = "luci-logdog.appspot.com",
21 milo = "luci-milo.appspot.com",
22 notify = "luci-notify.appspot.com",
23 scheduler = "luci-scheduler.appspot.com",
24 swarming = "chromium-swarm.appspot.com",
25 acls = [
26 acl.entry(
27 roles = [
28 acl.PROJECT_CONFIGS_READER,
29 acl.LOGDOG_READER,
30 acl.BUILDBUCKET_READER,
31 acl.SCHEDULER_READER,
32 ],
33 groups = "all",
34 ),
35 acl.entry(
36 roles = [
37 acl.SCHEDULER_OWNER,
38 ],
39 groups = "project-tint-admins",
40 ),
41 acl.entry(
42 roles = [
43 acl.LOGDOG_WRITER,
44 ],
45 groups = "luci-logdog-chromium-writers",
46 ),
47 ],
Vadim Shtayura90eb5aa2021-11-16 15:17:12 +000048 bindings = [
49 luci.binding(
50 roles = "role/configs.validator",
51 users = "tint-try-builder@chops-service-accounts.iam.gserviceaccount.com",
52 ),
53 ],
Ryan Harrisoncd5492c2021-06-03 19:58:51 +000054)
55
56luci.logdog(gs_bucket = "chromium-luci-logdog")
57
58luci.bucket(
59 name = "ci",
60 acls = [
61 acl.entry(
62 roles = [
63 acl.BUILDBUCKET_READER,
64 ],
65 groups = "all",
66 ),
67 acl.entry(
68 acl.BUILDBUCKET_TRIGGERER,
Ryan Harrisoncd5492c2021-06-03 19:58:51 +000069 ),
70 ],
71)
72
73luci.bucket(
74 name = "try",
75 acls = [
76 acl.entry(
77 acl.BUILDBUCKET_TRIGGERER,
78 groups = [
79 "project-tint-tryjob-access",
80 "service-account-cq",
81 ],
82 ),
83 ],
84)
85
86os_category = struct(
87 LINUX = "Linux",
88 MAC = "Mac",
89 WINDOWS = "Windows",
90 UNKNOWN = "Unknown",
91)
92
93def os_enum(dimension, category, console_name):
94 return struct(dimension = dimension, category = category, console_name = console_name)
95
96os = struct(
97 LINUX = os_enum("Ubuntu-18.04", os_category.LINUX, "linux"),
Ryan Harrison76fc6d62021-11-29 21:08:09 +000098 MAC = os_enum("Mac-10.15|Mac-11", os_category.MAC, "mac"),
Ryan Harrisoncd5492c2021-06-03 19:58:51 +000099 WINDOWS = os_enum("Windows-10", os_category.WINDOWS, "win"),
100 UNKNOWN = os_enum("Unknown", os_category.UNKNOWN, "unknown"),
101)
102
103# Recipes
104
105def get_builder_executable():
106 """Get standard executable for builders
107
108 Returns:
109 A luci.recipe
110 """
111 return luci.recipe(
112 name = "tint",
113 cipd_package = "infra/recipe_bundles/chromium.googlesource.com/chromium/tools/build",
114 cipd_version = "refs/heads/master",
115 )
116
117def get_os_from_arg(arg):
118 """Get OS enum for a builder name string
119
120 Args:
121 arg: builder name string to get enum for
122
123 Returns:
124 An OS enum struct
125
126 """
127
128 if arg.startswith("linux"):
129 return os.LINUX
130 if arg.startswith("win"):
131 return os.WINDOWS
132 if arg.startswith("mac"):
133 return os.MAC
134 return os.UNKNOWN
135
136def get_default_caches(os, clang):
137 """Get standard caches for builders
138
139 Args:
140 os: OS enum for the builder
141 clang: is this builder running clang
142
143 Returns:
144 A list of caches
145 """
146 caches = []
147 if os.category == os_category.WINDOWS and clang:
148 caches.append(swarming.cache(name = "win_toolchain", path = "win_toolchain"))
149 elif os.category == os_category.MAC:
150 # Cache for mac_toolchain tool and XCode.app
151 caches.append(swarming.cache(name = "osx_sdk", path = "osx_sdk"))
152 return caches
153
154def get_default_dimensions(os):
155 """Get dimensions for a builder that don't depend on being CI vs Try
156
157 Args:
158 os: OS enum for the builder
159
160 Returns:
161 A dimension dict
162
163 """
164 dimensions = {}
165
166 # We have 32bit test configurations but some of our toolchain is 64bit (like CIPD)
167 dimensions["cpu"] = "x86-64"
168 dimensions["os"] = os.dimension
169
170 return dimensions
171
172def get_default_properties(os, clang, debug, cpu):
173 """Get the properties for a builder that don't depend on being CI vs Try
174
175 Args:
176 os: OS enum for the builder
177 clang: is this builder running clang
178 debug: is this builder generating debug builds
179 cpu: string representing the target CPU architecture
180
181 Returns:
182 A properties dict
183 """
184 properties = {}
185
186 properties["debug"] = debug
187 properties["target_cpu"] = cpu
188
189 properties["clang"] = clang
190 msvc = os.category == os_category.WINDOWS and not clang
191
192 if msvc != True:
193 goma_props = {}
194 goma_props.update({
195 "server_host": "goma.chromium.org",
196 "rpc_extra_params": "?prod",
197 })
198 if os.category != os_category.MAC:
199 goma_props["enable_ats"] = True
200 properties["$build/goma"] = goma_props
201
Ryan Harrisoncd5492c2021-06-03 19:58:51 +0000202 return properties
203
204def add_ci_builder(name, os, clang, debug, cpu):
205 """Add a CI builder
206
207 Args:
208 name: builder's name in string form
209 os: OS enum for the builder
210 clang: is this builder running clang
211 debug: is this builder generating debug builds
212 cpu: string representing the target CPU architecture
213 """
214 dimensions_ci = get_default_dimensions(os)
215 dimensions_ci["pool"] = "luci.flex.ci"
216 properties_ci = get_default_properties(os, clang, debug, cpu)
217 triggered_by_ci = ["primary-poller"]
218 luci.builder(
219 name = name,
220 bucket = "ci",
221 triggered_by = triggered_by_ci,
222 executable = get_builder_executable(),
223 properties = properties_ci,
224 dimensions = dimensions_ci,
225 caches = get_default_caches(os, clang),
226 service_account = "tint-ci-builder@chops-service-accounts.iam.gserviceaccount.com",
227 )
228
229def add_try_builder(name, os, clang, debug, cpu):
230 """Add a Try builder
231
232 Args:
233 name: builder's name in string form
234 os: OS enum for the builder
235 clang: is this builder running clang
236 debug: is this builder generating debug builds
237 cpu: string representing the target CPU architecture
238 """
239 dimensions_try = get_default_dimensions(os)
240 dimensions_try["pool"] = "luci.flex.try"
241 properties_try = get_default_properties(os, clang, debug, cpu)
242 properties_try["$depot_tools/bot_update"] = {
243 "apply_patch_on_gclient": True,
244 }
245 luci.builder(
246 name = name,
247 bucket = "try",
248 executable = get_builder_executable(),
249 properties = properties_try,
250 dimensions = dimensions_try,
251 caches = get_default_caches(os, clang),
252 service_account = "tint-try-builder@chops-service-accounts.iam.gserviceaccount.com",
253 )
254
255def tint_standalone_builder(name, clang, debug, cpu):
256 """Adds both the CI and Try standalone builders
257
258 Args:
259 name: builder's name in string form
260 clang: is this builder running clang
261 debug: is this builder generating debug builds
262 cpu: string representing the target CPU architecture
263
264 """
265 os = get_os_from_arg(name)
266
267 add_ci_builder(name, os, clang, debug, cpu)
268 add_try_builder(name, os, clang, debug, cpu)
269
270 config = ""
271 if clang:
272 config = "clang"
273 elif os.category == os_category.WINDOWS:
274 config = "msvc"
275
276 category = os.console_name
277
278 if os.category != os_category.MAC:
279 category += "|" + config
280 if config != "msvc":
281 category += "|dbg" if debug else "|rel"
282
283 short_name = "dbg" if debug else "rel"
284 if os.category != os_category.MAC:
285 if config != "msvc":
286 short_name = cpu
287
288 luci.console_view_entry(
289 console_view = "ci",
290 builder = "ci/" + name,
291 category = category,
292 short_name = short_name,
293 )
294
295 luci.list_view_entry(
296 list_view = "try",
297 builder = "try/" + name,
298 )
299
300 luci.cq_tryjob_verifier(
301 cq_group = "Tint-CQ",
302 builder = "tint:try/" + name,
303 )
304
305luci.gitiles_poller(
306 name = "primary-poller",
307 bucket = "ci",
308 repo = "https://dawn.googlesource.com/tint",
309 refs = [
310 "refs/heads/main",
311 ],
312)
313
314luci.list_view_entry(
315 list_view = "try",
316 builder = "try/presubmit",
317)
318
319luci.builder(
320 name = "presubmit",
321 bucket = "try",
322 executable = luci.recipe(
323 name = "run_presubmit",
324 cipd_package = "infra/recipe_bundles/chromium.googlesource.com/chromium/tools/build",
325 cipd_version = "refs/heads/master",
326 ),
327 dimensions = {
328 "cpu": "x86-64",
329 "os": os.LINUX.dimension,
330 "pool": "luci.flex.try",
331 },
332 properties = {
333 "repo_name": "tint",
334 "runhooks": True,
335 "$depot_tools/bot_update": {
336 "apply_patch_on_gclient": True,
337 },
338 },
339 service_account = "tint-try-builder@chops-service-accounts.iam.gserviceaccount.com",
340)
341
342# name, clang, debug, cpu
343tint_standalone_builder("linux-clang-dbg-x64", True, True, "x64")
344tint_standalone_builder("linux-clang-rel-x64", True, False, "x64")
345tint_standalone_builder("linux-clang-dbg-x86", True, True, "x86")
346tint_standalone_builder("linux-clang-rel-x86", True, False, "x86")
347tint_standalone_builder("mac-dbg", True, True, "x64")
348tint_standalone_builder("mac-rel", True, False, "x64")
349tint_standalone_builder("win-clang-dbg-x64", True, True, "x64")
350tint_standalone_builder("win-clang-rel-x64", True, False, "x64")
351tint_standalone_builder("win-clang-dbg-x86", True, True, "x86")
352tint_standalone_builder("win-clang-rel-x86", True, False, "x86")
353tint_standalone_builder("win-msvc-dbg-x64", False, True, "x64")
354tint_standalone_builder("win-msvc-rel-x64", False, False, "x64")
355
Ryan Harrisoncd5492c2021-06-03 19:58:51 +0000356# Views
357
358luci.console_view(
359 name = "ci",
360 title = "Tint CI Builders",
361 repo = "https://dawn.googlesource.com/tint",
362 refs = ["refs/heads/main"],
363)
364
365luci.list_view(
366 name = "try",
367 title = "Tint try Builders",
368)
369
370# CQ
371
372luci.cq(
373 status_host = "chromium-cq-status.appspot.com",
374 submit_max_burst = 4,
375 submit_burst_delay = 480 * time.second,
376)
377
378luci.cq_group(
379 name = "Tint-CQ",
380 watch = cq.refset(
381 "https://dawn.googlesource.com/tint",
382 refs = ["refs/heads/.+"],
383 ),
384 acls = [
385 acl.entry(
386 acl.CQ_COMMITTER,
387 groups = "project-tint-committers",
388 ),
389 acl.entry(
390 acl.CQ_DRY_RUNNER,
391 groups = "project-tint-tryjobs-access",
392 ),
393 ],
394 verifiers = [
395 luci.cq_tryjob_verifier(
396 builder = "tint:try/presubmit",
397 disable_reuse = True,
398 ),
399 ],
400 retry_config = cq.retry_config(
401 single_quota = 1,
402 global_quota = 2,
403 failure_weight = 1,
404 transient_failure_weight = 1,
405 timeout_weight = 2,
406 ),
407)