blob: a22fed725fa19d667dc9d70d5b610aaae808786f [file] [log] [blame]
#!/usr/bin/env lucicfg
# This example shows a fully functional config that defines several post-submit
# (aka CI) and pre-submit (aka Try) builders. It also includes Milo console and
# CQ build group definitions.
#
# It is a good template for small projects that want to start using lucicfg.
# Constants shared by multiple definitions below.
REPO_URL = "https://my-awesome-host.googlesource.com/my/awesome/repo"
RECIPE_BUNDLE = "infra/recipe_bundles/<your-recipe-bundle>"
# Definition of what LUCI micro-services to use and global ACLs that apply to
# all buckets.
luci.project(
name = "my-awesome-project",
buildbucket = "cr-buildbucket.appspot.com",
logdog = "luci-logdog.appspot.com",
milo = "luci-milo.appspot.com",
scheduler = "luci-scheduler.appspot.com",
swarming = "chromium-swarm.appspot.com",
acls = [
# This project is publicly readable.
acl.entry(
roles = [
acl.BUILDBUCKET_READER,
acl.LOGDOG_READER,
acl.PROJECT_CONFIGS_READER,
acl.SCHEDULER_READER,
],
groups = "all",
),
# Allow committers to use CQ and to force-trigger and stop CI builds.
acl.entry(
roles = [
acl.SCHEDULER_OWNER,
acl.CQ_COMMITTER,
],
groups = "my-awesome-project-committers",
),
# Ability to launch CQ dry runs.
acl.entry(
roles = acl.CQ_DRY_RUNNER,
groups = "my-awesome-project-tryjob-access",
),
# Group with robots that have write access to the Logdog prefix.
acl.entry(
roles = acl.LOGDOG_WRITER,
groups = "my-awesome-project-log-writers",
),
],
)
# Required Logdog configuration.
luci.logdog(gs_bucket = "my-awesome-project-logs-bucket")
# Optional tweaks.
luci.milo(
logo = "https://storage.googleapis.com/my-awesome-project-resources/logo-200x200.png",
favicon = "https://storage.googleapis.com/my-awesome-project-resources/favicon.icon",
)
luci.cq(status_host = "chromium-cq-status.appspot.com")
# Bucket with post-submit builders.
luci.bucket(name = "ci")
# Bucket with pre-submit builders.
luci.bucket(
name = "try",
acls = [
# Allow launching tryjobs directly (in addition to doing it through CQ).
acl.entry(
roles = acl.BUILDBUCKET_TRIGGERER,
groups = "my-awesome-project-tryjob-access",
),
],
)
# The Milo console with all post-submit builders, referenced below.
luci.console_view(
name = "Main Console",
repo = REPO_URL,
)
# The Milo builder list with all pre-submit builders, referenced below.
luci.list_view(
name = "Try Builders",
)
# The CQ group with all pre-submit builders, referenced below.
luci.cq_group(
name = "Main CQ",
watch = cq.refset(REPO_URL),
)
# The gitiles poller: a source of commits that trigger CI builders.
luci.gitiles_poller(
name = "my-awesome-project-poller",
bucket = "ci",
repo = REPO_URL,
)
def ci_builder(name, *, os, category, cpu="x86-64"):
"""Defines a post-submit builder."""
luci.builder(
name = name,
bucket = "ci",
executable = luci.recipe(
name = "ci_builder",
cipd_package = RECIPE_BUNDLE,
),
dimensions = {
"pool": "luci.my-awesome-project.ci",
"os": os,
"cpu": cpu,
},
service_account = "my-ci-builder@chops-service-accounts.iam.gserviceaccount.com",
execution_timeout = 45 * time.minute,
# Run this builder on commits to REPO_URL.
triggered_by = ["my-awesome-project-poller"],
)
# Add it to the console as well.
luci.console_view_entry(
builder = "ci/" + name, # disambiguate by prefixing the bucket name
console_view = "Main Console",
category = category,
)
# Actually define a bunch of CI builders.
ci_builder("xenial", os="Ubuntu-16.04", category="Linux|16.04")
ci_builder("bionic", os="Ubuntu-18.04", category="Linux|18.04")
ci_builder("mac-10.13", os="Mac-10.13", category="Mac|10.13")
ci_builder("win-32", os="Windows", cpu="x86-32", category="Win|32")
ci_builder("win-64", os="Windows", cpu="x86-64", category="Win|64")
def try_builder(name, *, os, cpu="x86-64"):
"""Defines a pre-submit builder."""
luci.builder(
name = name,
bucket = "try",
executable = luci.recipe(
name = "try_builder",
cipd_package = RECIPE_BUNDLE,
),
dimensions = {
"pool": "luci.my-awesome-project.try",
"os": os,
"cpu": cpu,
},
service_account = "my-try-builder@chops-service-accounts.iam.gserviceaccount.com",
execution_timeout = 45 * time.minute,
)
# Add to the CQ.
luci.cq_tryjob_verifier(
builder = "try/" + name,
cq_group = "Main CQ",
)
# And also to the pre-submit builders list.
luci.list_view_entry(
builder = "try/" + name,
list_view = "Try Builders",
)
# Actually define a bunch of Try builders.
try_builder("xenial", os="Ubuntu-16.04")
try_builder("bionic", os="Ubuntu-18.04")
try_builder("mac-10.13", os="Mac-10.13")
try_builder("win-32", os="Windows", cpu="x86-32")
try_builder("win-64", os="Windows", cpu="x86-64")