blob: acb2f99242e9fb292d0b77ef1d904931552e7456 [file] [log] [blame]
#!/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/common.star", "common")
load("//lib/repos.star", "repos")
load("//lib/timeout.star", "timeout")
WIN_DEFAULT_CACHES = [
# Visual Studio
swarming.cache(name = "vsbuild", path = "vsbuild"),
# Pub cache
swarming.cache(name = "pub_cache", path = ".pub-cache"),
]
def _setup(branches):
"""Set default configurations for builders, and setup recipes."""
platform_args = {
"windows": {
"caches": WIN_DEFAULT_CACHES,
"os": "Windows",
},
"linux": {
"os": "Linux",
},
}
plugins_define_recipes()
plugins_try_config(platform_args)
plugins_product_tagged_config_setup(platform_args)
plugins_prod_config(
"master",
branches.master.version,
branches.master.testing_ref,
branches.master.release_ref,
platform_args,
)
def plugins_define_recipes():
"""Defines recipes for plugins repo."""
luci.recipe(
name = "plugins/plugins",
cipd_package = "flutter/recipe_bundles/flutter.googlesource.com/recipes",
cipd_version = "refs/heads/master",
)
luci.recipe(
name = "plugins/plugins_publish",
cipd_package = "flutter/recipe_bundles/flutter.googlesource.com/recipes",
cipd_version = "refs/heads/master",
)
def plugins_try_config(platform_args):
"""Detailed builder configures for different platforms.
Args:
platform_args (dict): The platform arguments passed to luci builders.
For example:
{
"windows": {
"caches": [swarming.cache(name = "pub_cache", path = ".pub-cache")],
}
}
"""
# Defines a list view for try builders
list_view_name = "plugins-try"
luci.list_view(
name = list_view_name,
title = "Plugins try builders",
)
# Defines plugins Windows platform try builders
common.windows_try_builder(
name = "Windows Plugins|windows",
recipe = "plugins/plugins",
list_view_name = list_view_name,
repo = repos.PLUGINS,
execution_timeout = timeout.SHORT,
properties = {"dependencies": [{"dependency": "vs_build"}, {"dependency": "certs"}]},
**platform_args["windows"]
)
######### plugins prod config
def plugins_prod_config(branch, version, testing_ref, release_ref, platform_args):
"""Prod configurations for the plugins repository.
Args:
branch(str): The branch name we are creating configurations for.
version(str): One of master|dev|beta|stable.
testing_ref(str): The git ref we are creating configurations for.
release_ref(str): The git ref used for releases.
platform_args (dict): The platform arguments passed to luci builders.
For example:
{
"windows": {
"caches": [swarming.cache(name = "pub_cache", path = ".pub-cache")],
}
}
"""
recipe_name = ("plugins/plugins_" + version if version else "plugins/plugins")
if branch != "master":
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 for prod builders
console_view_name = ("plugins" if branch == "master" else "%s_plugins" % branch)
luci.console_view(
name = console_view_name,
repo = repos.PLUGINS,
refs = [testing_ref],
)
# Defines prod schedulers
trigger_name = branch + "-gitiles-trigger-plugins"
luci.gitiles_poller(
name = trigger_name,
bucket = "prod",
repo = repos.PLUGINS,
refs = [testing_ref],
)
# Defines triggering policy
if branch == "master":
triggering_policy = scheduler.greedy_batching(
max_batch_size = 1,
max_concurrent_invocations = 3,
)
else:
triggering_policy = scheduler.greedy_batching(
max_batch_size = 1,
max_concurrent_invocations = 3,
)
# Defines build priority, release builds should be prioritized.
priority = 30 if branch == "master" else 29
# Defines plugins Windows plugins builders
common.windows_prod_builder(
name = "Windows %s Plugins master channel|windows" % branch,
recipe = recipe_name,
console_view_name = console_view_name,
triggered_by = [trigger_name],
triggering_policy = triggering_policy,
priority = priority,
repo = repos.PLUGINS,
execution_timeout = timeout.SHORT,
properties = {"dependencies": [{"dependency": "vs_build"}, {"dependency": "certs"}]},
**platform_args["windows"]
)
common.windows_prod_builder(
name = "Windows %s Plugins stable channel|windows" % branch,
recipe = recipe_name,
console_view_name = console_view_name,
triggered_by = [trigger_name],
triggering_policy = triggering_policy,
priority = priority,
repo = repos.PLUGINS,
execution_timeout = timeout.SHORT,
properties = {
"dependencies": [{"dependency": "vs_build"}, {"dependency": "certs"}],
"channel": "stable",
},
**platform_args["windows"]
)
def plugins_product_tagged_config_setup(platform_args):
"""Builder configures for prod tasks, which were only triggered with tag changes.
Args:
platform_args (dict): The platform arguments passed to luci builders.
For example:
{
"linux": {
"os": "Linux",
},
}
"""
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)