#!/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:|.*step is flaky).*",
            notify_emails = ["flutter-engine@grotations.appspotmail.com"],
        ),
        luci.notifier(
            name = "engine_build_flake_notification",
            on_occurrence = ["SUCCESS"],
            failed_step_regexp = "(.*test:).*",
            notify_emails = ["flutter-engine@grotations.appspotmail.com"],
        ),
    ]
    ci_yaml.generate(
        "engine",
        "stable",
        release_branches.stable.version,
        release_branches.stable.testing_ref,
        {},
        _engine_properties(),
        release_triggering_policy,
        recipes_ref = release_branches.stable.recipes_ref,
    )
    _drone_prod_builders("stable-", release_branches.stable)
    ci_yaml.generate(
        "engine",
        "beta",
        release_branches.beta.version,
        release_branches.beta.testing_ref,
        {},
        _engine_properties(),
        release_triggering_policy,
        recipes_ref = release_branches.beta.recipes_ref,
    )
    _drone_prod_builders("beta-", release_branches.beta)
    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)
