# Copyright 2023 The Chromium Authors # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. """Definitions of builders in `build` bucket.""" # TODO: crbug.com/1502025 - Reduce duplicated configs from the shadow builders. # Note that CI builders can't use `mirrors`. load("@chromium-luci//builder_config.star", "builder_config") load("@chromium-luci//builders.star", "cpu", "os") load("@chromium-luci//ci.star", "ci") load("@chromium-luci//consoles.star", "consoles") load("@chromium-luci//gn_args.star", "gn_args") load("@chromium-luci//html.star", "linkify_builder") load("//lib/ci_constants.star", "ci_constants") load("//lib/siso.star", "siso") load("//lib/xcode.star", "xcode") load("//project.star", "settings") luci.bucket( name = "build", acls = [ acl.entry( roles = acl.BUILDBUCKET_READER, groups = "all", ), acl.entry( roles = acl.BUILDBUCKET_TRIGGERER, groups = [ "project-chromium-ci-schedulers", ], ), acl.entry( roles = acl.BUILDBUCKET_OWNER, groups = [ "project-chromium-admins", "mdb/chrome-ops-browser-build-team", ], ), acl.entry( roles = acl.SCHEDULER_TRIGGERER, groups = "project-chromium-scheduler-triggerers", ), acl.entry( roles = acl.SCHEDULER_OWNER, groups = [ "mdb/chrome-troopers", ], ), ], ) # Define the shadow bucket of `build`. # See also http://go/luci-how-to-led#configure-a-shadow-bucket luci.bucket( name = "build.shadow", shadows = "build", constraints = luci.bucket_constraints( pools = [ci_constants.DEFAULT_POOL], service_accounts = [ "chromium-build-perf-ci-builder@chops-service-accounts.iam.gserviceaccount.com", ], ), bindings = [ # for led permissions. luci.binding( roles = "role/buildbucket.creator", groups = [ "chromium-led-users", "mdb/chrome-build-access-sphinx", "mdb/chrome-troopers", "mdb/foundry-x-team", ], ), ], dynamic = True, ) luci.gitiles_poller( name = "chrome-build-gitiles-trigger", bucket = "build", repo = "https://chromium.googlesource.com/chromium/src", refs = [settings.ref], ) ci.defaults.set( bucket = "build", triggered_by = ["chrome-build-gitiles-trigger"], builder_group = "chromium.build", pool = ci_constants.DEFAULT_POOL, builderless = False, # rely on the builder dimension for the bot selection. cores = None, build_numbers = True, contact_team_email = "chrome-build-team@google.com", execution_timeout = 10 * time.hour, priority = ci_constants.DEFAULT_FYI_PRIORITY, resultdb_enable = False, service_account = "chromium-build-perf-ci-builder@chops-service-accounts.iam.gserviceaccount.com", siso_configs = [], siso_experiments = ["no-fallback"], ) consoles.console_view( name = "chromium.build", repo = "https://chromium.googlesource.com/chromium/src", ) def cq_build_perf_builder(description_html, **kwargs): # Use CQ RBE instance and high remote_jobs/cores to simulate CQ builds. if not "siso_configs" in kwargs: kwargs["siso_configs"] = ["builder", "remote-link"] props = {} if not kwargs.get("siso_enabled", True): props["$build/reclient"] = { "instance": siso.project.DEFAULT_UNTRUSTED, "jobs": 500, "metrics_project": "chromium-reclient-metrics", "scandeps_server": True, } return ci.builder( description_html = description_html + "
Build stats are shown in http://shortn/_wiYV1BraSr.", siso_remote_jobs = siso.remote_jobs.HIGH_JOBS_FOR_CQ, siso_project = siso.project.DEFAULT_UNTRUSTED, use_clang_coverage = True, properties = props, **kwargs ) def ci_build_perf_builder(description_html, **kwargs): # Use CI RBE instance to simulate CI builds. if not "siso_configs" in kwargs: kwargs["siso_configs"] = ["builder", "remote-link"] return ci.builder( description_html = description_html + "
Build stats are shown in http://shortn/_wiYV1BraSr.", siso_remote_jobs = siso.remote_jobs.DEFAULT, siso_project = siso.project.DEFAULT_TRUSTED, **kwargs ) cq_build_perf_builder( name = "android-build-perf-siso", description_html = "This builder measures Android CQ build performance with Siso.
" + "The build configs and the bot specs should be in sync with " + linkify_builder("try", "android-arm64-rel-compilator", "chromium"), executable = "recipe:chrome_build/build_perf_siso", builder_spec = builder_config.builder_spec( gclient_config = builder_config.gclient_config( config = "chromium", apply_configs = [ "android", "siso_latest", ], ), chromium_config = builder_config.chromium_config( config = "main_builder", apply_configs = [ "mb", ], build_config = builder_config.build_config.RELEASE, target_arch = builder_config.target_arch.ARM, target_bits = 64, target_platform = builder_config.target_platform.ANDROID, ), android_config = builder_config.android_config( config = "base_config", ), ), gn_args = { "builtin": gn_args.config(configs = ["try/android-arm64-rel", "no_reclient"]), "no_clang_modules": gn_args.config(configs = ["try/android-arm64-rel", "no_reclient", "no_clang_modules"]), }, os = os.LINUX_DEFAULT, console_view_entry = consoles.console_view_entry( category = "build perf|android", short_name = "siso", ), siso_profile_mode = "local", ) cq_build_perf_builder( name = "linux-build-perf-siso", description_html = "This builder measures Linux CQ build performance with Siso.
" + "The build configs and the bot specs should be in sync with " + linkify_builder("try", "linux-rel-compilator", "chromium"), executable = "recipe:chrome_build/build_perf_siso", builder_spec = builder_config.builder_spec( gclient_config = builder_config.gclient_config( config = "chromium", apply_configs = [ "siso_latest", ], ), chromium_config = builder_config.chromium_config( config = "chromium", apply_configs = [ "mb", ], target_platform = builder_config.target_platform.LINUX, ), ), gn_args = { "builtin": gn_args.config(configs = ["try/linux-rel", "no_reclient"]), "no_clang_modules": gn_args.config(configs = ["try/linux-rel", "no_reclient", "no_clang_modules"]), }, os = os.LINUX_DEFAULT, console_view_entry = consoles.console_view_entry( category = "build perf|linux", short_name = "siso", ), siso_profile_mode = "local", ) cq_build_perf_builder( name = "win-build-perf-siso", description_html = "This builder measures Windows CQ build performance with Siso.
" + "The build configs and the bot specs should be in sync with " + linkify_builder("try", "win-rel-compilator", "chromium"), executable = "recipe:chrome_build/build_perf_siso", builder_spec = builder_config.builder_spec( gclient_config = builder_config.gclient_config( config = "chromium", apply_configs = [ "siso_latest", ], ), chromium_config = builder_config.chromium_config( config = "chromium", apply_configs = [ "mb", ], target_platform = builder_config.target_platform.WIN, ), ), gn_args = { "builtin": gn_args.config(configs = ["try/win-rel", "no_reclient"]), "no_clang_modules": gn_args.config(configs = ["try/win-rel", "no_reclient", "no_clang_modules"]), }, os = os.WINDOWS_DEFAULT, console_view_entry = consoles.console_view_entry( category = "build perf|windows", short_name = "siso", ), # Enabling local profiler hangs windows builders (http://b/476821630). So set cloud explicitly here. siso_profile_mode = "cloud", ) ci_build_perf_builder( name = "win-build-perf-ci-siso", description_html = "This builder measures Windows CI build performance with Siso.
" + "The build configs and the bot specs should be in sync with " + linkify_builder("ci", " Win x64 Builder", "chromium"), executable = "recipe:chrome_build/build_perf_siso", builder_spec = builder_config.builder_spec( gclient_config = builder_config.gclient_config( config = "chromium", apply_configs = [ "siso_latest", ], ), chromium_config = builder_config.chromium_config( config = "chromium", apply_configs = [ "mb", ], target_platform = builder_config.target_platform.WIN, ), ), gn_args = { "builtin": gn_args.config(configs = ["ci/Win x64 Builder", "no_reclient"]), "no_clang_modules": gn_args.config(configs = ["ci/Win x64 Builder", "no_reclient", "no_clang_modules"]), }, os = os.WINDOWS_DEFAULT, console_view_entry = consoles.console_view_entry( category = "build perf|windows", short_name = "sisoci", ), siso_configs = ["builder"], # TODO(333491525): enable no-fallback once OOM fallback mitigated. siso_experiments = [], siso_limits = "fastlocal=0", # Enabling local profiler hangs windows builders (http://b/476821630). So set cloud explicitly here. siso_profile_mode = "cloud", ) cq_build_perf_builder( name = "linux-chromeos-build-perf-siso", description_html = "This builder measures CrOS CQ build performance with Siso.
" + "The build configs and the bot specs should be in sync with " + linkify_builder("try", "linux-chromeos-rel-compilator", "chromium"), executable = "recipe:chrome_build/build_perf_siso", builder_spec = builder_config.builder_spec( gclient_config = builder_config.gclient_config( config = "chromium", apply_configs = [ "chromeos", "siso_latest", ], ), chromium_config = builder_config.chromium_config( config = "chromium", apply_configs = [ "mb", ], target_platform = builder_config.target_platform.CHROMEOS, ), ), gn_args = { "builtin": gn_args.config(configs = ["try/linux-chromeos-rel", "no_reclient"]), "no_clang_modules": gn_args.config(configs = ["try/linux-chromeos-rel", "no_reclient", "no_clang_modules"]), }, os = os.LINUX_DEFAULT, console_view_entry = consoles.console_view_entry( category = "build perf|cros", short_name = "siso", ), siso_profile_mode = "local", ) cq_build_perf_builder( name = "mac-build-perf-siso", description_html = "This builder measures Mac CQ build performance with Siso.
" + "The build configs and the bot specs should be in sync with " + linkify_builder("try", "mac-rel-compilator", "chromium"), executable = "recipe:chrome_build/build_perf_siso", builder_spec = builder_config.builder_spec( gclient_config = builder_config.gclient_config( config = "chromium", apply_configs = [ "siso_latest", ], ), chromium_config = builder_config.chromium_config( config = "chromium", apply_configs = [ "mb", ], build_config = builder_config.build_config.RELEASE, target_bits = 64, target_platform = builder_config.target_platform.MAC, ), ), gn_args = { "builtin": gn_args.config(configs = ["try/mac-rel", "no_reclient"]), "no_clang_modules": gn_args.config(configs = ["try/mac-rel", "no_reclient", "no_clang_modules"]), }, os = os.MAC_DEFAULT, cpu = cpu.ARM64, console_view_entry = consoles.console_view_entry( category = "build perf|mac", short_name = "siso", ), siso_configs = ["builder"], siso_profile_mode = "local", ) cq_build_perf_builder( name = "ios-build-perf-siso", description_html = "This builder measures iOS CQ build performance with Siso.
" + "The build configs and the bot specs should be in sync with " + linkify_builder("try", "ios-simulator-compilator", "chromium"), executable = "recipe:chrome_build/build_perf_siso", builder_spec = builder_config.builder_spec( gclient_config = builder_config.gclient_config( config = "ios", apply_configs = [ "siso_latest", ], ), chromium_config = builder_config.chromium_config( config = "chromium", apply_configs = [ "mb", "mac_toolchain", ], build_config = builder_config.build_config.DEBUG, target_bits = 64, target_platform = builder_config.target_platform.IOS, ), ), gn_args = { "builtin": gn_args.config(configs = ["try/ios-simulator", "no_reclient"]), "no_clang_modules": gn_args.config(configs = ["try/ios-simulator", "no_reclient", "no_clang_modules"]), }, os = os.MAC_DEFAULT, cpu = cpu.ARM64, console_view_entry = consoles.console_view_entry( category = "build perf|ios", short_name = "siso", ), siso_configs = ["builder"], siso_profile_mode = "local", xcode = xcode.xcode_default, ) def developer_build_perf_builder(description_html, reclient_jobs = None, **kwargs): props = { "$build/reclient": { "instance": siso.project.DEFAULT_UNTRUSTED, "jobs": reclient_jobs, "metrics_project": "chromium-reclient-metrics", "scandeps_server": True, }, } return ci.builder( description_html = description_html + "
Build stats are shown in http://shortn/_wiYV1BraSr." + "
This is also used to compare build performance between w/ and w/o clang modules.", executable = "recipe:chrome_build/build_perf_developer", # developer build usually interactive and not-batch build. siso_disable_batch_mode = True, siso_project = siso.project.DEFAULT_UNTRUSTED, shadow_siso_project = None, properties = props, **kwargs ) developer_build_perf_builder( name = "android-build-perf-developer", description_html = """\ This builder measures build performance for Android developer builds, by simulating developer build scenarios on a high spec bot.\ """, builder_spec = builder_config.builder_spec( gclient_config = builder_config.gclient_config( config = "chromium", apply_configs = [ "android", "siso_latest", "ninja_staging", ], ), chromium_config = builder_config.chromium_config( config = "main_builder", apply_configs = [ "mb", ], build_config = builder_config.build_config.DEBUG, target_arch = builder_config.target_arch.ARM, target_bits = 64, target_platform = builder_config.target_platform.ANDROID, ), android_config = builder_config.android_config( config = "base_config", ), ), gn_args = { "ninja": gn_args.config(configs = ["android_developer", "remoteexec", "no_siso", "reclient"]), "siso_native": gn_args.config(configs = ["android_developer", "remoteexec", "no_reclient"]), "siso_no_clang_modules": gn_args.config(configs = ["android_developer", "remoteexec", "no_reclient", "no_clang_modules"]), }, os = os.LINUX_DEFAULT, console_view_entry = consoles.console_view_entry( category = "build perf|android", short_name = "dev", ), reclient_jobs = 5120, siso_profile_mode = "local", # Setting -1 makes siso use the default remote concurrency. siso_remote_jobs = -1, ) developer_build_perf_builder( name = "linux-build-perf-developer", description_html = """\ This builder measures build performance for Linux developer builds, by simulating developer build scenarios on a high spec bot.\ """, builder_spec = builder_config.builder_spec( gclient_config = builder_config.gclient_config( config = "chromium", apply_configs = [ "siso_latest", ], ), chromium_config = builder_config.chromium_config( config = "chromium", apply_configs = [ "mb", ], target_platform = builder_config.target_platform.LINUX, ), ), gn_args = { "ninja": gn_args.config(configs = ["developer", "remoteexec", "no_siso", "reclient", "linux", "x64"]), "siso_native": gn_args.config(configs = ["developer", "remoteexec", "no_reclient", "linux", "x64"]), "siso_no_clang_modules": gn_args.config(configs = ["developer", "remoteexec", "no_reclient", "linux", "x64", "no_clang_modules"]), }, os = os.LINUX_DEFAULT, console_view_entry = consoles.console_view_entry( category = "build perf|linux", short_name = "dev", ), reclient_jobs = 5120, siso_profile_mode = "local", # Setting -1 makes siso use the default remote concurrency. siso_remote_jobs = -1, ) developer_build_perf_builder( name = "win-build-perf-developer", description_html = """\ This builder measures build performance for Windows developer builds, by simulating developer build scenarios on a high spec bot.\ """, builder_spec = builder_config.builder_spec( gclient_config = builder_config.gclient_config( config = "chromium", apply_configs = [ "siso_latest", ], ), chromium_config = builder_config.chromium_config( config = "chromium", apply_configs = [ "mb", ], target_platform = builder_config.target_platform.WIN, ), ), gn_args = { "ninja": gn_args.config(configs = ["windows_developer", "remoteexec", "no_siso", "reclient"]), "siso_native": gn_args.config(configs = ["windows_developer", "remoteexec", "no_reclient"]), # TODO(https://crbug.com/425537956): Add no clang modules build config after enabling clang modules on Windows. }, os = os.WINDOWS_DEFAULT, console_view_entry = consoles.console_view_entry( category = "build perf|windows", short_name = "dev", ), reclient_jobs = 1000, # Enabling local profiler hangs windows builders (http://b/476821630). So set cloud explicitly here. siso_profile_mode = "cloud", # Setting -1 makes siso use the default remote concurrency. siso_remote_jobs = -1, ) developer_build_perf_builder( name = "mac-build-perf-developer", description_html = """\ This builder measures build performance for Mac developer builds, by simulating developer build scenarios on a bot.\ """, builder_spec = builder_config.builder_spec( gclient_config = builder_config.gclient_config( config = "chromium", apply_configs = [ "siso_latest", ], ), chromium_config = builder_config.chromium_config( config = "chromium", apply_configs = [ "mb", ], target_platform = builder_config.target_platform.MAC, ), ), gn_args = { "ninja": gn_args.config(configs = ["mac_developer", "remoteexec", "no_siso", "reclient"]), "siso_native": gn_args.config(configs = ["mac_developer", "remoteexec", "no_reclient"]), "siso_no_clang_modules": gn_args.config(configs = ["mac_developer", "remoteexec", "no_reclient", "no_clang_modules"]), }, os = os.MAC_DEFAULT, cpu = cpu.ARM64, console_view_entry = consoles.console_view_entry( category = "build perf|mac", short_name = "dev", ), reclient_jobs = 640, siso_configs = [], siso_profile_mode = "local", # Setting -1 makes siso use the default remote concurrency. siso_remote_jobs = -1, ) developer_build_perf_builder( name = "ios-build-perf-developer", description_html = """\ This builder measures build performance for iOS developer builds, by simulating developer build scenarios on a bot.\ """, builder_spec = builder_config.builder_spec( gclient_config = builder_config.gclient_config( config = "ios", apply_configs = [ "siso_latest", ], ), chromium_config = builder_config.chromium_config( config = "chromium", apply_configs = [ "mb", "mac_toolchain", ], build_config = builder_config.build_config.DEBUG, target_bits = 64, target_platform = builder_config.target_platform.IOS, ), ), gn_args = { "ninja": gn_args.config(configs = ["ios_developer", "remoteexec", "no_siso", "reclient", "arm64"]), "siso_native": gn_args.config(configs = ["ios_developer", "remoteexec", "no_reclient", "arm64"]), "siso_no_clang_modules": gn_args.config(configs = ["ios_developer", "remoteexec", "no_reclient", "arm64", "no_clang_modules"]), }, os = os.MAC_DEFAULT, cpu = cpu.ARM64, console_view_entry = consoles.console_view_entry( category = "build perf|ios", short_name = "dev", ), reclient_jobs = 640, siso_configs = [], siso_profile_mode = "local", # Setting -1 makes siso use the default remote concurrency. siso_remote_jobs = -1, xcode = xcode.xcode_default, ) # Experimental builder set up to track local CPU time for Chromium build. b/333389736 ci.builder( name = "linux-build-perf-no-rbe", description_html = "Monitoring CPU time to build `chrome` target locally without remote executions.
Build stats are shown in http://shortn/_wiYV1BraSr.", executable = "recipe:chrome_build/build_perf_without_rbe", builder_spec = builder_config.builder_spec( gclient_config = builder_config.gclient_config( config = "chromium", ), chromium_config = builder_config.chromium_config( config = "chromium", apply_configs = ["mb"], build_config = builder_config.build_config.RELEASE, target_bits = 64, target_platform = builder_config.target_platform.LINUX, ), ), gn_args = gn_args.config( args = { # For analyze_includes.py "show_includes": True, }, configs = [ "no_remoteexec", "linux", "x64", ], ), os = os.LINUX_DEFAULT, console_view_entry = consoles.console_view_entry( category = "build stats", short_name = "linux", ), contact_team_email = "chrome-build-team@google.com", notifies = ["Chromium Build Time Watcher"], siso_fail_if_reapi_used = True, siso_profile_mode = "local", siso_project = siso.project.DEFAULT_UNTRUSTED, ) # RBE test builders def cq_rbe_test_builder(**kwargs): # Use CQ RBE instance and high remote_jobs to simulate CQ builds. return ci.builder( builderless = True, execution_timeout = 10 * time.hour, priority = ci_constants.DEFAULT_FYI_PRIORITY, siso_configs = ["builder"], siso_project = siso.project.TEST_UNTRUSTED, siso_remote_jobs = siso.remote_jobs.HIGH_JOBS_FOR_CQ, siso_remote_linking = True, use_clang_coverage = True, **kwargs ) def ci_rbe_test_builder(**kwargs): # Use CI RBE instance to simulate CI builds. return ci.builder( builderless = True, execution_timeout = 10 * time.hour, priority = ci_constants.DEFAULT_FYI_PRIORITY, siso_configs = ["builder"], siso_project = siso.project.TEST_TRUSTED, siso_remote_jobs = siso.remote_jobs.DEFAULT, **kwargs ) # Builders with rbe-chromium-untrusted-test. cq_rbe_test_builder( name = "linux-rbe-untrusted-test", description_html = "This builder builds Linux CQ build with rbe-chroimum-untrusted-test.
" + "The build configs and the bot specs should be in sync with " + linkify_builder("try", "linux-rel-compilator", "chromium"), executable = "recipe:chrome_build/build_perf_siso", builder_spec = builder_config.builder_spec( gclient_config = builder_config.gclient_config( config = "chromium", apply_configs = [ "siso_latest", ], ), chromium_config = builder_config.chromium_config( config = "chromium", apply_configs = [ "mb", ], target_platform = builder_config.target_platform.LINUX, ), ), gn_args = { "builtin": "try/linux-rel", "no_clang_modules": gn_args.config(configs = ["try/linux-rel", "no_clang_modules"]), }, os = os.LINUX_DEFAULT, console_view_entry = consoles.console_view_entry( category = "rbe test|cq", short_name = "lin", ), ) cq_rbe_test_builder( name = "win-rbe-untrusted-test", description_html = "This builder builds Windows CQ build with rbe-chroimum-untrusted-test.
" + "The build configs and the bot specs should be in sync with " + linkify_builder("try", "win-rel-compilator", "chromium"), executable = "recipe:chrome_build/build_perf_siso", builder_spec = builder_config.builder_spec( gclient_config = builder_config.gclient_config( config = "chromium", apply_configs = [ "siso_latest", ], ), chromium_config = builder_config.chromium_config( config = "chromium", apply_configs = [ "mb", ], target_platform = builder_config.target_platform.WIN, ), ), gn_args = { "builtin": "try/win-rel", "no_clang_modules": gn_args.config(configs = ["try/win-rel", "no_clang_modules"]), }, cores = 16, os = os.WINDOWS_DEFAULT, ssd = True, console_view_entry = consoles.console_view_entry( category = "rbe test|cq", short_name = "win", ), # Downloading with "minimum" strategy doesn't work # well for the win builder because some steps are missing inputs. # e.g. mini_installer.exe siso_output_local_strategy = "greedy", ) # Builders with rbe-chromium-trusted-test. ci_rbe_test_builder( name = "linux-rbe-trusted-test", description_html = "This builder builds Linux CI build with rbe-chroimum-trusted-test.
" + "The build configs and the bot specs should be in sync with " + linkify_builder("ci", "Linux Builder", "chromium"), executable = "recipe:chrome_build/build_perf_siso", builder_spec = builder_config.builder_spec( gclient_config = builder_config.gclient_config( config = "chromium", apply_configs = [ "siso_latest", ], ), chromium_config = builder_config.chromium_config( config = "chromium", apply_configs = [ "mb", ], target_platform = builder_config.target_platform.LINUX, ), ), gn_args = { "builtin": "ci/Linux Builder", "no_clang_modules": gn_args.config(configs = ["ci/Linux Builder", "no_clang_modules"]), }, os = os.LINUX_DEFAULT, console_view_entry = consoles.console_view_entry( category = "rbe test|ci", short_name = "lin", ), siso_remote_linking = True, ) ci_rbe_test_builder( name = "win-rbe-trusted-test", description_html = "This builder builds Windows CI build with rbe-chroimum-trusted-test.
" + "The build configs and the bot specs should be in sync with " + linkify_builder("ci", "Win x64 Builder", "chromium"), executable = "recipe:chrome_build/build_perf_siso", builder_spec = builder_config.builder_spec( gclient_config = builder_config.gclient_config( config = "chromium", apply_configs = [ "siso_latest", ], ), chromium_config = builder_config.chromium_config( config = "chromium", apply_configs = [ "mb", ], target_platform = builder_config.target_platform.WIN, ), ), gn_args = { "builtin": "ci/Win x64 Builder", "no_clang_modules": gn_args.config(configs = ["ci/Win x64 Builder", "no_clang_modules"]), }, cores = 16, os = os.WINDOWS_DEFAULT, ssd = True, console_view_entry = consoles.console_view_entry( category = "rbe test|ci", short_name = "win", ), )