tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

configure_siso.py (2557B)


      1 #!/usr/bin/env python3
      2 # Copyright 2023 The Chromium Authors
      3 # Use of this source code is governed by a BSD-style license that can be
      4 # found in the LICENSE file.
      5 """This script is used to configure siso."""
      6 
      7 import argparse
      8 import os
      9 import shutil
     10 import sys
     11 
     12 THIS_DIR = os.path.abspath(os.path.dirname(__file__))
     13 
     14 SISO_PROJECT_CFG = "SISO_PROJECT"
     15 SISO_ENV = os.path.join(THIS_DIR, ".sisoenv")
     16 
     17 _BACKEND_STAR = os.path.join(THIS_DIR, "backend_config", "backend.star")
     18 
     19 _GOOGLE_STAR = os.path.join(THIS_DIR, "backend_config", "google.star")
     20 _KNOWN_GOOGLE_PROJECTS = (
     21    'goma-foundry-experiments',
     22    'rbe-chrome-official',
     23    'rbe-chrome-trusted',
     24    'rbe-chrome-untrusted',
     25    'rbe-chromium-trusted',
     26    'rbe-chromium-trusted-test',
     27    'rbe-chromium-untrusted',
     28    'rbe-chromium-untrusted-test',
     29    'rbe-webrtc-developer'
     30    'rbe-webrtc-trusted',
     31    'rbe-webrtc-untrusted',
     32 )
     33 
     34 def ReadConfig():
     35  entries = {}
     36  if not os.path.isfile(SISO_ENV):
     37    print('The .sisoenv file has not been generated yet')
     38    return entries
     39  with open(SISO_ENV, 'r') as f:
     40    for line in f:
     41      parts = line.strip().split('=')
     42      if len(parts) > 1:
     43        entries[parts[0].strip()] = parts[1].strip()
     44    return entries
     45 
     46 
     47 def main():
     48  parser = argparse.ArgumentParser(description="configure siso")
     49  parser.add_argument("--rbe_instance", help="RBE instance to use for Siso")
     50  parser.add_argument("--get-siso-project",
     51                      help="Print the currently configured siso project to "
     52                      "stdout",
     53                      action="store_true")
     54  args = parser.parse_args()
     55 
     56  if args.get_siso_project:
     57    config = ReadConfig()
     58    if not SISO_PROJECT_CFG in config:
     59      return 1
     60    print(config[SISO_PROJECT_CFG])
     61    return 0
     62 
     63  project = None
     64  rbe_instance = args.rbe_instance
     65  if rbe_instance:
     66    elems = rbe_instance.split("/")
     67    if len(elems) == 4 and elems[0] == "projects":
     68      project = elems[1]
     69      rbe_instance = elems[-1]
     70 
     71  with open(SISO_ENV, "w") as f:
     72    if project:
     73      f.write("%s=%s\n" % (SISO_PROJECT_CFG, project))
     74    if rbe_instance:
     75      f.write("SISO_REAPI_INSTANCE=%s\n" % rbe_instance)
     76  if project in _KNOWN_GOOGLE_PROJECTS:
     77    if os.path.exists(_BACKEND_STAR):
     78      os.remove(_BACKEND_STAR)
     79    shutil.copy2(_GOOGLE_STAR, _BACKEND_STAR)
     80  if not os.path.exists(_BACKEND_STAR):
     81    print('Need to provide {} for your backend {}'.format(
     82        _BACKEND_STAR, args.rbe_instance),
     83          file=sys.stderr)
     84    return 1
     85  return 0
     86 
     87 
     88 if __name__ == "__main__":
     89  sys.exit(main())