#!/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.

lucicfg.check_version("1.23.3", "Please update depot_tools")

# Launch all builds in realms-aware mode.
luci.builder.defaults.experiments.set({"luci.use_realms": 100})

# Enable bbagent.
luci.recipe.defaults.use_bbagent.set(True)

lucicfg.config(
    config_dir = "generated",
    fail_on_warnings = True,
)

luci.project(
    name = "perfetto",
    buildbucket = "cr-buildbucket.appspot.com",
    logdog = "luci-logdog",
    milo = "luci-milo",
    scheduler = "luci-scheduler",
    swarming = "chrome-swarming.appspot.com",
    acls = [
        acl.entry(
            [
                acl.BUILDBUCKET_READER,
                acl.LOGDOG_READER,
                acl.PROJECT_CONFIGS_READER,
                acl.SCHEDULER_READER,
            ],
            groups = ["all"],
        ),
        acl.entry(roles = acl.SCHEDULER_OWNER, groups = "mdb/perfetto-cloud-infra"),
        acl.entry([acl.LOGDOG_WRITER], groups = ["luci-logdog-chromium-writers"]),
    ],
)

# Use the default Chromium logdog instance as:
# a) we expect our logs to be very minimal
# b) we are open source so there's nothing special in our logs.
luci.logdog(
    gs_bucket = "chromium-luci-logdog",
)

# Create a realm for the official pool.
# Used by LUCI infra (Googlers: see pools.cfg) to enforce ACLs.
luci.realm(name = "pools/official")

# Bucket used by all official builders.
luci.bucket(
    name = "official",
    acls = [
        acl.entry(
            roles = [acl.BUILDBUCKET_TRIGGERER],
            groups = ["mdb/perfetto-cloud-infra"],
        ),
        acl.entry(
            roles = [acl.SCHEDULER_TRIGGERER, acl.BUILDBUCKET_TRIGGERER],
            groups = ["mdb/chrome-troopers"],
        ),
    ],
)

def official_builder(name, os, caches=[]):
    luci.builder(
        name = name,
        bucket = "official",
        executable = luci.recipe(
            name = "perfetto",
            cipd_package = "infra/recipe_bundles/android.googlesource.com/platform/external/perfetto",
            cipd_version = "refs/heads/master",
        ),
        dimensions = {
            "pool": "luci.perfetto.official",
            "os": os,
            "cpu": "x86-64",
        },
        service_account = "perfetto-luci-official-builder@chops-service-accounts.iam.gserviceaccount.com",
        triggered_by = [
            luci.gitiles_poller(
                name = "perfetto-gitiles-trigger",
                bucket = "official",
                repo = "https://android.googlesource.com/platform/external/perfetto",
                refs = ["refs/tags/v.+"],
            ),
        ],
        caches = [
            swarming.cache(cache, name = cache)
            for cache in caches
        ]
    )

official_builder("perfetto-official-builder-linux", "Linux")
official_builder("perfetto-official-builder-mac", "Mac", ["macos_sdk"])
official_builder("perfetto-official-builder-windows", "Windows", ["windows_sdk"])
official_builder("perfetto-official-builder-android", "Linux")
