You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
74 lines
2.5 KiB
74 lines
2.5 KiB
#!/usr/bin/env vpython3
|
|
# Copyright 2022 The Chromium Authors
|
|
# Use of this source code is governed by a BSD-style license that can be
|
|
# found in the LICENSE file.
|
|
"""Implements commands for managing Fuchsia repos via the ffx tool."""
|
|
|
|
import argparse
|
|
import sys
|
|
|
|
from typing import Iterable
|
|
|
|
from common import make_clean_directory, read_package_paths, \
|
|
register_common_args, run_ffx_command
|
|
|
|
|
|
def publish_packages(packages: Iterable[str],
|
|
repo: str,
|
|
new_repo: bool = False) -> None:
|
|
"""Publish packages to a repo directory, initializing it if necessary."""
|
|
if new_repo:
|
|
run_ffx_command(cmd=['repository', 'create', repo], check=True)
|
|
|
|
args = ['repository', 'publish']
|
|
for package in packages:
|
|
args += ['--package-archive', package]
|
|
args += [repo]
|
|
run_ffx_command(cmd=args, check=True)
|
|
|
|
|
|
def register_package_args(parser: argparse.ArgumentParser,
|
|
allow_temp_repo: bool = False) -> None:
|
|
"""Register common arguments for package publishing."""
|
|
package_args = parser.add_argument_group(
|
|
'package', 'Arguments for package publishing.')
|
|
package_args.add_argument('--packages',
|
|
action='append',
|
|
help='Paths of the package archives to install')
|
|
package_args.add_argument('--repo',
|
|
help='Directory packages will be published to.')
|
|
package_args.add_argument('--purge-repo',
|
|
action='store_true',
|
|
help='If clear the content in the repo.')
|
|
if allow_temp_repo:
|
|
package_args.add_argument(
|
|
'--no-repo-init',
|
|
action='store_true',
|
|
default=False,
|
|
help='Do not initialize the package repository.')
|
|
|
|
|
|
def main():
|
|
"""Stand-alone function for publishing packages."""
|
|
parser = argparse.ArgumentParser()
|
|
register_package_args(parser)
|
|
register_common_args(parser)
|
|
args = parser.parse_args()
|
|
if not args.repo:
|
|
raise ValueError('Must specify directory to publish packages.')
|
|
if not args.packages:
|
|
raise ValueError('Must specify packages to publish.')
|
|
if args.out_dir:
|
|
package_paths = []
|
|
for package in args.packages:
|
|
package_paths.extend(read_package_paths(args.out_dir, package))
|
|
else:
|
|
package_paths = args.packages
|
|
if args.purge_repo:
|
|
make_clean_directory(args.repo)
|
|
publish_packages(package_paths, args.repo)
|
|
|
|
|
|
if __name__ == '__main__':
|
|
sys.exit(main())
|