| #!/usr/bin/env lucicfg |
| # Copyright 2020 The Chromium Authors |
| # Use of this source code is governed by a BSD-style license that can be |
| # found in the LICENSE file. |
| |
| # See https://chromium.googlesource.com/infra/luci/luci-go/+/HEAD/lucicfg/doc/README.md |
| # for information on starlark/lucicfg |
| |
| """Entrypoint for `lucicfg generate infra/config/main.star`.""" |
| |
| load("@chromium-luci//branches.star", "branches") |
| load("@chromium-luci//builders.star", "os") |
| load("@chromium-luci//chromium_luci.star", "chromium_luci") |
| load("@chromium-luci//targets.star", "targets") |
| load( |
| "//lib/builder_exemptions.star", |
| "exempted_from_contact_builders", |
| "exempted_from_description_builders", |
| "exempted_gardened_mirrors_in_cq_builders", |
| "mega_cq_excluded_builders", |
| "mega_cq_excluded_gardener_rotations", |
| "standalone_trybot_excluded_builder_groups", |
| "standalone_trybot_excluded_builders", |
| ) |
| load("//project.star", "settings") |
| |
| lucicfg.check_version( |
| min = "1.44.1", |
| message = "Update depot_tools", |
| ) |
| |
| # Use LUCI Scheduler BBv2 names and add Scheduler realms configs. |
| lucicfg.enable_experiment("crbug.com/1182002") |
| |
| # Tell lucicfg what files it is allowed to touch |
| lucicfg.config( |
| config_dir = "generated", |
| tracked_files = [ |
| "builders/*/*/*", |
| "builders/*/*/*/*", |
| "builders/alerting-builders.txt", |
| "builders/gn_args_locations.json", |
| "builder-owners/*.txt", |
| "cq-builders.md", |
| "cq-usage/cq-tests.md", |
| "cq-usage/default.cfg", |
| "cq-usage/full.cfg", |
| "cq-usage/mega_cq_bots.txt", |
| "health-specs/health-specs.json", |
| "luci/commit-queue.cfg", |
| "luci/cr-buildbucket.cfg", |
| "luci/luci-analysis.cfg", |
| "luci/luci-bisection.cfg", |
| "luci/luci-logdog.cfg", |
| "luci/luci-milo.cfg", |
| "luci/luci-notify.cfg", |
| "luci/luci-notify/email-templates/*.template", |
| "luci/luci-scheduler.cfg", |
| "luci/project.cfg", |
| "luci/realms.cfg", |
| "luci/testhaus.cfg", |
| "outages.pyl", |
| "sheriff-rotations/*.txt", |
| "project.pyl", |
| "testing/*.pyl", |
| ], |
| fail_on_warnings = True, |
| ) |
| |
| # Just copy Testhaus config to generated outputs. |
| lucicfg.emit( |
| dest = "luci/testhaus.cfg", |
| data = io.read_file("testhaus.cfg"), |
| ) |
| |
| # Just copy LUCI Analysis config to generated outputs. |
| lucicfg.emit( |
| dest = "luci/luci-analysis.cfg", |
| data = io.read_file("luci-analysis.cfg"), |
| ) |
| |
| # Just copy LUCI Bisection config to generated outputs. |
| lucicfg.emit( |
| dest = "luci/luci-bisection.cfg", |
| data = io.read_file("luci-bisection.cfg"), |
| ) |
| |
| luci.project( |
| name = settings.project, |
| config_dir = "luci", |
| buildbucket = "cr-buildbucket.appspot.com", |
| logdog = "luci-logdog.appspot.com", |
| milo = "luci-milo.appspot.com", |
| notify = "luci-notify.appspot.com", |
| scheduler = "luci-scheduler.appspot.com", |
| swarming = "chromium-swarm.appspot.com", |
| acls = [ |
| acl.entry( |
| roles = [ |
| acl.LOGDOG_READER, |
| acl.PROJECT_CONFIGS_READER, |
| acl.SCHEDULER_READER, |
| ], |
| groups = "all", |
| ), |
| acl.entry( |
| roles = acl.LOGDOG_WRITER, |
| groups = "luci-logdog-chromium-writers", |
| ), |
| acl.entry( |
| roles = acl.SCHEDULER_OWNER, |
| groups = "project-chromium-admins", |
| ), |
| ], |
| bindings = [ |
| luci.binding( |
| roles = "role/configs.validator", |
| groups = [ |
| "project-chromium-try-task-accounts", |
| "project-chromium-ci-task-accounts", |
| ], |
| ), |
| # Roles for LUCI Analysis. |
| luci.binding( |
| roles = "role/analysis.reader", |
| groups = "all", |
| ), |
| luci.binding( |
| roles = "role/analysis.queryUser", |
| groups = "authenticated-users", |
| ), |
| luci.binding( |
| roles = "role/analysis.editor", |
| groups = ["project-chromium-committers", "googlers"], |
| ), |
| # Role for builder health indicators |
| luci.binding( |
| roles = "role/buildbucket.healthUpdater", |
| users = ["generate-builder@cr-builder-health-indicators.iam.gserviceaccount.com"], |
| ), |
| ], |
| ) |
| |
| luci.cq( |
| submit_max_burst = 2, |
| submit_burst_delay = time.minute, |
| status_host = "chromium-cq-status.appspot.com", |
| honor_gerrit_linked_accounts = True, |
| ) |
| |
| luci.logdog( |
| gs_bucket = "chromium-luci-logdog", |
| ) |
| |
| luci.milo( |
| logo = "https://storage.googleapis.com/chrome-infra-public/logo/chromium.svg", |
| ) |
| |
| luci.notify( |
| tree_closing_enabled = True, |
| ) |
| |
| chromium_luci.configure_project( |
| name = settings.project, |
| ref = settings.ref, |
| is_main = settings.is_main, |
| platforms = settings.platforms, |
| experiments = [ |
| "targets.generate_pyl_entry_default_off", |
| "targets.module_name_without_slash", |
| "targets.module_scheme_generator", |
| "targets.module_scheme_junit_tests", |
| "targets.module_scheme_regex", |
| "targets.module_scheme_script_tests", |
| ], |
| ) |
| |
| chromium_luci.configure_per_builder_outputs( |
| root_dir = "builders", |
| ) |
| |
| chromium_luci.configure_builder_config( |
| exempted_gardened_mirrors_in_cq_builders = exempted_gardened_mirrors_in_cq_builders, |
| mega_cq_excluded_builders = mega_cq_excluded_builders, |
| mega_cq_excluded_gardener_rotations = mega_cq_excluded_gardener_rotations, |
| standalone_trybot_excluded_builder_groups = standalone_trybot_excluded_builder_groups, |
| standalone_trybot_excluded_builders = standalone_trybot_excluded_builders, |
| cq_groups_to_generate_test_coverage_files = { |
| "cq": "cq-usage/cq-tests.md", |
| }, |
| ) |
| |
| chromium_luci.configure_builder_health_indicators( |
| unhealthy_period_days = 7, |
| pending_time_p50_min = 20, |
| exempted_from_contact_builders = exempted_from_contact_builders, |
| ) |
| |
| chromium_luci.configure_builders( |
| enable_alerts_configuration = True, |
| os_dimension_overrides = { |
| os.LINUX_DEFAULT: chromium_luci.os_dimension_overrides( |
| default = os.LINUX_JAMMY, |
| overrides = json.decode(io.read_file("//lib/linux-default.json")), |
| ), |
| os.MAC_DEFAULT: "Mac-15|Mac-26", |
| os.MAC_BETA: "Mac-26", |
| os.WINDOWS_DEFAULT: os.WINDOWS_10, |
| }, |
| exempted_from_description_builders = exempted_from_description_builders, |
| ) |
| |
| chromium_luci.configure_ci( |
| main_console_view = "main" if not settings.is_main else None, |
| test_results_bq_dataset_name = "chromium", |
| resultdb_index_by_timestamp = True, |
| ) |
| |
| chromium_luci.configure_gardener_rotations( |
| rotation_files_path = "sheriff-rotations", |
| ) |
| |
| chromium_luci.configure_targets( |
| generate_pyl_files = chromium_luci.pyl_generation_configuration( |
| mixin_overrides = { |
| # The following mixins are referenced via |
| # //testing/buildbot/waterfalls.pyl |
| "11-x86-emulator": True, |
| "amd_radeon_rx_5500_xt": True, |
| "android": True, |
| "blink_tests_write_run_histories": True, |
| "chrome-finch-swarming-pool": True, |
| "chrome-flame-fleet-pool": True, |
| "chrome-intelligence-swarming-pool": True, |
| "chrome-swarming-pool": True, |
| "chrome-tester-service-account": True, |
| "chromeos-betty-finch": True, |
| "crosier-no-arc": True, |
| "gce": True, |
| "gpu_enable_metal_debug_layers": True, |
| "gpu_force_angle_d3d11": True, |
| "gpu_force_angle_gl": True, |
| "gpu_force_angle_gles": True, |
| "gpu_force_angle_metal": True, |
| "gpu_force_angle_swiftshader": True, |
| "gpu_force_angle_vulkan": True, |
| "gpu_force_command_decoder_passthrough": True, |
| "gpu_force_command_decoder_validating": True, |
| "gpu_force_high_performance_gpu": True, |
| "gpu_force_high_performance_gpu_for_webgl_metal": True, |
| "gpu_force_skia_graphite": True, |
| "gpu_gtest_common_args": True, |
| "gpu_integration_test_common_args": True, |
| "gpu_integration_test_expected_color_args": True, |
| "gpu_integration_test_pixel_args": True, |
| "gpu_integration_test_screenshot_sync_args": True, |
| "gpu_integration_test_webgl1_args": True, |
| "gpu_integration_test_webgl2_args": True, |
| "has_native_resultdb_integration": True, |
| "intel_uhd_630_or_770": True, |
| "ios_runtime_cache_18_2": True, |
| "use-ios-simulator-cache": True, |
| "long_skylab_timeout": True, |
| "mac_14_x64": True, |
| "mac_default_arm64": True, |
| "mac_default_x64": True, |
| "mac_toolchain": True, |
| "mac_x64_ai_wpt_shards": True, |
| "non-gce": True, |
| "nvidia_geforce_gtx_1660": True, |
| "out_dir_arg": True, |
| "skia_gold_test": True, |
| "skylab-tauto-chromium-graphics": True, |
| "skylab-20-tests-per-shard": True, |
| "skylab-40-tests-per-shard": True, |
| "skylab-50-tests-per-shard": True, |
| "skylab-rdb-gtest": True, |
| "skylab-rdb-native": True, |
| "skylab-rdb-tast": True, |
| "tfc-cq-tast": True, |
| "vaapi_unittest_args": True, |
| "vaapi_unittest_libfake_args": True, |
| "win-arm64": True, |
| "win10": True, |
| "win10-any": True, |
| "xcode_26_main": True, |
| "xctest": True, |
| |
| # The following mixins need to always be generated in mixins.pyl |
| # because they are used by //content/test/gpu/find_bad_machines.py |
| "chromium_nexus_5x_oreo": targets.IGNORE_UNUSED, |
| "chromium_pixel_2_pie": targets.IGNORE_UNUSED, |
| "chromium_pixel_2_q": targets.IGNORE_UNUSED, |
| "gpu_amd_rx_5500_xt_linux_experimental": targets.IGNORE_UNUSED, |
| "gpu_nvidia_shield_tv_stable": targets.IGNORE_UNUSED, |
| "gpu_pixel_10_stable": targets.IGNORE_UNUSED, |
| "gpu_pixel_4_stable": targets.IGNORE_UNUSED, |
| "gpu_pixel_6_experimental": targets.IGNORE_UNUSED, |
| "gpu_pixel_6_stable": targets.IGNORE_UNUSED, |
| "gpu_samsung_a13_stable": targets.IGNORE_UNUSED, |
| "gpu_samsung_a23_stable": targets.IGNORE_UNUSED, |
| "gpu_samsung_s23_stable": targets.IGNORE_UNUSED, |
| "gpu_samsung_s24_stable": targets.IGNORE_UNUSED, |
| "linux_amd_780m_experimental": targets.IGNORE_UNUSED, |
| "linux_amd_890m_experimental": targets.IGNORE_UNUSED, |
| "linux_amd_rx_5500_xt": targets.IGNORE_UNUSED, |
| "linux_amd_rx_7600_stable": targets.IGNORE_UNUSED, |
| "linux_intel_uhd_630_experimental": targets.IGNORE_UNUSED, |
| "linux_intel_uhd_630_stable": targets.IGNORE_UNUSED, |
| "linux_intel_uhd_770_stable": targets.IGNORE_UNUSED, |
| "linux_nvidia_gtx_1660_experimental": targets.IGNORE_UNUSED, |
| "linux_nvidia_gtx_1660_stable": targets.IGNORE_UNUSED, |
| "linux_nvidia_rtx_4070_super_stable": targets.IGNORE_UNUSED, |
| "mac_arm64_apple_m1_gpu_experimental": targets.IGNORE_UNUSED, |
| "mac_arm64_apple_m1_gpu_stable": targets.IGNORE_UNUSED, |
| "mac_arm64_apple_m2_retina_gpu_experimental": targets.IGNORE_UNUSED, |
| "mac_arm64_apple_m2_retina_gpu_stable": targets.IGNORE_UNUSED, |
| "mac_arm64_apple_m3_retina_gpu_stable": targets.IGNORE_UNUSED, |
| "mac_mini_intel_gpu_experimental": targets.IGNORE_UNUSED, |
| "mac_mini_intel_gpu_stable": targets.IGNORE_UNUSED, |
| "mac_pro_amd_gpu": targets.IGNORE_UNUSED, |
| "mac_retina_amd_555x_gpu_stable": targets.IGNORE_UNUSED, |
| "mac_retina_amd_gpu_experimental": targets.IGNORE_UNUSED, |
| "mac_retina_amd_gpu_stable": targets.IGNORE_UNUSED, |
| "win10_intel_uhd_630_experimental": targets.IGNORE_UNUSED, |
| "win10_intel_uhd_630_stable": targets.IGNORE_UNUSED, |
| "win10_intel_uhd_770_stable": targets.IGNORE_UNUSED, |
| "win10_nvidia_gtx_1660_experimental": targets.IGNORE_UNUSED, |
| "win10_nvidia_gtx_1660_stable": targets.IGNORE_UNUSED, |
| "win11_amd_780m_experimental": targets.IGNORE_UNUSED, |
| "win11_amd_890m_experimental": targets.IGNORE_UNUSED, |
| "win11_amd_rx_5500_xt_experimental": targets.IGNORE_UNUSED, |
| "win11_amd_rx_5500_xt_stable": targets.IGNORE_UNUSED, |
| "win11_amd_rx_7600_stable": targets.IGNORE_UNUSED, |
| "win11_nvidia_rtx_4070_super_experimental": targets.IGNORE_UNUSED, |
| "win11_nvidia_rtx_4070_super_stable": targets.IGNORE_UNUSED, |
| "win11_qualcomm_snapdragon_x_elite_stable": targets.IGNORE_UNUSED, |
| |
| # The angle repo uses a script that wraps generate_buildbot_json.py |
| # which consumes //testing/buildbot/mixins.pyl (via the |
| # chromium/src/testing subtree repo) and adds additional mixins, the |
| # following mixins need to always be generated in mixins.pyl because |
| # they are used by the angle pyl files |
| "chromium-tester-service-account": targets.IGNORE_UNUSED, |
| "gpu_linux_gce_stable": targets.IGNORE_UNUSED, |
| "gpu_win_gce_stable": targets.IGNORE_UNUSED, |
| "gpu-swarming-pool": targets.IGNORE_UNUSED, |
| "limited_capacity_bot": targets.IGNORE_UNUSED, |
| "linux-jammy": targets.IGNORE_UNUSED, |
| "no_gpu": targets.IGNORE_UNUSED, |
| "no_tombstones": targets.IGNORE_UNUSED, |
| "swarming_containment_auto": targets.IGNORE_UNUSED, |
| "timeout_15m": targets.IGNORE_UNUSED, |
| "very_limited_capacity_bot": targets.IGNORE_UNUSED, |
| "win10_gce_gpu_pool": targets.IGNORE_UNUSED, |
| "x86-64": targets.IGNORE_UNUSED, |
| }, |
| variant_overrides = { |
| # The following variants are referenced via |
| # //testing/buildbot/waterfalls.pyl |
| "AMD_RADEON_RX_5500_XT": True, |
| "CHANNEL_BETA": True, |
| "CHANNEL_DEV": True, |
| "CHANNEL_STABLE": True, |
| "CROS_GPU_BRYA_RELEASE_LKGM": True, |
| "CROS_GPU_CORSOLA_RELEASE_LKGM": True, |
| "CROS_GPU_SKYRIM_RELEASE_LKGM": True, |
| "CROS_LKGM": True, |
| "CROS_JACUZZI_RELEASE_LKGM": True, |
| "INTEL_UHD_630_OR_770": True, |
| "IPHONE_13": True, |
| "NVIDIA_GEFORCE_GTX_1660": True, |
| "SIM_IPHONE_14_18_2": True, |
| }, |
| ), |
| autoshard_exceptions_file = "//autoshard_exceptions.json", |
| ) |
| |
| chromium_luci.configure_try( |
| test_results_bq_dataset_name = "chromium", |
| resultdb_index_by_timestamp = True, |
| additional_default_exclude_path_regexps = ["docs/.+"], |
| ) |
| |
| # An all-purpose public realm. |
| luci.realm( |
| name = "public", |
| bindings = [ |
| luci.binding( |
| roles = "role/buildbucket.reader", |
| groups = "all", |
| ), |
| luci.binding( |
| roles = "role/resultdb.invocationCreator", |
| groups = "project-chromium-tryjob-access", |
| ), |
| # Allow everyone to view Turbo CI workflows |
| luci.binding( |
| roles = "role/turboci.nodeReaderExternal", |
| groups = "all", |
| ), |
| # Other roles are inherited from @root which grants them to group:all. |
| ], |
| ) |
| |
| luci.realm( |
| name = "ci", |
| bindings = [ |
| # Allow CI builders to create invocations in their own builds. |
| luci.binding( |
| roles = "role/resultdb.invocationCreator", |
| groups = "project-chromium-ci-task-accounts", |
| ), |
| ], |
| ) |
| |
| luci.realm( |
| name = "try", |
| bindings = [ |
| # Allow try builders to create invocations in their own builds. |
| luci.binding( |
| roles = "role/resultdb.invocationCreator", |
| groups = [ |
| "project-chromium-try-task-accounts", |
| # In order to be able to reproduce test tasks that have |
| # ResultDB enabled (at this point that should be all |
| # tests), a realm must be provided. The ability to |
| # trigger machines in the test pool is associated with |
| # the try realm, so allow those who can trigger swarming |
| # tasks in that pool tasks to create invocations. |
| "chromium-led-users", |
| "project-chromium-tryjob-access", |
| ], |
| ), |
| # Allow everyone to view Turbo CI workflows |
| luci.binding( |
| roles = "role/turboci.nodeReaderExternal", |
| groups = "all", |
| ), |
| ], |
| ) |
| |
| # Allows builders to write baselines and query ResultDB for new tests. |
| # TODO(crbug.com/40276195) @project is not available, and @root should inherit into |
| # project so we'll do this for now until @project is supported. |
| luci.realm( |
| name = "@root", |
| bindings = [ |
| luci.binding( |
| roles = "role/resultdb.baselineWriter", |
| groups = [ |
| "project-chromium-ci-task-accounts", |
| "project-chromium-try-task-accounts", |
| ], |
| users = [ |
| "chromium-orchestrator@chops-service-accounts.iam.gserviceaccount.com", |
| ], |
| ), |
| luci.binding( |
| roles = "role/resultdb.baselineReader", |
| groups = [ |
| "project-chromium-try-task-accounts", |
| ], |
| users = [ |
| "chromium-orchestrator@chops-service-accounts.iam.gserviceaccount.com", |
| ], |
| ), |
| ], |
| ) |
| |
| luci.realm( |
| name = "@project", |
| bindings = [ |
| # Allow everyone (including non-logged-in users) to see chromium tree status. |
| luci.binding( |
| roles = "role/treestatus.limitedReader", |
| groups = [ |
| "all", |
| ], |
| ), |
| # Only allow Googlers to see PII. |
| luci.binding( |
| roles = "role/treestatus.reader", |
| groups = [ |
| "googlers", |
| ], |
| users = [ |
| "chromium-status-hr@appspot.gserviceaccount.com", |
| "luci-notify@appspot.gserviceaccount.com", |
| "luci-bisection@appspot.gserviceaccount.com", |
| ], |
| ), |
| # Only allow Googlers and service accounts. |
| luci.binding( |
| roles = "role/treestatus.writer", |
| groups = [ |
| "googlers", |
| ], |
| users = [ |
| "luci-notify@appspot.gserviceaccount.com", |
| "luci-bisection@appspot.gserviceaccount.com", |
| ], |
| ), |
| ], |
| ) |
| |
| luci.realm( |
| name = "webrtc", |
| bindings = [ |
| # Allow WebRTC builders to create invocations in their own builds. |
| luci.binding( |
| roles = "role/resultdb.invocationCreator", |
| groups = "project-chromium-ci-task-accounts", |
| ), |
| ], |
| ) |
| |
| luci.builder.defaults.test_presentation.set(resultdb.test_presentation(grouping_keys = ["status", "v.test_suite"])) |
| |
| exec("//swarming.star") |
| |
| exec("//recipes.star") |
| exec("//gn_args/gn_args.star") |
| |
| exec("@chromium-targets//declarations.star") |
| |
| exec("//notifiers.star") |
| |
| exec("//subprojects/build/subproject.star") |
| exec("//subprojects/chrome/subproject.star") |
| exec("//subprojects/chromium/subproject.star") |
| exec("//subprojects/infra/subproject.star") |
| branches.exec("//subprojects/codesearch/subproject.star") |
| branches.exec("//subprojects/findit/subproject.star") |
| branches.exec("//subprojects/flakiness/subproject.star") |
| branches.exec("//subprojects/reviver/subproject.star") |
| branches.exec("//subprojects/webrtc/subproject.star") |
| |
| exec("//generators/cq-usage.star") |
| branches.exec("//generators/cq-builders-md.star") |
| |
| exec("//generators/builder-owners.star") |
| exec("//generators/sort-consoles.star") |
| |
| # Execute validators after eveything except the outage file so that we're |
| # validating the final non-outages configuration |
| exec("//validators/builder-group-triggers.star") |
| exec("//validators/builders-in-consoles.star") |
| |
| # Notify findit about completed builds for code coverage purposes |
| luci.buildbucket_notification_topic( |
| name = "projects/findit-for-me/topics/buildbucket_notification", |
| ) |
| |
| # Execute this file last so that any configuration changes needed for handling |
| # outages gets final say |
| exec("//outages/outages.star") |