#!/usr/bin/env lucicfg
# Copyright 2019 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 infra repository."""

load("//lib/accounts.star", "accounts")
load("//lib/builder_groups.star", "builder_groups")
load("//lib/common.star", "common")
load("//lib/repos.star", "repos")

def _setup():
    console_name = "infra"
    luci.console_view(name = console_name, repo = repos.FLUTTER_INFRA, refs = ["refs/heads/main"])
    luci.list_view(
        name = "infra-try",
        title = "infra try builders",
    )

    executable = luci.recipe(
        name = "infra/luci_config",
        cipd_package = "flutter/recipe_bundles/flutter.googlesource.com/recipes",
        cipd_version = "refs/heads/main",
        use_bbagent = True,
    )

    # Presubmit builders

    # Builder configuration to validate recipe changes in presubmit.
    common.builder(
        name = "luci-config",
        builder_group = builder_groups.infra_try,
        # This builder is very quick to run, so we run it on every CQ attempt to
        # minimize the chances of expectation file conflicts between CLs that land
        # around the same time.
        cq_disable_reuse = True,
        dimensions = {
            "device_type": "none",
            "os": "Ubuntu",
        },
        executable = executable,
        execution_timeout = 10 * time.minute,
        location_regexp_exclude = [
            common.LOCATION_REGEXP_MARKDOWN,
            common.LOCATION_REGEXP_OWNERS,
        ],
        properties = {},
        service_account = accounts.FLUTTER_TRY,
        experiments = {"luci.recipes.use_python3": 100},
    )

infra_config = struct(setup = _setup)
