123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103 |
- #!/usr/bin/env python3
- # Copyright (c) 2021 The Chromium Authors. All rights reserved.
- # Use of this source code is governed by a BSD-style license that can be
- # found in the LICENSE file.
- """This script is used to fetch reclient cfgs."""
- import argparse
- import glob
- import os
- import posixpath
- import re
- import shutil
- import subprocess
- import sys
- THIS_DIR = os.path.abspath(os.path.dirname(__file__))
- def ClangRevision():
- sys.path.insert(0, os.path.join(THIS_DIR, '..', '..',
- 'tools', 'clang', 'scripts'))
- import update
- sys.path.pop(0)
- return update.PACKAGE_VERSION
- def NaclRevision():
- nacl_dir = os.path.join(THIS_DIR, '..', '..', 'native_client')
- if not os.path.exists(nacl_dir):
- return None
- return subprocess.check_output(
- ['git', 'log', '-1', '--format=%H'],
- cwd= nacl_dir,
- ).decode('utf-8').strip()
- def CipdEnsure(pkg_name, ref, directory):
- print('ensure %s %s in %s' % (pkg_name, ref, directory))
- output = subprocess.check_output(
- ' '.join(['cipd', 'ensure', '-root', directory,
- '-ensure-file', '-']),
- shell=True,
- input=('%s %s' % (pkg_name, ref)).encode('utf-8'))
- print(output)
- def RbeProjectFromEnv():
- instance = os.environ.get('RBE_instance')
- if not instance:
- return None
- m = re.fullmatch(r'projects/([-\w]+)/instances/[-\w]+', instance)
- if not m:
- return None
- return m.group(1)
- def main():
- parser = argparse.ArgumentParser(description='fetch reclient cfgs')
- parser.add_argument('--rbe_project',
- help='RBE instance project id',
- default=RbeProjectFromEnv())
- parser.add_argument('--cipd_prefix',
- help='cipd package name prefix',
- default='infra_internal/rbe/reclient_cfgs')
- args = parser.parse_args()
- if not args.rbe_project:
- print('RBE project is not specified')
- return 1
- print('fetch reclient_cfgs for RBE project %s...' % args.rbe_project)
- cipd_prefix = posixpath.join(args.cipd_prefix, args.rbe_project)
- tool_revisions = {
- 'chromium-browser-clang': ClangRevision(),
- 'nacl': NaclRevision()
- }
- for toolchain in tool_revisions:
- revision = tool_revisions[toolchain]
- if not revision:
- print('failed to detect %s revision' % toolchain)
- continue
- CipdEnsure(posixpath.join(cipd_prefix, toolchain),
- ref='revision/' + revision,
- directory=os.path.join(THIS_DIR, toolchain))
- if os.path.exists(os.path.join(THIS_DIR,
- toolchain, 'win-cross-experiments')):
- # copy in win-cross-experiments/toolchain
- # as windows may not use symlinks.
- wcedir = os.path.join(THIS_DIR, 'win-cross-experiments', toolchain)
- if not os.path.exists(wcedir):
- os.makedirs(wcedir, mode=0o755)
- for cfg in glob.glob(os.path.join(THIS_DIR, toolchain,
- 'win-cross-experiments', '*.cfg')):
- fname = os.path.join(wcedir, os.path.basename(cfg))
- if os.path.exists(fname):
- os.chmod(fname, 0o777)
- os.remove(fname)
- print('Copy from %s to %s...' % (cfg, fname))
- shutil.copy(cfg, fname)
- return 0
- if __name__ == '__main__':
- sys.exit(main())
|