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