blob: fcfd07a403d176e888bc41c9381563de32be0049 [file] [log] [blame]
#!/usr/bin/env lucicfg
#
# Copyright 2021 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
#
# main.star: lucicfg configuration for ANGLE's standalone builers.
lucicfg.config(fail_on_warnings = True)
luci.project(
name = "angle",
buildbucket = "cr-buildbucket.appspot.com",
logdog = "luci-logdog.appspot.com",
milo = "luci-milo.appspot.com",
notify = "luci-notify.appspot.com",
scheduler = "luci-scheduler.appspot.com",
swarming = "chromium-swarm.appspot.com",
acls = [
acl.entry(
roles = [
acl.PROJECT_CONFIGS_READER,
acl.LOGDOG_READER,
acl.BUILDBUCKET_READER,
acl.SCHEDULER_READER,
],
groups = "all",
),
acl.entry(
roles = [
acl.SCHEDULER_OWNER,
],
groups = "project-angle-admins"
),
acl.entry(
roles = [
acl.LOGDOG_WRITER,
],
groups = "luci-logdog-angle-writers",
),
]
)
luci.milo(
logo = "https://storage.googleapis.com/chrome-infra/OpenGL%20ES_RGB_June16.svg",
monorail_project = "angleproject",
monorail_components = ["Infra"],
)
luci.logdog(gs_bucket = "chromium-luci-logdog")
# The category for an os: a more generic grouping than specific OS versions that
# can be used for computing defaults
os_category = struct(
LINUX = "Linux",
MAC = "Mac",
WINDOWS = "Windows",
)
def os_enum(dimension, category, console_name):
return struct(dimension = dimension, category = category, console_name = console_name)
os = struct(
LINUX = os_enum("Ubuntu", os_category.LINUX, "linux"),
MAC = os_enum("Mac", os_category.MAC, "mac"),
WINDOWS = os_enum("Windows", os_category.WINDOWS, "win"),
)
# Recipes
_RECIPE_NAME_PREFIX = "recipe:"
_DEFAULT_BUILDERLESS_OS_CATEGORIES = [os_category.LINUX, os_category.WINDOWS]
_GOMA_RBE_PROD = {
"server_host": "goma.chromium.org",
"rpc_extra_params": "?prod",
}
def _recipe_for_package(cipd_package):
def recipe(*, name, cipd_version = None, recipe = None, use_bbagent = False):
# Force the caller to put the recipe prefix rather than adding it
# programatically to make the string greppable
if not name.startswith(_RECIPE_NAME_PREFIX):
fail("Recipe name {!r} does not start with {!r}"
.format(name, _RECIPE_NAME_PREFIX))
if recipe == None:
recipe = name[len(_RECIPE_NAME_PREFIX):]
return luci.recipe(
name = name,
cipd_package = cipd_package,
cipd_version = cipd_version,
recipe = recipe,
use_bbagent = use_bbagent,
)
return recipe
build_recipe = _recipe_for_package(
"infra/recipe_bundles/chromium.googlesource.com/chromium/tools/build",
)
build_recipe(
name = "recipe:angle",
)
build_recipe(
name = "recipe:run_presubmit"
)
def get_os_from_name(name):
if name.startswith("linux"):
return os.LINUX
if name.startswith("win"):
return os.WINDOWS
if name.startswith("mac"):
return os.MAC
return os.MAC
# Adds both the CI and Try standalone builders.
def angle_standalone_builder(name, clang, debug, cpu, uwp = False, trace_tests = False):
properties = {
"debug": debug,
"target_cpu": cpu,
"builder_group": "angle",
}
os = get_os_from_name(name)
dimensions = {}
dimensions["os"] = os.dimension
goma_props = {}
goma_props.update(_GOMA_RBE_PROD)
if os.category in _DEFAULT_BUILDERLESS_OS_CATEGORIES:
dimensions["builderless"] = "1"
goma_props["enable_ats"] = True
properties["$build/goma"] = goma_props
caches = []
if os.category == os_category.MAC:
# Cache for mac_toolchain tool and XCode.app
caches += [swarming.cache(name = "osx_sdk", path = "osx_sdk")]
properties["$depot_tools/osx_sdk"] = {
"sdk_version": "12D4e"
}
if not clang:
properties["clang"] = False
if uwp:
properties["uwp"] = True
if trace_tests:
properties["trace_tests"] = True
luci.builder(
name = name,
bucket = "ci",
triggered_by = ["master-poller"],
executable = "recipe:angle",
service_account = "angle-ci-builder@chops-service-accounts.iam.gserviceaccount.com",
properties = properties,
dimensions = dimensions,
caches = caches,
build_numbers = True,
)
luci.builder(
name = name,
bucket = "try",
executable = "recipe:angle",
service_account = "angle-try-builder@chops-service-accounts.iam.gserviceaccount.com",
properties = properties,
dimensions = dimensions,
caches = caches,
build_numbers = True,
)
# Trace tests are only included automatically if files in the capture folder change.
if trace_tests:
config = "trace"
location_regexp = [
".+/[+]/src/libANGLE/capture/.+",
".+/[+]/src/tests/capture.+",
]
else:
config = "angle"
location_regexp = None
if clang:
compiler = "clang"
elif os.category == os_category.WINDOWS:
compiler = "msvc"
else:
compiler = "gcc"
if uwp:
os = "winuwp"
else:
os = os.console_name
short_name = "dbg" if debug else "rel"
luci.console_view_entry(
console_view = "ci",
builder = "ci/" + name,
category = config + "|" + os + "|" + compiler + "|" + cpu,
short_name = short_name,
)
luci.list_view_entry(
list_view = "try",
builder = "try/" + name,
)
# Include all bots in the CQ by default except GCC configs.
if compiler != "gcc":
luci.cq_tryjob_verifier(
cq_group = 'master',
builder = "angle:try/" + name,
location_regexp = location_regexp,
)
luci.bucket(
name = "ci",
acls = [
acl.entry(
acl.BUILDBUCKET_TRIGGERER,
users = [
"angle-ci-builder@chops-service-accounts.iam.gserviceaccount.com",
"luci-scheduler@appspot.gserviceaccount.com",
],
),
],
)
luci.bucket(
name = "try",
acls = [
acl.entry(
acl.BUILDBUCKET_TRIGGERER,
groups = [
"project-angle-tryjob-access",
"service-account-cq",
],
),
],
)
luci.builder(
name = "presubmit",
bucket = "try",
executable = "recipe:run_presubmit",
service_account = "angle-try-builder@chops-service-accounts.iam.gserviceaccount.com",
build_numbers = True,
dimensions = {
"os": os.LINUX.dimension,
},
properties = {
"repo_name": "angle",
"runhooks": True,
},
)
luci.gitiles_poller(
name = "master-poller",
bucket = "ci",
repo = "https://chromium.googlesource.com/angle/angle",
refs = [
"refs/heads/master",
],
schedule = "with 10s interval",
)
# name, clang, debug, cpu, uwp, trace_tests
angle_standalone_builder("linux-clang-dbg", clang = True, debug = True, cpu = "x64")
angle_standalone_builder("linux-clang-rel", clang = True, debug = False, cpu = "x64")
angle_standalone_builder("linux-gcc-dbg", clang = False, debug = True, cpu = "x64")
angle_standalone_builder("linux-gcc-rel", clang = False, debug = False, cpu = "x64")
angle_standalone_builder("linux-trace-rel", clang = True, debug = False, cpu = "x64", trace_tests = True)
angle_standalone_builder("mac-dbg", clang = True, debug = True, cpu = "x64")
angle_standalone_builder("mac-rel", clang = True, debug = False, cpu = "x64")
angle_standalone_builder("win-clang-x86-dbg", clang = True, debug = True, cpu = "x86")
angle_standalone_builder("win-clang-x86-rel", clang = True, debug = False, cpu = "x86")
angle_standalone_builder("win-clang-x64-dbg", clang = True, debug = True, cpu = "x64")
angle_standalone_builder("win-clang-x64-rel", clang = True, debug = False, cpu = "x64")
angle_standalone_builder("win-msvc-x86-dbg", clang = False, debug = True, cpu = "x86")
angle_standalone_builder("win-msvc-x86-rel", clang = False, debug = False, cpu = "x86")
angle_standalone_builder("win-msvc-x64-dbg", clang = False, debug = True, cpu = "x64")
angle_standalone_builder("win-msvc-x64-rel", clang = False, debug = False, cpu = "x64")
angle_standalone_builder("win-trace-rel", clang = True, debug = False, cpu = "x64", trace_tests = True)
angle_standalone_builder("winuwp-x64-dbg", clang = False, debug = True, cpu = "x64", uwp = True)
angle_standalone_builder("winuwp-x64-rel", clang = False, debug = False, cpu = "x64", uwp = True)
# Views
luci.console_view(
name = "ci",
title = "ANGLE CI Builders",
repo = "https://chromium.googlesource.com/angle/angle",
refs = ["refs/heads/master"],
)
luci.list_view(
name = "try",
title = "ANGLE Try Builders",
)
luci.list_view_entry(
list_view = "try",
builder = "try/presubmit",
)
# CQ
luci.cq(
status_host = 'chromium-cq-status.appspot.com',
submit_max_burst = 4,
submit_burst_delay = 480 * time.second,
)
luci.cq_group(
name = 'master',
watch = cq.refset('https://chromium.googlesource.com/angle/angle'),
acls = [
acl.entry(
acl.CQ_COMMITTER,
groups = 'project-angle-committers',
),
acl.entry(
acl.CQ_DRY_RUNNER,
groups = 'project-angle-tryjob-access',
),
],
verifiers = [
luci.cq_tryjob_verifier(
builder = 'angle:try/presubmit',
disable_reuse = True,
),
luci.cq_tryjob_verifier(
builder = 'chromium:try/android_angle_deqp_rel_ng',
),
luci.cq_tryjob_verifier(
builder = 'chromium:try/android_angle_rel_ng',
),
luci.cq_tryjob_verifier(
builder = 'chromium:try/android_angle_vk64_deqp_rel_ng',
),
luci.cq_tryjob_verifier(
builder = 'chromium:try/android_angle_vk64_rel_ng',
),
luci.cq_tryjob_verifier(
builder = 'chromium:try/fuchsia-angle-rel',
),
luci.cq_tryjob_verifier(
builder = 'chromium:try/fuchsia-angle-try',
),
luci.cq_tryjob_verifier(
builder = 'chromium:try/linux_angle_deqp_rel_ng',
),
luci.cq_tryjob_verifier(
builder = 'chromium:try/linux_angle_ozone_rel_ng',
),
luci.cq_tryjob_verifier(
builder = 'chromium:try/linux-angle-rel',
),
luci.cq_tryjob_verifier(
builder = 'chromium:try/linux-angle-chromium-try',
),
luci.cq_tryjob_verifier(
builder = 'chromium:try/linux-angle-try',
),
luci.cq_tryjob_verifier(
builder = 'chromium:try/linux-ozone-angle-try',
),
luci.cq_tryjob_verifier(
builder = 'chromium:try/linux-swangle-try-tot-angle-x64',
),
luci.cq_tryjob_verifier(
builder = 'chromium:try/mac-angle-chromium-try',
),
luci.cq_tryjob_verifier(
builder = 'chromium:try/mac-angle-try',
),
luci.cq_tryjob_verifier(
builder = 'chromium:try/win-angle-chromium-x64-try',
),
luci.cq_tryjob_verifier(
builder = 'chromium:try/win-angle-chromium-x86-try',
),
luci.cq_tryjob_verifier(
builder = 'chromium:try/win-angle-x64-try',
),
luci.cq_tryjob_verifier(
builder = 'chromium:try/win-angle-x86-try',
),
luci.cq_tryjob_verifier(
builder = 'chromium:try/win-swangle-try-tot-angle-x86',
),
],
)