Coverage for src/gcp_attest/_cli/__init__.py: 74%
34 statements
« prev ^ index » next coverage.py v7.15.0, created at 2026-07-12 16:04 +0200
« prev ^ index » next coverage.py v7.15.0, created at 2026-07-12 16:04 +0200
1import sys
2from typing import Sequence
3from typing import TYPE_CHECKING
5if TYPE_CHECKING:
6 import argparse
9def _get_parser() -> "argparse.ArgumentParser":
10 import argparse
11 from importlib.metadata import version
13 parser = argparse.ArgumentParser(
14 description="Produce Sigstore digital attestations and use PyPI Trusted Publisher via Google Cloud IAM.",
15 formatter_class=argparse.ArgumentDefaultsHelpFormatter,
16 )
17 parser.color = True
18 parser.add_argument(
19 "--version",
20 "-V",
21 action="version",
22 version=f"gcp-attest version {version('gcp-attest')}",
23 )
24 subparsers = parser.add_subparsers(
25 dest="subcommand",
26 required=True,
27 metavar="COMMAND",
28 )
30 token_parser = subparsers.add_parser(
31 "token",
32 help="Issue a Google Cloud OIDC token for the specified audience.",
33 )
34 token_parser.add_argument("audience", help="'aud' claim of the token")
36 return parser
39# TODO: the body of this should be its own function
40def _token(args: argparse.Namespace) -> int | None:
41 from google.auth.transport.requests import Request
42 from gcp_attest.credentials import get_id_token_credentials
44 try:
45 credentials = get_id_token_credentials(args.audience)
46 credentials.refresh(Request())
47 except Exception as e:
48 # TODO: proper logging
49 sys.stderr.write(f"ERROR: {e!s}\n")
50 return 1
52 if not credentials.valid:
53 sys.stderr.write("FATAL: credentials are invalid\n")
54 return -1
56 token: str = credentials.token
57 sys.stdout.write(token)
58 sys.stdout.write("\n")
59 sys.stdout.flush()
62def main(argv: Sequence[str] | None = None) -> int | None:
63 parser = _get_parser()
64 args = parser.parse_args(argv)
66 if args.subcommand == "token": 66 ↛ exitline 66 didn't return from function 'main' because the condition on line 66 was always true
67 return _token(args)