#!/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 framework repository (flutter/flutter).

The schedulers pull commits indirectly from GoB repo
(https://chromium.googlesource.com/external/github.com/flutter/flutter)
which is mirrored from https://github.com/flutter/flutter.

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 _flutter_properties():
    properties = {
        "use_cas": True,
    }
    return properties

def _setup():
    """Default configurations for branches and repos."""
    master_triggering_policy = scheduler.greedy_batching(
        max_batch_size = 6,
        max_concurrent_invocations = 1,
    )
    release_triggering_policy = scheduler.greedy_batching(
        max_batch_size = 1,
        max_concurrent_invocations = 3,
    )
    ci_yaml.generate(
        "flutter",
        "stable",
        release_branches.stable.version,
        release_branches.stable.testing_ref,
        {},
        _flutter_properties(),
        release_triggering_policy,
        recipes_ref = release_branches.stable.recipes_ref,
    )
    _drone_prod_builders("stable-", release_branches.stable.recipes_ref)
    ci_yaml.generate(
        "flutter",
        "beta",
        release_branches.beta.version,
        release_branches.beta.testing_ref,
        {},
        _flutter_properties(),
        release_triggering_policy,
        recipes_ref = release_branches.beta.recipes_ref,
    )
    _drone_prod_builders("beta-", release_branches.beta.recipes_ref)
    ci_yaml.generate(
        "flutter",
        "master",
        release_branches.master.version,
        release_branches.master.testing_ref,
        {},
        _flutter_properties(),
        master_triggering_policy,
        recipes_ref = release_branches.master.recipes_ref,
    )
    _drone_prod_builders("", release_branches.master.recipes_ref)
    _drone_try_builders()

def _drone_prod_builders(prefix, recipes_ref):
    """Generate drone builders to help with subshards."""
    recipes = ["flutter/flutter_drone"]
    for recipe in recipes:
        luci.recipe(
            name = "%s%s" % (prefix, recipe),
            recipe = recipe,
            cipd_package = "flutter/recipe_bundles/flutter.googlesource.com/recipes",
            cipd_version = "refs/heads/main",
            use_bbagent = True,
        )
    ci_yaml_config = ci_yaml.ci_yaml("flutter", "master")
    platform_properties = ci_yaml.platform_properties(ci_yaml_config)
    common.linux_prod_builder(
        name = "%sLinux SDK Drone" % prefix,
        recipe = "flutter/flutter_drone",
        console_view_name = None,
        caches = ci_yaml.legacy_swarming_caches(ci_yaml_config, None, "linux"),
        dimensions = {"device_type": "none"},
        os = platform_properties["linux"]["os"],
    )
    common.mac_prod_builder(
        name = "%sMac SDK Drone" % prefix,
        recipe = "flutter/flutter_drone",
        console_view_name = None,
        dimensions = {"device_type": "none"},
        caches = ci_yaml.legacy_swarming_caches(ci_yaml_config, None, "mac"),
        os = platform_properties["mac"]["os"],
    )
    common.windows_prod_builder(
        name = "%sWindows SDK Drone" % prefix,
        recipe = "flutter/flutter_drone",
        console_view_name = None,
        caches = ci_yaml.legacy_swarming_caches(ci_yaml_config, None, "windows"),
        dimensions = {"device_type": "none"},
        os = platform_properties["windows"]["os"],
    )

def _drone_try_builders():
    """Generate drone builders to help with subshards."""
    list_view_name = "flutter-try"
    ci_yaml_config = ci_yaml.ci_yaml("flutter", "master")
    platform_properties = ci_yaml.platform_properties(ci_yaml_config)
    common.linux_try_builder(
        name = "Linux SDK Drone|drn",
        recipe = "flutter/flutter_drone",
        repo = repos.GIT_REMOTE["flutter"],
        list_view_name = list_view_name,
        caches = ci_yaml.legacy_swarming_caches(ci_yaml_config, None, "linux"),
        dimensions = {"device_type": "none"},
        os = platform_properties["linux"]["os"],
    )
    common.mac_try_builder(
        name = "Mac SDK Drone|drn",
        recipe = "flutter/flutter_drone",
        repo = repos.GIT_REMOTE["flutter"],
        list_view_name = list_view_name,
        dimensions = {"device_type": "none"},
        caches = ci_yaml.legacy_swarming_caches(ci_yaml_config, None, "mac"),
        os = platform_properties["mac"]["os"],
    )
    common.windows_try_builder(
        name = "Windows SDK Drone|drn",
        recipe = "flutter/flutter_drone",
        repo = repos.GIT_REMOTE["flutter"],
        list_view_name = list_view_name,
        caches = ci_yaml.legacy_swarming_caches(ci_yaml_config, None, "windows"),
        dimensions = {"device_type": "none"},
        os = platform_properties["windows"]["os"],
    )

flutter_config = struct(setup = _setup)
