# This is configuration for LUCI for the gerrit repo
# https://gerrit.googlesource.com/gerrit

# Builders

# Defines a builder to run the "gerrit" recipe in a given bucket. This
# will be hooked up to the CQ label rather than having a set schedule.
luci.builder(
    name = "Verify gerrit CL",
    bucket = "try",
    executable = luci.recipe(
        # The name of the recipe we just made.
        name = "gerrit",
    ),
    service_account = "gerrit-luci-try-builder@gerritcodereview-ci.iam.gserviceaccount.com",
    dimensions = {
        "os": "Ubuntu",
        "cpu": "x86-64",
        "pool": "luci.gerrit.try",
    },
)

# Create a CQ group to watch gerrit repo for changes.
luci.cq_group(
    name = "gerrit_repo",
    acls = [
        # Everyone can trigger dry runs by voting CQ+1
        acl.entry(
            acl.CQ_DRY_RUNNER,
            groups = "all",
        ),
        # Everyone can Trigger dry runs by uploading a new patchset
        acl.entry(
            acl.CQ_NEW_PATCHSET_RUN_TRIGGERER,
            groups = "all",
        ),
        # Every CQ+2 should be able to submit since rights to vote CQ+2 are
        # well-controlled on the Gerrit side.
        acl.entry(
            acl.CQ_COMMITTER,
            groups = "all",
        ),
    ],
    watch = cq.refset(
        repo = "https://gerrit.googlesource.com/gerrit",
        refs = ["refs/heads/master"],
    ),
)

# Attach our "Verify gerrit CL" builder to this CQ group.
luci.cq_tryjob_verifier(
    builder = "try/Verify gerrit CL",
    cq_group = "gerrit_repo",
    # Add NEW_PATCHSET_RUN to the defaults DRY_RUN and FULL_RUN
    mode_allowlist = [
        cq.MODE_DRY_RUN,
        cq.MODE_FULL_RUN,
        cq.MODE_NEW_PATCHSET_RUN,
    ],
)

# Show on https://ci.chromium.org/p/gerrit
luci.list_view(
    name = "gerrit",
    title = "gerrit builders",
    entries = [luci.list_view_entry(builder = "try/Verify gerrit CL")],
)
