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