#!/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 plugins repository.
"""

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

def _setup():
    """Set default configurations for builders, and setup recipes."""
    plugins_product_tagged_config_setup()
    ci_yaml.generate("plugins", "main", None, "refs/heads/main", {}, {}, recipes_ref = release_branches.stable.recipes_ref)

def plugins_product_tagged_config_setup():
    """Builder configures for prod tasks, which were only triggered with tag changes."""
    platform_args = {
        "linux": {
            "os": "Linux",
        },
    }
    luci.recipe(
        name = "plugins/plugins_publish",
        cipd_package = "flutter/recipe_bundles/flutter.googlesource.com/recipes",
        cipd_version = "refs/heads/main",
    )

    trigger_name = "gitiles-trigger-plugins-tagged"
    ref = "refs/tags/.+"

    # poll for any tags change
    luci.gitiles_poller(
        name = trigger_name,
        bucket = "prod",
        repo = repos.PLUGINS,
        refs = [ref],
    )

    console_view_name = "plugins_tagged"
    luci.console_view(
        name = console_view_name,
        repo = repos.PLUGINS,
        refs = [ref],
    )

    publish_recipe_name = "plugins/plugins_publish"

    # Defines builders
    common.linux_prod_builder(
        name = "Linux Publish Plugins|publish",
        recipe = publish_recipe_name,
        console_view_name = console_view_name,
        triggered_by = [trigger_name],
        execution_timeout = timeout.SHORT,
        **platform_args["linux"]
    )

plugins_config = struct(setup = _setup)
