#!/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 engine staging builds.

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.
"""

load("//lib/common.star", "common")
load("//lib/repos.star", "repos")
load("//lib/timeout.star", "timeout")

# Global OS variables
MAC_OS = "Mac"
WINDOWS_OS = "Windows-10"

# Default caches for Windows builders
WINDOWS_DEFAULT_CACHES = [
    # Builder
    swarming.cache(name = "builder_windows_engine_staging", path = "builder"),
]

def _setup():
    engine_staging_prod_config()

def engine_staging_prod_config():
    """Staging configurations for the engine repository."""
    engine_v2_recipe_name = "engine_v2/engine_v2"
    engine_v2_builder_recipe_name = "engine_v2/builder"

    recipes = [engine_v2_recipe_name, engine_v2_builder_recipe_name]

    for recipe_name in recipes:
        luci.recipe(
            name = recipe_name,
            cipd_package = "flutter/recipe_bundles/flutter.googlesource.com/recipes",
            cipd_version = "refs/heads/master",
            use_bbagent = True,
        )

    # Defines console views.
    console_view_name = "engine_staging"
    luci.console_view(
        name = console_view_name,
        repo = repos.ENGINE,
        refs = [r"refs/heads/master"],
    )

    # Defines schedulers for staging builders.
    trigger_name = "master-gitiles-trigger-engine-staging"
    luci.gitiles_poller(
        name = trigger_name,
        bucket = "prod",
        repo = repos.ENGINE,
        refs = [r"refs/heads/master"],
    )

    # Defines triggering policy
    triggering_policy = scheduler.greedy_batching(
        max_batch_size = 100,
        max_concurrent_invocations = 1,
    )
    # Defines engine prod builders

    # Drone builder for windows staging subbuilds.
    common.windows_prod_builder(
        name = "Windows Staging Engine Drone",
        console_view_name = None,
        priority = 30,
        dimensions = {"device_type": "none"},
        recipe = engine_v2_builder_recipe_name,
        properties = {
            "use_cas": True,
        },
        bucket = "staging",
        pool = "luci.flutter.staging",
        os = WINDOWS_OS,
        expiration_timeout = timeout.LONG_EXPIRATION,
        caches = WINDOWS_DEFAULT_CACHES,
    )
    windows_engine_builds = [
        "windows_host_engine",
        "windows_android_aot_engine",
    ]
    for build in windows_engine_builds:
        common.windows_prod_builder(
            name = "Windows staging %s|%s" % (build, common.short_name(build)),
            recipe = engine_v2_recipe_name,
            console_view_name = console_view_name,
            triggered_by = [trigger_name],
            triggering_policy = triggering_policy,
            properties = {
                "config_name": build,
                "use_cas": True,
                "environment": "Staging",
                "git_repo": "Engine",
            },
            category = "Windows",
            bucket = "staging",
            pool = "luci.flutter.staging",
            os = WINDOWS_OS,
            expiration_timeout = timeout.LONG_EXPIRATION,
            caches = WINDOWS_DEFAULT_CACHES,
        )

engine_staging_config = struct(setup = _setup)
