| #!/usr/bin/env lucicfg |
| # Copyright 2020 The Flutter Authors. All rights reserved. |
| # Use of this source code is governed by a BSD-style license that can be |
| # found in the LICENSE file. |
| """ |
| Configurations for the flutter engine repository. |
| |
| The schedulers pull commits indirectly from GoB repo |
| (https://chromium.googlesource.com/external/github.com/flutter/engine) |
| which is mirrored from https://github.com/flutter/engine. |
| |
| Try jobs use github directly but are also registered with luci-cq |
| to take advantage of led recipe builder tests. |
| """ |
| |
| load("//lib/ci_yaml/ci_yaml.star", "ci_yaml") |
| load("//lib/common.star", "common") |
| load("//lib/release_branches/release_branches.star", "release_branches") |
| load("//lib/repos.star", "repos") |
| |
| def _engine_properties(gcs_goldens_bucket = ""): |
| properties = { |
| "use_cas": True, |
| "gcs_goldens_bucket": gcs_goldens_bucket, |
| } |
| return properties |
| |
| def _setup(): |
| """Default configurations for branches and repos.""" |
| release_triggering_policy = scheduler.greedy_batching( |
| max_batch_size = 1, |
| max_concurrent_invocations = 3, |
| ) |
| notifies = [ |
| luci.notifier( |
| name = "engine_build_failure_notification", |
| on_occurrence = ["INFRA_FAILURE", "FAILURE"], |
| failed_step_regexp = "(^build|.*test:).*", |
| notify_emails = ["flutter-engine@grotations.appspotmail.com"], |
| template = luci.notifier_template( |
| name = "test_build_failure", |
| body = io.read_file("luci-notify/email-templates/test_build_failure.template"), |
| ), |
| ), |
| luci.notifier( |
| name = "engine_build_flake_notification", |
| on_occurrence = ["SUCCESS"], |
| failed_step_regexp = "(.*test:).*", |
| notify_emails = ["flutter-engine@grotations.appspotmail.com"], |
| template = luci.notifier_template( |
| name = "test_flake", |
| body = io.read_file("luci-notify/email-templates/test_flake.template"), |
| ), |
| ), |
| ] |
| ci_yaml.generate( |
| "engine", |
| "main", |
| release_branches.main.version, |
| release_branches.main.testing_ref, |
| {}, |
| _engine_properties(), |
| notifies = notifies, |
| recipes_ref = release_branches.main.recipes_ref, |
| ) |
| _drone_prod_builders("", release_branches.main) |
| for branch_name in release_branches.fuchsia.keys(): |
| branch = release_branches.fuchsia[branch_name] |
| ci_yaml.generate( |
| "engine", |
| branch_name, |
| branch.version, |
| branch.testing_ref, |
| {}, |
| _engine_properties(), |
| release_triggering_policy, |
| recipes_ref = branch.recipes_ref, |
| ) |
| |
| _drone_v2_builders() |
| _drone_try_builders() |
| |
| def _drone_prod_builders(prefix, branch): |
| """Generate drone builders to help with subshards.""" |
| recipes = ["engine/engine_builder", "engine/web_engine_drone"] |
| for recipe in recipes: |
| luci.recipe( |
| name = "%s%s" % (prefix, recipe), |
| cipd_package = "flutter/recipe_bundles/flutter.googlesource.com/recipes", |
| cipd_version = branch.recipes_ref, |
| use_bbagent = True, |
| ) |
| ci_yaml_config = ci_yaml.ci_yaml("engine", "main") |
| platform_properties = ci_yaml.platform_properties(ci_yaml_config) |
| common.linux_prod_builder( |
| name = "%sLinux Engine Drone" % prefix, |
| recipe = "engine/engine_builder", |
| console_view_name = None, |
| priority = 30, |
| caches = _caches(platform_properties, "linux"), |
| os = platform_properties["linux"]["os"], |
| ) |
| common.linux_prod_builder( |
| name = "%sLinux Web Drone" % prefix, |
| recipe = "engine/web_engine_drone", |
| properties = _engine_properties(gcs_goldens_bucket = "flutter_logs"), |
| console_view_name = None, |
| priority = 28, |
| caches = _caches(platform_properties, "linux"), |
| os = platform_properties["linux"]["os"], |
| ) |
| common.mac_prod_builder( |
| name = "%sMac Engine Drone" % prefix, |
| recipe = "engine/engine_builder", |
| console_view_name = None, |
| priority = 30, |
| caches = _caches(platform_properties, "mac"), |
| os = platform_properties["mac"]["os"], |
| ) |
| common.windows_prod_builder( |
| name = "%sWindows Engine Drone" % prefix, |
| recipe = "engine/engine_builder", |
| console_view_name = None, |
| priority = 30, |
| caches = _caches(platform_properties, "windows"), |
| os = platform_properties["windows"]["os"], |
| ) |
| |
| def _caches(platform_properties, platform, enforce_xcode_cache = False): |
| properties = {k: v for k, v in platform_properties[platform].items()} |
| osx_sdk = properties.get("$flutter/osx_sdk", {}) |
| dependencies = {} |
| if "dependencies" in properties: |
| dependencies = properties["dependencies"] |
| swarming_caches = ci_yaml.swarming_caches("engine", "main", dependencies, osx_sdk) |
| if enforce_xcode_cache: |
| swarming_caches.append(swarming.cache(name = "flutter_xcode", path = "osx_sdk")) |
| return swarming_caches |
| |
| def _drone_v2_builders(): |
| """Generate drone builders to help with subshards.""" |
| engine_v2_builder_recipe_name = "engine_v2/builder" |
| recipes = [engine_v2_builder_recipe_name] |
| for recipe in recipes: |
| luci.recipe( |
| name = recipe, |
| cipd_package = "flutter/recipe_bundles/flutter.googlesource.com/recipes", |
| cipd_version = "refs/heads/main", |
| use_bbagent = True, |
| ) |
| env_to_bucket = {"Staging": "staging", "Production": "prod"} |
| ci_yaml_config = ci_yaml.ci_yaml("engine", "main") |
| platform_properties = ci_yaml.platform_properties(ci_yaml_config) |
| for environment in ("Staging", "Production"): |
| common.linux_prod_builder( |
| name = "Linux %s Engine Drone|drn" % environment, |
| recipe = engine_v2_builder_recipe_name, |
| repo = repos.GIT_REMOTE["engine"], |
| bucket = env_to_bucket.get(environment), |
| pool = "luci.flutter.%s" % env_to_bucket.get(environment), |
| console_view_name = None, |
| priority = 30, |
| caches = _caches(platform_properties, "linux", enforce_xcode_cache = True), |
| os = platform_properties["linux"]["os"], |
| ) |
| common.mac_prod_builder( |
| name = "Mac %s Engine Drone|drn" % environment, |
| recipe = engine_v2_builder_recipe_name, |
| repo = repos.GIT_REMOTE["engine"], |
| bucket = env_to_bucket.get(environment), |
| pool = "luci.flutter.%s" % env_to_bucket.get(environment), |
| console_view_name = None, |
| priority = 30, |
| caches = _caches(platform_properties, "mac"), |
| os = platform_properties["mac"]["os"], |
| ) |
| common.windows_prod_builder( |
| name = "Windows %s Engine Drone|drn" % environment, |
| recipe = engine_v2_builder_recipe_name, |
| repo = repos.GIT_REMOTE["engine"], |
| bucket = env_to_bucket.get(environment), |
| pool = "luci.flutter.%s" % env_to_bucket.get(environment), |
| console_view_name = None, |
| priority = 30, |
| caches = _caches(platform_properties, "windows"), |
| os = platform_properties["windows"]["os"], |
| ) |
| |
| # Temporarily add a stagigng builder for legacy builders. |
| # TODO(godofredoc): https://github.com/flutter/flutter/issues/125924 |
| common.linux_prod_builder( |
| name = "Linux Engine Drone|drn", |
| recipe = "engine/engine_builder", |
| repo = repos.GIT_REMOTE["engine"], |
| bucket = env_to_bucket.get("Staging"), |
| pool = "luci.flutter.staging", |
| console_view_name = None, |
| priority = 30, |
| caches = _caches(platform_properties, "linux", enforce_xcode_cache = True), |
| os = platform_properties["linux"]["os"], |
| ) |
| |
| def _drone_try_builders(): |
| """Generate drone builders to help with subshards.""" |
| list_view_name = "engine-try" |
| ci_yaml_config = ci_yaml.ci_yaml("engine", "main") |
| platform_properties = ci_yaml.platform_properties(ci_yaml_config) |
| common.linux_try_builder( |
| name = "Linux Engine Drone|drn", |
| recipe = "engine/engine_builder", |
| repo = repos.GIT_REMOTE["engine"], |
| list_view_name = list_view_name, |
| caches = _caches(platform_properties, "linux"), |
| os = platform_properties["linux"]["os"], |
| ) |
| common.linux_try_builder( |
| name = "Linux Web Drone|webdrn", |
| recipe = "engine/web_engine_drone", |
| repo = repos.GIT_REMOTE["engine"], |
| list_view_name = list_view_name, |
| properties = _engine_properties( |
| gcs_goldens_bucket = "flutter_logs", |
| ), |
| caches = _caches(platform_properties, "linux"), |
| os = platform_properties["linux"]["os"], |
| ) |
| common.mac_try_builder( |
| name = "Mac Engine Drone|drn", |
| recipe = "engine/engine_builder", |
| repo = repos.GIT_REMOTE["engine"], |
| list_view_name = list_view_name, |
| caches = _caches(platform_properties, "mac"), |
| os = platform_properties["mac"]["os"], |
| ) |
| common.windows_try_builder( |
| name = "Windows Engine Drone|drn", |
| recipe = "engine/engine_builder", |
| repo = repos.GIT_REMOTE["engine"], |
| list_view_name = list_view_name, |
| caches = _caches(platform_properties, "windows"), |
| os = platform_properties["windows"]["os"], |
| ) |
| |
| engine_config = struct(setup = _setup) |