1
    2
    3
    4
    5
    6
    7
    8
    9
   10
   11
   12
   13
   14
   15
   16
   17
   18
   19
   20
   21
   22
   23
   24
   25
   26
   27
   28
   29
   30
   31
   32
   33
   34
   35
   36
   37
   38
   39
   40
   41
   42
   43
   44
   45
   46
   47
   48
   49
   50
   51
   52
   53
   54
   55
   56
   57
   58
   59
   60
   61
   62
   63
   64
   65
   66
   67
   68
   69
   70

build / config / siso / rewrapper_cfg.star [blame]

# -*- bazel-starlark -*-
# Copyright 2023 The Chromium Authors
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
"""Siso configuration for parsing rewrapper cfg file."""

load("@builtin//struct.star", "module")
load("./config.star", "config")

def __parse(ctx, cfg_file):
    if not cfg_file:
        fail("cfg file expected but none found")
    if not ctx.fs.exists(cfg_file):
        fail("looked for rewrapper cfg %s but not found, is download_remoteexec_cfg set in gclient custom_vars?" % cfg_file)

    reproxy_config = {}
    for line in str(ctx.fs.read(cfg_file)).splitlines():
        if line.startswith("canonicalize_working_dir="):
            reproxy_config["canonicalize_working_dir"] = line.removeprefix("canonicalize_working_dir=").lower() == "true"

        reproxy_config["download_outputs"] = True
        if line.startswith("download_outputs="):
            reproxy_config["download_outputs"] = line.removeprefix("download_outputs=").lower() == "true"

        if line.startswith("exec_strategy="):
            exec_strategy = line.removeprefix("exec_strategy=")

            # Disable racing on builders since bots don't have many CPU cores.
            if exec_strategy == "racing" and config.get(ctx, "builder"):
                exec_strategy = "remote_local_fallback"
            reproxy_config["exec_strategy"] = exec_strategy

        if line.startswith("exec_timeout="):
            reproxy_config["exec_timeout"] = line.removeprefix("exec_timeout=")

        if line.startswith("reclient_timeout="):
            reproxy_config["reclient_timeout"] = line.removeprefix("reclient_timeout=")

        if line.startswith("inputs="):
            reproxy_config["inputs"] = line.removeprefix("inputs=").split(",")

        if line.startswith("labels="):
            if "labels" not in reproxy_config:
                reproxy_config["labels"] = dict()
            for label in line.removeprefix("labels=").split(","):
                label_parts = label.split("=")
                if len(label_parts) != 2:
                    fail("not k,v %s" % label)
                reproxy_config["labels"][label_parts[0]] = label_parts[1]

        if line.startswith("platform="):
            if "platform" not in reproxy_config:
                reproxy_config["platform"] = dict()
            for label in line.removeprefix("platform=").split(","):
                label_parts = label.split("=")
                if len(label_parts) != 2:
                    fail("not k,v %s" % label)
                reproxy_config["platform"][label_parts[0]] = label_parts[1]

        if line.startswith("remote_wrapper="):
            reproxy_config["remote_wrapper"] = line.removeprefix("remote_wrapper=")

        if line.startswith("server_address="):
            reproxy_config["server_address"] = line.removeprefix("server_address=")
    return reproxy_config

rewrapper_cfg = module(
    "rewrapper_cfg",
    parse = __parse,
)