blob: 962db1f1afe79bb08999b7fe07767cf0eeeddfbe [file]
#!/usr/bin/env python3
# Copyright (c) 2023 Project CHIP Authors
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
import argparse
import itertools
import json
import logging
import platform
log = logging.getLogger(__name__)
_LIST_OF_PACKAGES_TO_EXCLUDE = {
'fuchsia/third_party/rust/',
'infra/3pp/tools/renode',
}
def include_package(package: dict) -> bool:
if 'path' in package:
path = package['path']
exclusion_match = any(
path.startswith(package_to_exclude)
for package_to_exclude in _LIST_OF_PACKAGES_TO_EXCLUDE
)
if exclusion_match:
return False
return True
def generate_new_cipd_package_json(input_file, output, extra):
with open(input_file) as ins:
packages = json.load(ins)
file_packages = packages.get('packages')
new_file_packages = [x for x in file_packages if include_package(x)]
# Extra is a list of platform:json.
# Filter it for the given platform and append any resulting packages
my_platform = platform.system().lower()
log.info("Loading extra packages for '%s'", my_platform)
# Extra chain because extra is a list of lists like:
# [['darwin:path1'], ['windows:path2']]
for item in itertools.chain.from_iterable(extra):
inject_platform, path = item.split(':', 1)
if inject_platform.lower() != my_platform:
log.info("Skipping: '%s' (i.e. %s)", inject_platform.lower(), path)
continue
log.info("Appending: '%s' for this platform", path)
with open(path) as ins:
for package in json.load(ins).get('packages'):
new_file_packages.append(package)
new_packages = {'packages': new_file_packages}
with open(output, 'w') as f:
json.dump(new_packages, f, indent=2)
log.debug("PACKAGES:\n%s\n", json.dumps(new_packages, indent=2))
def main():
parser = argparse.ArgumentParser(
description=__doc__,
formatter_class=argparse.ArgumentDefaultsHelpFormatter,
)
parser.add_argument(
'--input', '-i', dest='input_file', required=True
)
parser.add_argument(
'--output', '-o', required=True
)
parser.add_argument(
'--extra', '-e', nargs='*', action="append", default=[],
help="Inject extra packages for specific platforms. Format is <platform>:<path_to_json>"
)
logging.basicConfig(format='%(asctime)s %(message)s', level=logging.WARNING)
generate_new_cipd_package_json(**vars(parser.parse_args()))
if __name__ == '__main__':
main()