xref: /aosp_15_r20/external/cronet/build/fuchsia/test/publish_package.py (revision 6777b5387eb2ff775bb5750e3f5d96f37fb7352b)
1*6777b538SAndroid Build Coastguard Worker#!/usr/bin/env vpython3
2*6777b538SAndroid Build Coastguard Worker# Copyright 2022 The Chromium Authors
3*6777b538SAndroid Build Coastguard Worker# Use of this source code is governed by a BSD-style license that can be
4*6777b538SAndroid Build Coastguard Worker# found in the LICENSE file.
5*6777b538SAndroid Build Coastguard Worker"""Implements commands for managing Fuchsia repos via the ffx tool."""
6*6777b538SAndroid Build Coastguard Worker
7*6777b538SAndroid Build Coastguard Workerimport argparse
8*6777b538SAndroid Build Coastguard Workerimport sys
9*6777b538SAndroid Build Coastguard Worker
10*6777b538SAndroid Build Coastguard Workerfrom typing import Iterable
11*6777b538SAndroid Build Coastguard Worker
12*6777b538SAndroid Build Coastguard Workerfrom common import make_clean_directory, read_package_paths, \
13*6777b538SAndroid Build Coastguard Worker                   register_common_args, run_ffx_command
14*6777b538SAndroid Build Coastguard Worker
15*6777b538SAndroid Build Coastguard Worker
16*6777b538SAndroid Build Coastguard Workerdef publish_packages(packages: Iterable[str],
17*6777b538SAndroid Build Coastguard Worker                     repo: str,
18*6777b538SAndroid Build Coastguard Worker                     new_repo: bool = False) -> None:
19*6777b538SAndroid Build Coastguard Worker    """Publish packages to a repo directory, initializing it if necessary."""
20*6777b538SAndroid Build Coastguard Worker    if new_repo:
21*6777b538SAndroid Build Coastguard Worker        run_ffx_command(cmd=['repository', 'create', repo], check=True)
22*6777b538SAndroid Build Coastguard Worker
23*6777b538SAndroid Build Coastguard Worker    args = ['repository', 'publish']
24*6777b538SAndroid Build Coastguard Worker    for package in packages:
25*6777b538SAndroid Build Coastguard Worker        args += ['--package-archive', package]
26*6777b538SAndroid Build Coastguard Worker    args += [repo]
27*6777b538SAndroid Build Coastguard Worker    run_ffx_command(cmd=args, check=True)
28*6777b538SAndroid Build Coastguard Worker
29*6777b538SAndroid Build Coastguard Worker
30*6777b538SAndroid Build Coastguard Workerdef register_package_args(parser: argparse.ArgumentParser,
31*6777b538SAndroid Build Coastguard Worker                          allow_temp_repo: bool = False) -> None:
32*6777b538SAndroid Build Coastguard Worker    """Register common arguments for package publishing."""
33*6777b538SAndroid Build Coastguard Worker    package_args = parser.add_argument_group(
34*6777b538SAndroid Build Coastguard Worker        'package', 'Arguments for package publishing.')
35*6777b538SAndroid Build Coastguard Worker    package_args.add_argument('--packages',
36*6777b538SAndroid Build Coastguard Worker                              action='append',
37*6777b538SAndroid Build Coastguard Worker                              help='Paths of the package archives to install')
38*6777b538SAndroid Build Coastguard Worker    package_args.add_argument('--repo',
39*6777b538SAndroid Build Coastguard Worker                              help='Directory packages will be published to.')
40*6777b538SAndroid Build Coastguard Worker    package_args.add_argument('--purge-repo',
41*6777b538SAndroid Build Coastguard Worker                              action='store_true',
42*6777b538SAndroid Build Coastguard Worker                              help='If clear the content in the repo.')
43*6777b538SAndroid Build Coastguard Worker    if allow_temp_repo:
44*6777b538SAndroid Build Coastguard Worker        package_args.add_argument(
45*6777b538SAndroid Build Coastguard Worker            '--no-repo-init',
46*6777b538SAndroid Build Coastguard Worker            action='store_true',
47*6777b538SAndroid Build Coastguard Worker            default=False,
48*6777b538SAndroid Build Coastguard Worker            help='Do not initialize the package repository.')
49*6777b538SAndroid Build Coastguard Worker
50*6777b538SAndroid Build Coastguard Worker
51*6777b538SAndroid Build Coastguard Workerdef main():
52*6777b538SAndroid Build Coastguard Worker    """Stand-alone function for publishing packages."""
53*6777b538SAndroid Build Coastguard Worker    parser = argparse.ArgumentParser()
54*6777b538SAndroid Build Coastguard Worker    register_package_args(parser)
55*6777b538SAndroid Build Coastguard Worker    register_common_args(parser)
56*6777b538SAndroid Build Coastguard Worker    args = parser.parse_args()
57*6777b538SAndroid Build Coastguard Worker    if not args.repo:
58*6777b538SAndroid Build Coastguard Worker        raise ValueError('Must specify directory to publish packages.')
59*6777b538SAndroid Build Coastguard Worker    if not args.packages:
60*6777b538SAndroid Build Coastguard Worker        raise ValueError('Must specify packages to publish.')
61*6777b538SAndroid Build Coastguard Worker    if args.out_dir:
62*6777b538SAndroid Build Coastguard Worker        package_paths = []
63*6777b538SAndroid Build Coastguard Worker        for package in args.packages:
64*6777b538SAndroid Build Coastguard Worker            package_paths.extend(read_package_paths(args.out_dir, package))
65*6777b538SAndroid Build Coastguard Worker    else:
66*6777b538SAndroid Build Coastguard Worker        package_paths = args.packages
67*6777b538SAndroid Build Coastguard Worker    if args.purge_repo:
68*6777b538SAndroid Build Coastguard Worker        make_clean_directory(args.repo)
69*6777b538SAndroid Build Coastguard Worker    publish_packages(package_paths, args.repo, args.purge_repo)
70*6777b538SAndroid Build Coastguard Worker
71*6777b538SAndroid Build Coastguard Worker
72*6777b538SAndroid Build Coastguard Workerif __name__ == '__main__':
73*6777b538SAndroid Build Coastguard Worker    sys.exit(main())
74