Add simple lucicfg configuration for art.
Notable changes:
* Removes "luci-migration@appspot.gserviceaccount.com" group as
Buildbucket Writers.
* Removes "vpython:native-python-wrapper" from swarming_tags in
builders (this has not had any functionality for a couple years
at this point).
* Replaces deprecated luci-notify "on_change" and "on_failure"
settings with "on_new_status [FAILURE INFRA_FAILURE]".
* Uses v2 bucket names in luci-scheduler.
The new configs will not be active until we change projects.cfg to
specify the new 'generated' folder.
Change-Id: I7a87a2ceb640af4cdb466d80ed4e03c1d5834f43
diff --git a/tools/luci/config/README.md b/tools/luci/config/README.md
new file mode 100644
index 0000000..2f1fd6f
--- /dev/null
+++ b/tools/luci/config/README.md
@@ -0,0 +1,20 @@
+## Configurations files for art LUCI builders.
+
+This directory contains art's configs for its LUCI builders.
+
+They are generated by the [lucicfg] tool based on Starlark code.
+See [main.star] for configs of production builders.
+
+After modifying any of the files, run `./main.star` to regenerate the configs.
+
+There are currently two helper scripts `format.sh` and `validate.sh`;
+Format is akin to `go fmt` and will automatically re-format the .star files.
+Validate will check to make sure the files are formatted and that their output
+matches the files in the `generated` directory (there is a TODO to integrate
+this with presubmit).
+
+Currently active version can be checked at
+https://luci-config.appspot.com/#/projects/art .
+
+[lucicfg]: https://chromium.googlesource.com/infra/luci/luci-go/+/refs/heads/main/lucicfg/doc/README.md
+[main.star]: ./main.star
diff --git a/tools/luci/config/format.sh b/tools/luci/config/format.sh
new file mode 100755
index 0000000..2ee9e69
--- /dev/null
+++ b/tools/luci/config/format.sh
@@ -0,0 +1,3 @@
+#!/usr/bin/env sh
+# Formats all the .star files in this directory and subdirectories.
+lucicfg fmt
diff --git a/tools/luci/config/generated/cr-buildbucket.cfg b/tools/luci/config/generated/cr-buildbucket.cfg
new file mode 100644
index 0000000..d0e029c
--- /dev/null
+++ b/tools/luci/config/generated/cr-buildbucket.cfg
@@ -0,0 +1,518 @@
+# Auto-generated by lucicfg.
+# Do not modify manually.
+#
+# For the schema of this file, see BuildbucketCfg message:
+# https://luci-config.appspot.com/schemas/projects:buildbucket.cfg
+
+buckets {
+ name: "ci"
+ acls {
+ role: WRITER
+ group: "project-art-admins"
+ }
+ acls {
+ group: "all"
+ }
+ swarming {
+ builders {
+ name: "angler-armv7-debug"
+ swarming_host: "chromium-swarm.appspot.com"
+ dimensions: "builder:angler-armv7-debug"
+ dimensions: "pool:luci.art.ci"
+ recipe {
+ name: "art"
+ cipd_package: "infra/recipe_bundles/chromium.googlesource.com/chromium/tools/build"
+ cipd_version: "refs/heads/master"
+ properties_j: "builder_group:\"client.art\""
+ }
+ execution_timeout_secs: 133200
+ expiration_secs: 36000
+ caches {
+ name: "art"
+ path: "art"
+ }
+ build_numbers: YES
+ service_account: "art-ci-builder@chops-service-accounts.iam.gserviceaccount.com"
+ }
+ builders {
+ name: "angler-armv7-ndebug"
+ swarming_host: "chromium-swarm.appspot.com"
+ dimensions: "builder:angler-armv7-ndebug"
+ dimensions: "pool:luci.art.ci"
+ recipe {
+ name: "art"
+ cipd_package: "infra/recipe_bundles/chromium.googlesource.com/chromium/tools/build"
+ cipd_version: "refs/heads/master"
+ properties_j: "builder_group:\"client.art\""
+ }
+ execution_timeout_secs: 133200
+ expiration_secs: 36000
+ caches {
+ name: "art"
+ path: "art"
+ }
+ build_numbers: YES
+ service_account: "art-ci-builder@chops-service-accounts.iam.gserviceaccount.com"
+ }
+ builders {
+ name: "angler-armv7-non-gen-cc"
+ swarming_host: "chromium-swarm.appspot.com"
+ dimensions: "builder:angler-armv7-non-gen-cc"
+ dimensions: "pool:luci.art.ci"
+ recipe {
+ name: "art"
+ cipd_package: "infra/recipe_bundles/chromium.googlesource.com/chromium/tools/build"
+ cipd_version: "refs/heads/master"
+ properties_j: "builder_group:\"client.art\""
+ }
+ execution_timeout_secs: 133200
+ expiration_secs: 36000
+ caches {
+ name: "art"
+ path: "art"
+ }
+ build_numbers: YES
+ service_account: "art-ci-builder@chops-service-accounts.iam.gserviceaccount.com"
+ }
+ builders {
+ name: "angler-armv8-debug"
+ swarming_host: "chromium-swarm.appspot.com"
+ dimensions: "builder:angler-armv8-debug"
+ dimensions: "pool:luci.art.ci"
+ recipe {
+ name: "art"
+ cipd_package: "infra/recipe_bundles/chromium.googlesource.com/chromium/tools/build"
+ cipd_version: "refs/heads/master"
+ properties_j: "builder_group:\"client.art\""
+ }
+ execution_timeout_secs: 133200
+ expiration_secs: 36000
+ caches {
+ name: "art"
+ path: "art"
+ }
+ build_numbers: YES
+ service_account: "art-ci-builder@chops-service-accounts.iam.gserviceaccount.com"
+ }
+ builders {
+ name: "angler-armv8-ndebug"
+ swarming_host: "chromium-swarm.appspot.com"
+ dimensions: "builder:angler-armv8-ndebug"
+ dimensions: "pool:luci.art.ci"
+ recipe {
+ name: "art"
+ cipd_package: "infra/recipe_bundles/chromium.googlesource.com/chromium/tools/build"
+ cipd_version: "refs/heads/master"
+ properties_j: "builder_group:\"client.art\""
+ }
+ execution_timeout_secs: 133200
+ expiration_secs: 36000
+ caches {
+ name: "art"
+ path: "art"
+ }
+ build_numbers: YES
+ service_account: "art-ci-builder@chops-service-accounts.iam.gserviceaccount.com"
+ }
+ builders {
+ name: "angler-armv8-non-gen-cc"
+ swarming_host: "chromium-swarm.appspot.com"
+ dimensions: "builder:angler-armv8-non-gen-cc"
+ dimensions: "pool:luci.art.ci"
+ recipe {
+ name: "art"
+ cipd_package: "infra/recipe_bundles/chromium.googlesource.com/chromium/tools/build"
+ cipd_version: "refs/heads/master"
+ properties_j: "builder_group:\"client.art\""
+ }
+ execution_timeout_secs: 133200
+ expiration_secs: 36000
+ caches {
+ name: "art"
+ path: "art"
+ }
+ build_numbers: YES
+ service_account: "art-ci-builder@chops-service-accounts.iam.gserviceaccount.com"
+ }
+ builders {
+ name: "bullhead-armv7-gcstress-ndebug"
+ swarming_host: "chromium-swarm.appspot.com"
+ dimensions: "builder:bullhead-armv7-gcstress-ndebug"
+ dimensions: "pool:luci.art.ci"
+ recipe {
+ name: "art"
+ cipd_package: "infra/recipe_bundles/chromium.googlesource.com/chromium/tools/build"
+ cipd_version: "refs/heads/master"
+ properties_j: "builder_group:\"client.art\""
+ }
+ execution_timeout_secs: 133200
+ expiration_secs: 36000
+ caches {
+ name: "art"
+ path: "art"
+ }
+ build_numbers: YES
+ service_account: "art-ci-builder@chops-service-accounts.iam.gserviceaccount.com"
+ }
+ builders {
+ name: "bullhead-armv8-gcstress-debug"
+ swarming_host: "chromium-swarm.appspot.com"
+ dimensions: "builder:bullhead-armv8-gcstress-debug"
+ dimensions: "pool:luci.art.ci"
+ recipe {
+ name: "art"
+ cipd_package: "infra/recipe_bundles/chromium.googlesource.com/chromium/tools/build"
+ cipd_version: "refs/heads/master"
+ properties_j: "builder_group:\"client.art\""
+ }
+ execution_timeout_secs: 133200
+ expiration_secs: 36000
+ caches {
+ name: "art"
+ path: "art"
+ }
+ build_numbers: YES
+ service_account: "art-ci-builder@chops-service-accounts.iam.gserviceaccount.com"
+ }
+ builders {
+ name: "bullhead-armv8-gcstress-ndebug"
+ swarming_host: "chromium-swarm.appspot.com"
+ dimensions: "builder:bullhead-armv8-gcstress-ndebug"
+ dimensions: "pool:luci.art.ci"
+ recipe {
+ name: "art"
+ cipd_package: "infra/recipe_bundles/chromium.googlesource.com/chromium/tools/build"
+ cipd_version: "refs/heads/master"
+ properties_j: "builder_group:\"client.art\""
+ }
+ execution_timeout_secs: 133200
+ expiration_secs: 36000
+ caches {
+ name: "art"
+ path: "art"
+ }
+ build_numbers: YES
+ service_account: "art-ci-builder@chops-service-accounts.iam.gserviceaccount.com"
+ }
+ builders {
+ name: "fugu-debug"
+ swarming_host: "chromium-swarm.appspot.com"
+ dimensions: "builder:fugu-debug"
+ dimensions: "pool:luci.art.ci"
+ recipe {
+ name: "art"
+ cipd_package: "infra/recipe_bundles/chromium.googlesource.com/chromium/tools/build"
+ cipd_version: "refs/heads/master"
+ properties_j: "builder_group:\"client.art\""
+ }
+ execution_timeout_secs: 133200
+ expiration_secs: 36000
+ caches {
+ name: "art"
+ path: "art"
+ }
+ build_numbers: YES
+ service_account: "art-ci-builder@chops-service-accounts.iam.gserviceaccount.com"
+ }
+ builders {
+ name: "fugu-ndebug"
+ swarming_host: "chromium-swarm.appspot.com"
+ dimensions: "builder:fugu-ndebug"
+ dimensions: "pool:luci.art.ci"
+ recipe {
+ name: "art"
+ cipd_package: "infra/recipe_bundles/chromium.googlesource.com/chromium/tools/build"
+ cipd_version: "refs/heads/master"
+ properties_j: "builder_group:\"client.art\""
+ }
+ execution_timeout_secs: 133200
+ expiration_secs: 36000
+ caches {
+ name: "art"
+ path: "art"
+ }
+ build_numbers: YES
+ service_account: "art-ci-builder@chops-service-accounts.iam.gserviceaccount.com"
+ }
+ builders {
+ name: "host-x86-cms"
+ swarming_host: "chromium-swarm.appspot.com"
+ dimensions: "builder:host-x86-cms"
+ dimensions: "pool:luci.art.ci"
+ recipe {
+ name: "art"
+ cipd_package: "infra/recipe_bundles/chromium.googlesource.com/chromium/tools/build"
+ cipd_version: "refs/heads/master"
+ properties_j: "builder_group:\"client.art\""
+ }
+ execution_timeout_secs: 133200
+ expiration_secs: 36000
+ caches {
+ name: "art"
+ path: "art"
+ }
+ build_numbers: YES
+ service_account: "art-ci-builder@chops-service-accounts.iam.gserviceaccount.com"
+ }
+ builders {
+ name: "host-x86-debug"
+ swarming_host: "chromium-swarm.appspot.com"
+ dimensions: "builder:host-x86-debug"
+ dimensions: "pool:luci.art.ci"
+ recipe {
+ name: "art"
+ cipd_package: "infra/recipe_bundles/chromium.googlesource.com/chromium/tools/build"
+ cipd_version: "refs/heads/master"
+ properties_j: "builder_group:\"client.art\""
+ }
+ execution_timeout_secs: 133200
+ expiration_secs: 36000
+ caches {
+ name: "art"
+ path: "art"
+ }
+ build_numbers: YES
+ service_account: "art-ci-builder@chops-service-accounts.iam.gserviceaccount.com"
+ }
+ builders {
+ name: "host-x86-gcstress-debug"
+ swarming_host: "chromium-swarm.appspot.com"
+ dimensions: "builder:host-x86-gcstress-debug"
+ dimensions: "pool:luci.art.ci"
+ recipe {
+ name: "art"
+ cipd_package: "infra/recipe_bundles/chromium.googlesource.com/chromium/tools/build"
+ cipd_version: "refs/heads/master"
+ properties_j: "builder_group:\"client.art\""
+ }
+ execution_timeout_secs: 133200
+ expiration_secs: 36000
+ caches {
+ name: "art"
+ path: "art"
+ }
+ build_numbers: YES
+ service_account: "art-ci-builder@chops-service-accounts.iam.gserviceaccount.com"
+ }
+ builders {
+ name: "host-x86-ndebug"
+ swarming_host: "chromium-swarm.appspot.com"
+ dimensions: "builder:host-x86-ndebug"
+ dimensions: "pool:luci.art.ci"
+ recipe {
+ name: "art"
+ cipd_package: "infra/recipe_bundles/chromium.googlesource.com/chromium/tools/build"
+ cipd_version: "refs/heads/master"
+ properties_j: "builder_group:\"client.art\""
+ }
+ execution_timeout_secs: 133200
+ expiration_secs: 36000
+ caches {
+ name: "art"
+ path: "art"
+ }
+ build_numbers: YES
+ service_account: "art-ci-builder@chops-service-accounts.iam.gserviceaccount.com"
+ }
+ builders {
+ name: "host-x86-poison-debug"
+ swarming_host: "chromium-swarm.appspot.com"
+ dimensions: "builder:host-x86-poison-debug"
+ dimensions: "pool:luci.art.ci"
+ recipe {
+ name: "art"
+ cipd_package: "infra/recipe_bundles/chromium.googlesource.com/chromium/tools/build"
+ cipd_version: "refs/heads/master"
+ properties_j: "builder_group:\"client.art\""
+ }
+ execution_timeout_secs: 133200
+ expiration_secs: 36000
+ caches {
+ name: "art"
+ path: "art"
+ }
+ build_numbers: YES
+ service_account: "art-ci-builder@chops-service-accounts.iam.gserviceaccount.com"
+ }
+ builders {
+ name: "host-x86_64-cdex-fast"
+ swarming_host: "chromium-swarm.appspot.com"
+ dimensions: "builder:host-x86_64-cdex-fast"
+ dimensions: "pool:luci.art.ci"
+ recipe {
+ name: "art"
+ cipd_package: "infra/recipe_bundles/chromium.googlesource.com/chromium/tools/build"
+ cipd_version: "refs/heads/master"
+ properties_j: "builder_group:\"client.art\""
+ }
+ execution_timeout_secs: 133200
+ expiration_secs: 36000
+ caches {
+ name: "art"
+ path: "art"
+ }
+ build_numbers: YES
+ service_account: "art-ci-builder@chops-service-accounts.iam.gserviceaccount.com"
+ }
+ builders {
+ name: "host-x86_64-cms"
+ swarming_host: "chromium-swarm.appspot.com"
+ dimensions: "builder:host-x86_64-cms"
+ dimensions: "pool:luci.art.ci"
+ recipe {
+ name: "art"
+ cipd_package: "infra/recipe_bundles/chromium.googlesource.com/chromium/tools/build"
+ cipd_version: "refs/heads/master"
+ properties_j: "builder_group:\"client.art\""
+ }
+ execution_timeout_secs: 133200
+ expiration_secs: 36000
+ caches {
+ name: "art"
+ path: "art"
+ }
+ build_numbers: YES
+ service_account: "art-ci-builder@chops-service-accounts.iam.gserviceaccount.com"
+ }
+ builders {
+ name: "host-x86_64-debug"
+ swarming_host: "chromium-swarm.appspot.com"
+ dimensions: "builder:host-x86_64-debug"
+ dimensions: "pool:luci.art.ci"
+ recipe {
+ name: "art"
+ cipd_package: "infra/recipe_bundles/chromium.googlesource.com/chromium/tools/build"
+ cipd_version: "refs/heads/master"
+ properties_j: "builder_group:\"client.art\""
+ }
+ execution_timeout_secs: 133200
+ expiration_secs: 36000
+ caches {
+ name: "art"
+ path: "art"
+ }
+ build_numbers: YES
+ service_account: "art-ci-builder@chops-service-accounts.iam.gserviceaccount.com"
+ }
+ builders {
+ name: "host-x86_64-ndebug"
+ swarming_host: "chromium-swarm.appspot.com"
+ dimensions: "builder:host-x86_64-ndebug"
+ dimensions: "pool:luci.art.ci"
+ recipe {
+ name: "art"
+ cipd_package: "infra/recipe_bundles/chromium.googlesource.com/chromium/tools/build"
+ cipd_version: "refs/heads/master"
+ properties_j: "builder_group:\"client.art\""
+ }
+ execution_timeout_secs: 133200
+ expiration_secs: 36000
+ caches {
+ name: "art"
+ path: "art"
+ }
+ build_numbers: YES
+ service_account: "art-ci-builder@chops-service-accounts.iam.gserviceaccount.com"
+ }
+ builders {
+ name: "host-x86_64-non-gen-cc"
+ swarming_host: "chromium-swarm.appspot.com"
+ dimensions: "builder:host-x86_64-non-gen-cc"
+ dimensions: "pool:luci.art.ci"
+ recipe {
+ name: "art"
+ cipd_package: "infra/recipe_bundles/chromium.googlesource.com/chromium/tools/build"
+ cipd_version: "refs/heads/master"
+ properties_j: "builder_group:\"client.art\""
+ }
+ execution_timeout_secs: 133200
+ expiration_secs: 36000
+ caches {
+ name: "art"
+ path: "art"
+ }
+ build_numbers: YES
+ service_account: "art-ci-builder@chops-service-accounts.iam.gserviceaccount.com"
+ }
+ builders {
+ name: "host-x86_64-poison-debug"
+ swarming_host: "chromium-swarm.appspot.com"
+ dimensions: "builder:host-x86_64-poison-debug"
+ dimensions: "pool:luci.art.ci"
+ recipe {
+ name: "art"
+ cipd_package: "infra/recipe_bundles/chromium.googlesource.com/chromium/tools/build"
+ cipd_version: "refs/heads/master"
+ properties_j: "builder_group:\"client.art\""
+ }
+ execution_timeout_secs: 133200
+ expiration_secs: 36000
+ caches {
+ name: "art"
+ path: "art"
+ }
+ build_numbers: YES
+ service_account: "art-ci-builder@chops-service-accounts.iam.gserviceaccount.com"
+ }
+ builders {
+ name: "walleye-armv7-poison-debug"
+ swarming_host: "chromium-swarm.appspot.com"
+ dimensions: "builder:walleye-armv7-poison-debug"
+ dimensions: "pool:luci.art.ci"
+ recipe {
+ name: "art"
+ cipd_package: "infra/recipe_bundles/chromium.googlesource.com/chromium/tools/build"
+ cipd_version: "refs/heads/master"
+ properties_j: "builder_group:\"client.art\""
+ }
+ execution_timeout_secs: 133200
+ expiration_secs: 36000
+ caches {
+ name: "art"
+ path: "art"
+ }
+ build_numbers: YES
+ service_account: "art-ci-builder@chops-service-accounts.iam.gserviceaccount.com"
+ }
+ builders {
+ name: "walleye-armv8-poison-debug"
+ swarming_host: "chromium-swarm.appspot.com"
+ dimensions: "builder:walleye-armv8-poison-debug"
+ dimensions: "pool:luci.art.ci"
+ recipe {
+ name: "art"
+ cipd_package: "infra/recipe_bundles/chromium.googlesource.com/chromium/tools/build"
+ cipd_version: "refs/heads/master"
+ properties_j: "builder_group:\"client.art\""
+ }
+ execution_timeout_secs: 133200
+ expiration_secs: 36000
+ caches {
+ name: "art"
+ path: "art"
+ }
+ build_numbers: YES
+ service_account: "art-ci-builder@chops-service-accounts.iam.gserviceaccount.com"
+ }
+ builders {
+ name: "walleye-armv8-poison-ndebug"
+ swarming_host: "chromium-swarm.appspot.com"
+ dimensions: "builder:walleye-armv8-poison-ndebug"
+ dimensions: "pool:luci.art.ci"
+ recipe {
+ name: "art"
+ cipd_package: "infra/recipe_bundles/chromium.googlesource.com/chromium/tools/build"
+ cipd_version: "refs/heads/master"
+ properties_j: "builder_group:\"client.art\""
+ }
+ execution_timeout_secs: 133200
+ expiration_secs: 36000
+ caches {
+ name: "art"
+ path: "art"
+ }
+ build_numbers: YES
+ service_account: "art-ci-builder@chops-service-accounts.iam.gserviceaccount.com"
+ }
+ }
+}
diff --git a/tools/luci/config/generated/luci-logdog.cfg b/tools/luci/config/generated/luci-logdog.cfg
new file mode 100644
index 0000000..adc75be
--- /dev/null
+++ b/tools/luci/config/generated/luci-logdog.cfg
@@ -0,0 +1,9 @@
+# Auto-generated by lucicfg.
+# Do not modify manually.
+#
+# For the schema of this file, see ProjectConfig message:
+# https://luci-config.appspot.com/schemas/projects:luci-logdog.cfg
+
+reader_auth_groups: "all"
+writer_auth_groups: "luci-logdog-chromium-writers"
+archive_gs_bucket: "chromium-luci-logdog"
diff --git a/tools/luci/config/generated/luci-milo.cfg b/tools/luci/config/generated/luci-milo.cfg
new file mode 100644
index 0000000..0ca098a
--- /dev/null
+++ b/tools/luci/config/generated/luci-milo.cfg
@@ -0,0 +1,140 @@
+# Auto-generated by lucicfg.
+# Do not modify manually.
+#
+# For the schema of this file, see Project message:
+# https://luci-config.appspot.com/schemas/projects:luci-milo.cfg
+
+consoles {
+ id: "luci"
+ name: "ART LUCI Console"
+ repo_url: "https://android.googlesource.com/platform/art"
+ refs: "regexp:refs/heads/master"
+ manifest_name: "REVISION"
+ builders {
+ name: "buildbucket/luci.art.ci/angler-armv7-debug"
+ category: "angler|armv7"
+ short_name: "dbg"
+ }
+ builders {
+ name: "buildbucket/luci.art.ci/angler-armv7-non-gen-cc"
+ category: "angler|armv7"
+ short_name: "ngen"
+ }
+ builders {
+ name: "buildbucket/luci.art.ci/angler-armv7-ndebug"
+ category: "angler|armv7"
+ short_name: "ndbg"
+ }
+ builders {
+ name: "buildbucket/luci.art.ci/angler-armv8-debug"
+ category: "angler|armv8"
+ short_name: "dbg"
+ }
+ builders {
+ name: "buildbucket/luci.art.ci/angler-armv8-non-gen-cc"
+ category: "angler|armv8"
+ short_name: "ngen"
+ }
+ builders {
+ name: "buildbucket/luci.art.ci/angler-armv8-ndebug"
+ category: "angler|armv8"
+ short_name: "ndbg"
+ }
+ builders {
+ name: "buildbucket/luci.art.ci/bullhead-armv7-gcstress-ndebug"
+ category: "bullhead|armv7|gcstress"
+ short_name: "dbg"
+ }
+ builders {
+ name: "buildbucket/luci.art.ci/bullhead-armv8-gcstress-debug"
+ category: "bullhead|armv8|gcstress"
+ short_name: "dbg"
+ }
+ builders {
+ name: "buildbucket/luci.art.ci/bullhead-armv8-gcstress-ndebug"
+ category: "bullhead|armv8|gcstress"
+ short_name: "ndbg"
+ }
+ builders {
+ name: "buildbucket/luci.art.ci/fugu-debug"
+ category: "fugu"
+ short_name: "dbg"
+ }
+ builders {
+ name: "buildbucket/luci.art.ci/fugu-ndebug"
+ category: "fugu"
+ short_name: "ndbg"
+ }
+ builders {
+ name: "buildbucket/luci.art.ci/host-x86-cms"
+ category: "host|x86"
+ short_name: "cms"
+ }
+ builders {
+ name: "buildbucket/luci.art.ci/host-x86-debug"
+ category: "host|x86"
+ short_name: "dbg"
+ }
+ builders {
+ name: "buildbucket/luci.art.ci/host-x86-ndebug"
+ category: "host|x86"
+ short_name: "ndbg"
+ }
+ builders {
+ name: "buildbucket/luci.art.ci/host-x86-gcstress-debug"
+ category: "host|x86"
+ short_name: "gcs"
+ }
+ builders {
+ name: "buildbucket/luci.art.ci/host-x86-poison-debug"
+ category: "host|x86"
+ short_name: "psn"
+ }
+ builders {
+ name: "buildbucket/luci.art.ci/host-x86_64-cdex-fast"
+ category: "host|x64"
+ short_name: "cdx"
+ }
+ builders {
+ name: "buildbucket/luci.art.ci/host-x86_64-cms"
+ category: "host|x64"
+ short_name: "cms"
+ }
+ builders {
+ name: "buildbucket/luci.art.ci/host-x86_64-debug"
+ category: "host|x64"
+ short_name: "dbg"
+ }
+ builders {
+ name: "buildbucket/luci.art.ci/host-x86_64-non-gen-cc"
+ category: "host|x64"
+ short_name: "ngen"
+ }
+ builders {
+ name: "buildbucket/luci.art.ci/host-x86_64-ndebug"
+ category: "host|x64"
+ short_name: "ndbg"
+ }
+ builders {
+ name: "buildbucket/luci.art.ci/host-x86_64-poison-debug"
+ category: "host|x64"
+ short_name: "psn"
+ }
+ builders {
+ name: "buildbucket/luci.art.ci/walleye-armv7-poison-debug"
+ category: "walleye|armv7|poison"
+ short_name: "dbg"
+ }
+ builders {
+ name: "buildbucket/luci.art.ci/walleye-armv8-poison-debug"
+ category: "walleye|armv8|poison"
+ short_name: "dbg"
+ }
+ builders {
+ name: "buildbucket/luci.art.ci/walleye-armv8-poison-ndebug"
+ category: "walleye|armv8|poison"
+ short_name: "ndbg"
+ }
+ include_experimental_builds: true
+}
+logo_url: "https://storage.googleapis.com/chrome-infra-public/logo/art-logo.png"
diff --git a/tools/luci/config/generated/luci-notify.cfg b/tools/luci/config/generated/luci-notify.cfg
new file mode 100644
index 0000000..c509926
--- /dev/null
+++ b/tools/luci/config/generated/luci-notify.cfg
@@ -0,0 +1,331 @@
+# Auto-generated by lucicfg.
+# Do not modify manually.
+#
+# For the schema of this file, see ProjectConfig message:
+# https://luci-config.appspot.com/schemas/projects:luci-notify.cfg
+
+notifiers {
+ notifications {
+ on_new_status: FAILURE
+ on_new_status: INFRA_FAILURE
+ email {
+ recipients: "art-team+chromium-buildbot@google.com"
+ }
+ }
+ builders {
+ bucket: "ci"
+ name: "angler-armv7-debug"
+ }
+}
+notifiers {
+ notifications {
+ on_new_status: FAILURE
+ on_new_status: INFRA_FAILURE
+ email {
+ recipients: "art-team+chromium-buildbot@google.com"
+ }
+ }
+ builders {
+ bucket: "ci"
+ name: "angler-armv7-ndebug"
+ }
+}
+notifiers {
+ notifications {
+ on_new_status: FAILURE
+ on_new_status: INFRA_FAILURE
+ email {
+ recipients: "art-team+chromium-buildbot@google.com"
+ }
+ }
+ builders {
+ bucket: "ci"
+ name: "angler-armv7-non-gen-cc"
+ }
+}
+notifiers {
+ notifications {
+ on_new_status: FAILURE
+ on_new_status: INFRA_FAILURE
+ email {
+ recipients: "art-team+chromium-buildbot@google.com"
+ }
+ }
+ builders {
+ bucket: "ci"
+ name: "angler-armv8-debug"
+ }
+}
+notifiers {
+ notifications {
+ on_new_status: FAILURE
+ on_new_status: INFRA_FAILURE
+ email {
+ recipients: "art-team+chromium-buildbot@google.com"
+ }
+ }
+ builders {
+ bucket: "ci"
+ name: "angler-armv8-ndebug"
+ }
+}
+notifiers {
+ notifications {
+ on_new_status: FAILURE
+ on_new_status: INFRA_FAILURE
+ email {
+ recipients: "art-team+chromium-buildbot@google.com"
+ }
+ }
+ builders {
+ bucket: "ci"
+ name: "angler-armv8-non-gen-cc"
+ }
+}
+notifiers {
+ notifications {
+ on_new_status: FAILURE
+ on_new_status: INFRA_FAILURE
+ email {
+ recipients: "art-team+chromium-buildbot@google.com"
+ }
+ }
+ builders {
+ bucket: "ci"
+ name: "bullhead-armv7-gcstress-ndebug"
+ }
+}
+notifiers {
+ notifications {
+ on_new_status: FAILURE
+ on_new_status: INFRA_FAILURE
+ email {
+ recipients: "art-team+chromium-buildbot@google.com"
+ }
+ }
+ builders {
+ bucket: "ci"
+ name: "bullhead-armv8-gcstress-debug"
+ }
+}
+notifiers {
+ notifications {
+ on_new_status: FAILURE
+ on_new_status: INFRA_FAILURE
+ email {
+ recipients: "art-team+chromium-buildbot@google.com"
+ }
+ }
+ builders {
+ bucket: "ci"
+ name: "bullhead-armv8-gcstress-ndebug"
+ }
+}
+notifiers {
+ notifications {
+ on_new_status: FAILURE
+ on_new_status: INFRA_FAILURE
+ email {
+ recipients: "art-team+chromium-buildbot@google.com"
+ }
+ }
+ builders {
+ bucket: "ci"
+ name: "fugu-debug"
+ }
+}
+notifiers {
+ notifications {
+ on_new_status: FAILURE
+ on_new_status: INFRA_FAILURE
+ email {
+ recipients: "art-team+chromium-buildbot@google.com"
+ }
+ }
+ builders {
+ bucket: "ci"
+ name: "fugu-ndebug"
+ }
+}
+notifiers {
+ notifications {
+ on_new_status: FAILURE
+ on_new_status: INFRA_FAILURE
+ email {
+ recipients: "art-team+chromium-buildbot@google.com"
+ }
+ }
+ builders {
+ bucket: "ci"
+ name: "host-x86-cms"
+ }
+}
+notifiers {
+ notifications {
+ on_new_status: FAILURE
+ on_new_status: INFRA_FAILURE
+ email {
+ recipients: "art-team+chromium-buildbot@google.com"
+ }
+ }
+ builders {
+ bucket: "ci"
+ name: "host-x86-debug"
+ }
+}
+notifiers {
+ notifications {
+ on_new_status: FAILURE
+ on_new_status: INFRA_FAILURE
+ email {
+ recipients: "art-team+chromium-buildbot@google.com"
+ }
+ }
+ builders {
+ bucket: "ci"
+ name: "host-x86-gcstress-debug"
+ }
+}
+notifiers {
+ notifications {
+ on_new_status: FAILURE
+ on_new_status: INFRA_FAILURE
+ email {
+ recipients: "art-team+chromium-buildbot@google.com"
+ }
+ }
+ builders {
+ bucket: "ci"
+ name: "host-x86-ndebug"
+ }
+}
+notifiers {
+ notifications {
+ on_new_status: FAILURE
+ on_new_status: INFRA_FAILURE
+ email {
+ recipients: "art-team+chromium-buildbot@google.com"
+ }
+ }
+ builders {
+ bucket: "ci"
+ name: "host-x86-poison-debug"
+ }
+}
+notifiers {
+ notifications {
+ on_new_status: FAILURE
+ on_new_status: INFRA_FAILURE
+ email {
+ recipients: "art-team+chromium-buildbot@google.com"
+ }
+ }
+ builders {
+ bucket: "ci"
+ name: "host-x86_64-cdex-fast"
+ }
+}
+notifiers {
+ notifications {
+ on_new_status: FAILURE
+ on_new_status: INFRA_FAILURE
+ email {
+ recipients: "art-team+chromium-buildbot@google.com"
+ }
+ }
+ builders {
+ bucket: "ci"
+ name: "host-x86_64-cms"
+ }
+}
+notifiers {
+ notifications {
+ on_new_status: FAILURE
+ on_new_status: INFRA_FAILURE
+ email {
+ recipients: "art-team+chromium-buildbot@google.com"
+ }
+ }
+ builders {
+ bucket: "ci"
+ name: "host-x86_64-debug"
+ }
+}
+notifiers {
+ notifications {
+ on_new_status: FAILURE
+ on_new_status: INFRA_FAILURE
+ email {
+ recipients: "art-team+chromium-buildbot@google.com"
+ }
+ }
+ builders {
+ bucket: "ci"
+ name: "host-x86_64-ndebug"
+ }
+}
+notifiers {
+ notifications {
+ on_new_status: FAILURE
+ on_new_status: INFRA_FAILURE
+ email {
+ recipients: "art-team+chromium-buildbot@google.com"
+ }
+ }
+ builders {
+ bucket: "ci"
+ name: "host-x86_64-non-gen-cc"
+ }
+}
+notifiers {
+ notifications {
+ on_new_status: FAILURE
+ on_new_status: INFRA_FAILURE
+ email {
+ recipients: "art-team+chromium-buildbot@google.com"
+ }
+ }
+ builders {
+ bucket: "ci"
+ name: "host-x86_64-poison-debug"
+ }
+}
+notifiers {
+ notifications {
+ on_new_status: FAILURE
+ on_new_status: INFRA_FAILURE
+ email {
+ recipients: "art-team+chromium-buildbot@google.com"
+ }
+ }
+ builders {
+ bucket: "ci"
+ name: "walleye-armv7-poison-debug"
+ }
+}
+notifiers {
+ notifications {
+ on_new_status: FAILURE
+ on_new_status: INFRA_FAILURE
+ email {
+ recipients: "art-team+chromium-buildbot@google.com"
+ }
+ }
+ builders {
+ bucket: "ci"
+ name: "walleye-armv8-poison-debug"
+ }
+}
+notifiers {
+ notifications {
+ on_new_status: FAILURE
+ on_new_status: INFRA_FAILURE
+ email {
+ recipients: "art-team+chromium-buildbot@google.com"
+ }
+ }
+ builders {
+ bucket: "ci"
+ name: "walleye-armv8-poison-ndebug"
+ }
+}
diff --git a/tools/luci/config/generated/luci-notify/email-templates/default.template b/tools/luci/config/generated/luci-notify/email-templates/default.template
new file mode 100644
index 0000000..dba7b31
--- /dev/null
+++ b/tools/luci/config/generated/luci-notify/email-templates/default.template
@@ -0,0 +1,38 @@
+[Build Status] Builder "{{ .Build.Builder | formatBuilderID }}" {{ .Build.Status }}
+
+luci-notify detected a status change for builder "{{ .Build.Builder | formatBuilderID }}" at {{ .Build.UpdateTime | time }}.
+<br/>
+<table>
+ <tr>
+ <td>New status:</td>
+ <td><b>{{ .Build.Status }}</b></td>
+ </tr>
+ <tr>
+ <td>Previous status:</td>
+ <td>{{ .OldStatus }}</td>
+ </tr>
+ <tr>
+ <td>Builder:</td>
+ <td>{{ .Build.Builder | formatBuilderID }}</td>
+ </tr>
+ <tr>
+ <td>Created by:</td>
+ <td>{{ .Build.CreatedBy }}</td>
+ </tr>
+ <tr>
+ <td>Created at:</td>
+ <td>{{ .Build.CreateTime | time }}</td>
+ </tr>
+ <tr>
+ <td>Finished at:</td>
+ <td>{{ .Build.EndTime | time }}</td>
+ </tr>
+ <tr>
+ <td>Summary:</td>
+ <td>{{ .Build.SummaryMarkdown }}</td>
+ </tr>
+</table>
+<br/>
+Full details are available <a href="https://{{.BuildbucketHostname}}/build/{{.Build.Id}}">here</a>.
+<br/><br/>
+
diff --git a/tools/luci/config/generated/luci-scheduler.cfg b/tools/luci/config/generated/luci-scheduler.cfg
new file mode 100644
index 0000000..0e2818d
--- /dev/null
+++ b/tools/luci/config/generated/luci-scheduler.cfg
@@ -0,0 +1,340 @@
+# Auto-generated by lucicfg.
+# Do not modify manually.
+#
+# For the schema of this file, see ProjectConfig message:
+# https://luci-config.appspot.com/schemas/projects:luci-scheduler.cfg
+
+job {
+ id: "angler-armv7-debug"
+ acl_sets: "ci"
+ buildbucket {
+ server: "cr-buildbucket.appspot.com"
+ bucket: "ci"
+ builder: "angler-armv7-debug"
+ }
+}
+job {
+ id: "angler-armv7-ndebug"
+ acl_sets: "ci"
+ buildbucket {
+ server: "cr-buildbucket.appspot.com"
+ bucket: "ci"
+ builder: "angler-armv7-ndebug"
+ }
+}
+job {
+ id: "angler-armv7-non-gen-cc"
+ acl_sets: "ci"
+ buildbucket {
+ server: "cr-buildbucket.appspot.com"
+ bucket: "ci"
+ builder: "angler-armv7-non-gen-cc"
+ }
+}
+job {
+ id: "angler-armv8-debug"
+ acl_sets: "ci"
+ buildbucket {
+ server: "cr-buildbucket.appspot.com"
+ bucket: "ci"
+ builder: "angler-armv8-debug"
+ }
+}
+job {
+ id: "angler-armv8-ndebug"
+ acl_sets: "ci"
+ buildbucket {
+ server: "cr-buildbucket.appspot.com"
+ bucket: "ci"
+ builder: "angler-armv8-ndebug"
+ }
+}
+job {
+ id: "angler-armv8-non-gen-cc"
+ acl_sets: "ci"
+ buildbucket {
+ server: "cr-buildbucket.appspot.com"
+ bucket: "ci"
+ builder: "angler-armv8-non-gen-cc"
+ }
+}
+job {
+ id: "bullhead-armv7-gcstress-ndebug"
+ acl_sets: "ci"
+ buildbucket {
+ server: "cr-buildbucket.appspot.com"
+ bucket: "ci"
+ builder: "bullhead-armv7-gcstress-ndebug"
+ }
+}
+job {
+ id: "bullhead-armv8-gcstress-debug"
+ acl_sets: "ci"
+ buildbucket {
+ server: "cr-buildbucket.appspot.com"
+ bucket: "ci"
+ builder: "bullhead-armv8-gcstress-debug"
+ }
+}
+job {
+ id: "bullhead-armv8-gcstress-ndebug"
+ acl_sets: "ci"
+ buildbucket {
+ server: "cr-buildbucket.appspot.com"
+ bucket: "ci"
+ builder: "bullhead-armv8-gcstress-ndebug"
+ }
+}
+job {
+ id: "fugu-debug"
+ acl_sets: "ci"
+ buildbucket {
+ server: "cr-buildbucket.appspot.com"
+ bucket: "ci"
+ builder: "fugu-debug"
+ }
+}
+job {
+ id: "fugu-ndebug"
+ acl_sets: "ci"
+ buildbucket {
+ server: "cr-buildbucket.appspot.com"
+ bucket: "ci"
+ builder: "fugu-ndebug"
+ }
+}
+job {
+ id: "host-x86-cms"
+ acl_sets: "ci"
+ buildbucket {
+ server: "cr-buildbucket.appspot.com"
+ bucket: "ci"
+ builder: "host-x86-cms"
+ }
+}
+job {
+ id: "host-x86-debug"
+ acl_sets: "ci"
+ buildbucket {
+ server: "cr-buildbucket.appspot.com"
+ bucket: "ci"
+ builder: "host-x86-debug"
+ }
+}
+job {
+ id: "host-x86-gcstress-debug"
+ acl_sets: "ci"
+ buildbucket {
+ server: "cr-buildbucket.appspot.com"
+ bucket: "ci"
+ builder: "host-x86-gcstress-debug"
+ }
+}
+job {
+ id: "host-x86-ndebug"
+ acl_sets: "ci"
+ buildbucket {
+ server: "cr-buildbucket.appspot.com"
+ bucket: "ci"
+ builder: "host-x86-ndebug"
+ }
+}
+job {
+ id: "host-x86-poison-debug"
+ acl_sets: "ci"
+ buildbucket {
+ server: "cr-buildbucket.appspot.com"
+ bucket: "ci"
+ builder: "host-x86-poison-debug"
+ }
+}
+job {
+ id: "host-x86_64-cdex-fast"
+ acl_sets: "ci"
+ buildbucket {
+ server: "cr-buildbucket.appspot.com"
+ bucket: "ci"
+ builder: "host-x86_64-cdex-fast"
+ }
+}
+job {
+ id: "host-x86_64-cms"
+ acl_sets: "ci"
+ buildbucket {
+ server: "cr-buildbucket.appspot.com"
+ bucket: "ci"
+ builder: "host-x86_64-cms"
+ }
+}
+job {
+ id: "host-x86_64-debug"
+ acl_sets: "ci"
+ buildbucket {
+ server: "cr-buildbucket.appspot.com"
+ bucket: "ci"
+ builder: "host-x86_64-debug"
+ }
+}
+job {
+ id: "host-x86_64-ndebug"
+ acl_sets: "ci"
+ buildbucket {
+ server: "cr-buildbucket.appspot.com"
+ bucket: "ci"
+ builder: "host-x86_64-ndebug"
+ }
+}
+job {
+ id: "host-x86_64-non-gen-cc"
+ acl_sets: "ci"
+ buildbucket {
+ server: "cr-buildbucket.appspot.com"
+ bucket: "ci"
+ builder: "host-x86_64-non-gen-cc"
+ }
+}
+job {
+ id: "host-x86_64-poison-debug"
+ acl_sets: "ci"
+ buildbucket {
+ server: "cr-buildbucket.appspot.com"
+ bucket: "ci"
+ builder: "host-x86_64-poison-debug"
+ }
+}
+job {
+ id: "walleye-armv7-poison-debug"
+ acl_sets: "ci"
+ buildbucket {
+ server: "cr-buildbucket.appspot.com"
+ bucket: "ci"
+ builder: "walleye-armv7-poison-debug"
+ }
+}
+job {
+ id: "walleye-armv8-poison-debug"
+ acl_sets: "ci"
+ buildbucket {
+ server: "cr-buildbucket.appspot.com"
+ bucket: "ci"
+ builder: "walleye-armv8-poison-debug"
+ }
+}
+job {
+ id: "walleye-armv8-poison-ndebug"
+ acl_sets: "ci"
+ buildbucket {
+ server: "cr-buildbucket.appspot.com"
+ bucket: "ci"
+ builder: "walleye-armv8-poison-ndebug"
+ }
+}
+trigger {
+ id: "master-art-manifest-gitiles-trigger"
+ acl_sets: "ci"
+ triggers: "angler-armv7-debug"
+ triggers: "angler-armv7-ndebug"
+ triggers: "angler-armv7-non-gen-cc"
+ triggers: "angler-armv8-debug"
+ triggers: "angler-armv8-ndebug"
+ triggers: "angler-armv8-non-gen-cc"
+ triggers: "bullhead-armv7-gcstress-ndebug"
+ triggers: "bullhead-armv8-gcstress-debug"
+ triggers: "bullhead-armv8-gcstress-ndebug"
+ triggers: "fugu-debug"
+ triggers: "fugu-ndebug"
+ triggers: "host-x86-cms"
+ triggers: "host-x86-debug"
+ triggers: "host-x86-gcstress-debug"
+ triggers: "host-x86-ndebug"
+ triggers: "host-x86-poison-debug"
+ triggers: "host-x86_64-cdex-fast"
+ triggers: "host-x86_64-cms"
+ triggers: "host-x86_64-debug"
+ triggers: "host-x86_64-ndebug"
+ triggers: "host-x86_64-non-gen-cc"
+ triggers: "host-x86_64-poison-debug"
+ triggers: "walleye-armv7-poison-debug"
+ triggers: "walleye-armv8-poison-debug"
+ triggers: "walleye-armv8-poison-ndebug"
+ gitiles {
+ repo: "https://android.googlesource.com/platform/manifest"
+ refs: "regexp:refs/heads/master-art"
+ }
+}
+trigger {
+ id: "master-gitiles-trigger"
+ acl_sets: "ci"
+ triggers: "angler-armv7-debug"
+ triggers: "angler-armv7-ndebug"
+ triggers: "angler-armv7-non-gen-cc"
+ triggers: "angler-armv8-debug"
+ triggers: "angler-armv8-ndebug"
+ triggers: "angler-armv8-non-gen-cc"
+ triggers: "bullhead-armv7-gcstress-ndebug"
+ triggers: "bullhead-armv8-gcstress-debug"
+ triggers: "bullhead-armv8-gcstress-ndebug"
+ triggers: "fugu-debug"
+ triggers: "fugu-ndebug"
+ triggers: "host-x86-cms"
+ triggers: "host-x86-debug"
+ triggers: "host-x86-gcstress-debug"
+ triggers: "host-x86-ndebug"
+ triggers: "host-x86-poison-debug"
+ triggers: "host-x86_64-cdex-fast"
+ triggers: "host-x86_64-cms"
+ triggers: "host-x86_64-debug"
+ triggers: "host-x86_64-ndebug"
+ triggers: "host-x86_64-non-gen-cc"
+ triggers: "host-x86_64-poison-debug"
+ triggers: "walleye-armv7-poison-debug"
+ triggers: "walleye-armv8-poison-debug"
+ triggers: "walleye-armv8-poison-ndebug"
+ gitiles {
+ repo: "https://android.googlesource.com/platform/art"
+ refs: "regexp:refs/heads/master"
+ }
+}
+trigger {
+ id: "master-libcore-gitiles-trigger"
+ acl_sets: "ci"
+ triggers: "angler-armv7-debug"
+ triggers: "angler-armv7-ndebug"
+ triggers: "angler-armv7-non-gen-cc"
+ triggers: "angler-armv8-debug"
+ triggers: "angler-armv8-ndebug"
+ triggers: "angler-armv8-non-gen-cc"
+ triggers: "bullhead-armv7-gcstress-ndebug"
+ triggers: "bullhead-armv8-gcstress-debug"
+ triggers: "bullhead-armv8-gcstress-ndebug"
+ triggers: "fugu-debug"
+ triggers: "fugu-ndebug"
+ triggers: "host-x86-cms"
+ triggers: "host-x86-debug"
+ triggers: "host-x86-gcstress-debug"
+ triggers: "host-x86-ndebug"
+ triggers: "host-x86-poison-debug"
+ triggers: "host-x86_64-cdex-fast"
+ triggers: "host-x86_64-cms"
+ triggers: "host-x86_64-debug"
+ triggers: "host-x86_64-ndebug"
+ triggers: "host-x86_64-non-gen-cc"
+ triggers: "host-x86_64-poison-debug"
+ triggers: "walleye-armv7-poison-debug"
+ triggers: "walleye-armv8-poison-debug"
+ triggers: "walleye-armv8-poison-ndebug"
+ gitiles {
+ repo: "https://android.googlesource.com/platform/libcore"
+ refs: "regexp:refs/heads/master"
+ }
+}
+acl_sets {
+ name: "ci"
+ acls {
+ role: OWNER
+ granted_to: "group:project-art-admins"
+ }
+ acls {
+ granted_to: "group:all"
+ }
+}
diff --git a/tools/luci/config/generated/project.cfg b/tools/luci/config/generated/project.cfg
new file mode 100644
index 0000000..2270648
--- /dev/null
+++ b/tools/luci/config/generated/project.cfg
@@ -0,0 +1,8 @@
+# Auto-generated by lucicfg.
+# Do not modify manually.
+#
+# For the schema of this file, see ProjectCfg message:
+# https://luci-config.appspot.com/schemas/projects:project.cfg
+
+name: "art"
+access: "group:all"
diff --git a/tools/luci/config/luci-notify.template b/tools/luci/config/luci-notify.template
new file mode 100644
index 0000000..dba7b31
--- /dev/null
+++ b/tools/luci/config/luci-notify.template
@@ -0,0 +1,38 @@
+[Build Status] Builder "{{ .Build.Builder | formatBuilderID }}" {{ .Build.Status }}
+
+luci-notify detected a status change for builder "{{ .Build.Builder | formatBuilderID }}" at {{ .Build.UpdateTime | time }}.
+<br/>
+<table>
+ <tr>
+ <td>New status:</td>
+ <td><b>{{ .Build.Status }}</b></td>
+ </tr>
+ <tr>
+ <td>Previous status:</td>
+ <td>{{ .OldStatus }}</td>
+ </tr>
+ <tr>
+ <td>Builder:</td>
+ <td>{{ .Build.Builder | formatBuilderID }}</td>
+ </tr>
+ <tr>
+ <td>Created by:</td>
+ <td>{{ .Build.CreatedBy }}</td>
+ </tr>
+ <tr>
+ <td>Created at:</td>
+ <td>{{ .Build.CreateTime | time }}</td>
+ </tr>
+ <tr>
+ <td>Finished at:</td>
+ <td>{{ .Build.EndTime | time }}</td>
+ </tr>
+ <tr>
+ <td>Summary:</td>
+ <td>{{ .Build.SummaryMarkdown }}</td>
+ </tr>
+</table>
+<br/>
+Full details are available <a href="https://{{.BuildbucketHostname}}/build/{{.Build.Id}}">here</a>.
+<br/><br/>
+
diff --git a/tools/luci/config/main.star b/tools/luci/config/main.star
new file mode 100755
index 0000000..b847be8
--- /dev/null
+++ b/tools/luci/config/main.star
@@ -0,0 +1,192 @@
+#!/usr/bin/env lucicfg
+#
+# Copyright (C) 2021 The Android Open Source Project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+"""LUCI project configuration for the production instance of LUCI.
+
+After modifying this file execute it ('./main.star') to regenerate the configs.
+"""
+
+lucicfg.check_version("1.24.4", "Please update depot_tools")
+
+# Enable v2 bucket names in LUCI Scheduler config.
+lucicfg.enable_experiment("crbug.com/1182002")
+
+# Tell lucicfg what files it is allowed to touch.
+lucicfg.config(
+ config_dir = "generated",
+ fail_on_warnings = True,
+ lint_checks = ["default"],
+)
+
+# TODO: Switch to project-scoped service account.
+# TODO: Switch to realms.
+
+luci.project(
+ name = "art",
+ 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 = [
+ # Publicly readable.
+ acl.entry(
+ roles = [
+ acl.BUILDBUCKET_READER,
+ acl.LOGDOG_READER,
+ acl.PROJECT_CONFIGS_READER,
+ acl.SCHEDULER_READER,
+ ],
+ groups = "all",
+ ),
+ acl.entry(
+ roles = [
+ acl.BUILDBUCKET_OWNER,
+ acl.SCHEDULER_OWNER,
+ ],
+ groups = "project-art-admins",
+ ),
+ acl.entry(
+ roles = acl.LOGDOG_WRITER,
+ groups = "luci-logdog-chromium-writers",
+ ),
+ ],
+)
+
+# Per-service tweaks.
+luci.logdog(gs_bucket = "chromium-luci-logdog")
+luci.milo(logo = "https://storage.googleapis.com/chrome-infra-public/logo/art-logo.png")
+
+# Resources shared by all subprojects.
+
+luci.bucket(name = "ci")
+
+luci.notifier_template(
+ name = "default",
+ body = io.read_file("luci-notify.template"),
+)
+
+luci.console_view(
+ name = "luci",
+ repo = "https://android.googlesource.com/platform/art",
+ title = "ART LUCI Console",
+ refs = ["refs/heads/master"],
+ include_experimental_builds = True,
+)
+
+luci.notifier(
+ name = "art-team+chromium-buildbot",
+ on_new_status = [
+ "FAILURE",
+ "INFRA_FAILURE",
+ ],
+ notify_emails = [
+ "art-team+chromium-buildbot@google.com",
+ ],
+)
+
+luci.gitiles_poller(
+ name = "master-gitiles-trigger",
+ bucket = "ci",
+ repo = "https://android.googlesource.com/platform/art",
+ refs = ["refs/heads/master"],
+)
+
+luci.gitiles_poller(
+ name = "master-libcore-gitiles-trigger",
+ bucket = "ci",
+ repo = "https://android.googlesource.com/platform/libcore",
+ refs = ["refs/heads/master"],
+)
+
+luci.gitiles_poller(
+ name = "master-art-manifest-gitiles-trigger",
+ bucket = "ci",
+ repo = "https://android.googlesource.com/platform/manifest",
+ refs = ["refs/heads/master-art"],
+)
+
+def ci_builder(name, category, short_name):
+ luci.builder(
+ name = name,
+ bucket = "ci",
+ executable = luci.recipe(
+ cipd_package = "infra/recipe_bundles/chromium.googlesource.com/chromium/tools/build",
+ cipd_version = "refs/heads/master",
+ name = "art",
+ ),
+ dimensions = {
+ "pool": "luci.art.ci",
+
+ # Some builders require specific hardware, so we make the assignment in bots.cfg
+ "builder": name,
+ },
+ service_account = "art-ci-builder@chops-service-accounts.iam.gserviceaccount.com",
+
+ # We have a limited set of runners, so put the expiration time close to
+ # the time it takes to run all steps on most builders.
+ expiration_timeout = 10 * time.hour,
+ execution_timeout = 37 * time.hour,
+ build_numbers = True,
+ properties = {
+ "builder_group": "client.art",
+ },
+ caches = [
+ # Directory called "art" that persists from build to build (one per bot).
+ # We can checkout and build in this directory to get fast incremental builds.
+ swarming.cache("art", name = "art"),
+ ],
+ notifies = ["art-team+chromium-buildbot"],
+ triggered_by = [
+ "master-gitiles-trigger",
+ "master-libcore-gitiles-trigger",
+ "master-art-manifest-gitiles-trigger",
+ ],
+ )
+ luci.console_view_entry(
+ console_view = "luci",
+ builder = name,
+ category = category,
+ short_name = short_name,
+ )
+
+ci_builder("angler-armv7-debug", "angler|armv7", "dbg")
+ci_builder("angler-armv7-non-gen-cc", "angler|armv7", "ngen")
+ci_builder("angler-armv7-ndebug", "angler|armv7", "ndbg")
+ci_builder("angler-armv8-debug", "angler|armv8", "dbg")
+ci_builder("angler-armv8-non-gen-cc", "angler|armv8", "ngen")
+ci_builder("angler-armv8-ndebug", "angler|armv8", "ndbg")
+ci_builder("bullhead-armv7-gcstress-ndebug", "bullhead|armv7|gcstress", "dbg")
+ci_builder("bullhead-armv8-gcstress-debug", "bullhead|armv8|gcstress", "dbg")
+ci_builder("bullhead-armv8-gcstress-ndebug", "bullhead|armv8|gcstress", "ndbg")
+ci_builder("fugu-debug", "fugu", "dbg")
+ci_builder("fugu-ndebug", "fugu", "ndbg")
+ci_builder("host-x86-cms", "host|x86", "cms")
+ci_builder("host-x86-debug", "host|x86", "dbg")
+ci_builder("host-x86-ndebug", "host|x86", "ndbg")
+ci_builder("host-x86-gcstress-debug", "host|x86", "gcs")
+ci_builder("host-x86-poison-debug", "host|x86", "psn")
+ci_builder("host-x86_64-cdex-fast", "host|x64", "cdx")
+ci_builder("host-x86_64-cms", "host|x64", "cms")
+ci_builder("host-x86_64-debug", "host|x64", "dbg")
+ci_builder("host-x86_64-non-gen-cc", "host|x64", "ngen")
+ci_builder("host-x86_64-ndebug", "host|x64", "ndbg")
+ci_builder("host-x86_64-poison-debug", "host|x64", "psn")
+ci_builder("walleye-armv7-poison-debug", "walleye|armv7|poison", "dbg")
+ci_builder("walleye-armv8-poison-debug", "walleye|armv8|poison", "dbg")
+ci_builder("walleye-armv8-poison-ndebug", "walleye|armv8|poison", "ndbg")
diff --git a/tools/luci/config/validate.sh b/tools/luci/config/validate.sh
new file mode 100755
index 0000000..7bc73da
--- /dev/null
+++ b/tools/luci/config/validate.sh
@@ -0,0 +1,6 @@
+#!/usr/bin/env sh
+# Validates that all generated outputs match main.star and also checks that
+# the star files are correctly formatted.
+#
+# TODO(reader) - Integrate this sensibly with //tools/test_presubmit.py :)
+lucicfg validate main.star -log-level debug