main.star 11 KB

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