#!/usr/bin/env python3
# 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.
"""Sync generated *.pyl files to //testing/buildbot.
After modifying the starlark and running it to regenerate configs, if
mixins.pyl has been modified, this script should be run to sync it to
//testing/buildbot. The script can be run with the --check flag to
indicate whether a sync needs to be performed.
mixins.pyl needs to be present in //testing/buildbot because the
directory is exported to a separate repo that the angle repo includes as
a dep in order to reuse the mixin definitions.
"""
import argparse
import filecmp
import os.path
import shutil
import sys
INFRA_CONFIG_DIR = os.path.abspath(f'{__file__}/../..')
TESTING_BUILDBOT_DIR = os.path.normpath(
f'{INFRA_CONFIG_DIR}/../../testing/buildbot')
GENERATED_TESTING_DIR = os.path.normpath(
f'{INFRA_CONFIG_DIR}/generated/testing')
def copy_file(src, dst):
shutil.copyfile(src, dst)
return None
_DOC_LINK = ('https://chromium.googlesource.com/chromium/src'
'/+/HEAD/infra/config/targets#tests-in-starlark')
def check_file(src, dst):
if os.path.exists(dst) and filecmp.cmp(src, dst):
return None
return ('files in //testing/buildbot differ from those in'
f' //infra/config/generated/testing, see {_DOC_LINK} for information'
' on the process for updating pyl files')
def parse_args(argv):
parser = argparse.ArgumentParser()
parser.set_defaults(func=copy_file)
parser.add_argument('--check',
help='check that files are synced',
action='store_const',
dest='func',
const=check_file)
return parser.parse_args(argv)
def main(args):
error = args.func(os.path.normpath(f'{GENERATED_TESTING_DIR}/mixins.pyl'),
os.path.normpath(f'{TESTING_BUILDBOT_DIR}/mixins.pyl'))
if error is not None:
print(error, file=sys.stderr)
return 1
return 0
if __name__ == '__main__':
args = parse_args(sys.argv[1:])
sys.exit(main(args))