xref: /aosp_15_r20/external/angle/build/fuchsia/test/serve_repo.py (revision 8975f5c5ed3d1c378011245431ada316dfb6f244)
1*8975f5c5SAndroid Build Coastguard Worker# Copyright 2022 The Chromium Authors
2*8975f5c5SAndroid Build Coastguard Worker# Use of this source code is governed by a BSD-style license that can be
3*8975f5c5SAndroid Build Coastguard Worker# found in the LICENSE file.
4*8975f5c5SAndroid Build Coastguard Worker"""Implements commands for serving a TUF repository."""
5*8975f5c5SAndroid Build Coastguard Worker
6*8975f5c5SAndroid Build Coastguard Workerimport argparse
7*8975f5c5SAndroid Build Coastguard Workerimport contextlib
8*8975f5c5SAndroid Build Coastguard Worker
9*8975f5c5SAndroid Build Coastguard Workerfrom typing import Iterator, Optional
10*8975f5c5SAndroid Build Coastguard Worker
11*8975f5c5SAndroid Build Coastguard Workerfrom common import REPO_ALIAS, run_ffx_command
12*8975f5c5SAndroid Build Coastguard Worker
13*8975f5c5SAndroid Build Coastguard Worker_REPO_NAME = 'chromium-test-package-server'
14*8975f5c5SAndroid Build Coastguard Worker
15*8975f5c5SAndroid Build Coastguard Worker
16*8975f5c5SAndroid Build Coastguard Workerdef _stop_serving(repo_name: str, target: Optional[str]) -> None:
17*8975f5c5SAndroid Build Coastguard Worker    """Stop serving a repository."""
18*8975f5c5SAndroid Build Coastguard Worker
19*8975f5c5SAndroid Build Coastguard Worker    # Attempt to clean up.
20*8975f5c5SAndroid Build Coastguard Worker    run_ffx_command(
21*8975f5c5SAndroid Build Coastguard Worker        cmd=['target', 'repository', 'deregister', '-r', repo_name],
22*8975f5c5SAndroid Build Coastguard Worker        target_id=target,
23*8975f5c5SAndroid Build Coastguard Worker        check=False)
24*8975f5c5SAndroid Build Coastguard Worker    run_ffx_command(cmd=['repository', 'remove', repo_name], check=False)
25*8975f5c5SAndroid Build Coastguard Worker    run_ffx_command(cmd=['repository', 'server', 'stop'], check=False)
26*8975f5c5SAndroid Build Coastguard Worker
27*8975f5c5SAndroid Build Coastguard Worker
28*8975f5c5SAndroid Build Coastguard Workerdef _start_serving(repo_dir: str, repo_name: str,
29*8975f5c5SAndroid Build Coastguard Worker                   target: Optional[str]) -> None:
30*8975f5c5SAndroid Build Coastguard Worker    """Start serving a repository to a target device.
31*8975f5c5SAndroid Build Coastguard Worker
32*8975f5c5SAndroid Build Coastguard Worker    Args:
33*8975f5c5SAndroid Build Coastguard Worker        repo_dir: directory the repository is served from.
34*8975f5c5SAndroid Build Coastguard Worker        repo_name: repository name.
35*8975f5c5SAndroid Build Coastguard Worker        target: Fuchsia device the repository is served to.
36*8975f5c5SAndroid Build Coastguard Worker    """
37*8975f5c5SAndroid Build Coastguard Worker
38*8975f5c5SAndroid Build Coastguard Worker    run_ffx_command(cmd=('config', 'set', 'repository.server.mode', '\"ffx\"'))
39*8975f5c5SAndroid Build Coastguard Worker
40*8975f5c5SAndroid Build Coastguard Worker    run_ffx_command(cmd=['repository', 'server', 'start'])
41*8975f5c5SAndroid Build Coastguard Worker    run_ffx_command(
42*8975f5c5SAndroid Build Coastguard Worker        cmd=['repository', 'add-from-pm', repo_dir, '-r', repo_name])
43*8975f5c5SAndroid Build Coastguard Worker    run_ffx_command(cmd=[
44*8975f5c5SAndroid Build Coastguard Worker        'target', 'repository', 'register', '-r', repo_name, '--alias',
45*8975f5c5SAndroid Build Coastguard Worker        REPO_ALIAS
46*8975f5c5SAndroid Build Coastguard Worker    ],
47*8975f5c5SAndroid Build Coastguard Worker                    target_id=target)
48*8975f5c5SAndroid Build Coastguard Worker
49*8975f5c5SAndroid Build Coastguard Worker
50*8975f5c5SAndroid Build Coastguard Workerdef register_serve_args(arg_parser: argparse.ArgumentParser) -> None:
51*8975f5c5SAndroid Build Coastguard Worker    """Register common arguments for repository serving."""
52*8975f5c5SAndroid Build Coastguard Worker
53*8975f5c5SAndroid Build Coastguard Worker    serve_args = arg_parser.add_argument_group('serve',
54*8975f5c5SAndroid Build Coastguard Worker                                               'repo serving arguments')
55*8975f5c5SAndroid Build Coastguard Worker    serve_args.add_argument('--serve-repo',
56*8975f5c5SAndroid Build Coastguard Worker                            dest='repo',
57*8975f5c5SAndroid Build Coastguard Worker                            help='Directory the repository is served from.')
58*8975f5c5SAndroid Build Coastguard Worker    serve_args.add_argument('--repo-name',
59*8975f5c5SAndroid Build Coastguard Worker                            default=_REPO_NAME,
60*8975f5c5SAndroid Build Coastguard Worker                            help='Name of the repository.')
61*8975f5c5SAndroid Build Coastguard Worker
62*8975f5c5SAndroid Build Coastguard Worker
63*8975f5c5SAndroid Build Coastguard Worker@contextlib.contextmanager
64*8975f5c5SAndroid Build Coastguard Workerdef serve_repository(args: argparse.Namespace) -> Iterator[None]:
65*8975f5c5SAndroid Build Coastguard Worker    """Context manager for serving a repository."""
66*8975f5c5SAndroid Build Coastguard Worker    _start_serving(args.repo, args.repo_name, args.target_id)
67*8975f5c5SAndroid Build Coastguard Worker    try:
68*8975f5c5SAndroid Build Coastguard Worker        yield None
69*8975f5c5SAndroid Build Coastguard Worker    finally:
70*8975f5c5SAndroid Build Coastguard Worker        _stop_serving(args.repo_name, args.target_id)
71