xref: /aosp_15_r20/tools/treble/fetcher/fetcher.py (revision 105f628577ac4ba0e277a494fbb614ed8c12a994)
1*105f6285SAndroid Build Coastguard Worker"""Fetches artifacts from Android Build."""
2*105f6285SAndroid Build Coastguard Workerimport argparse
3*105f6285SAndroid Build Coastguard Workerimport os
4*105f6285SAndroid Build Coastguard Worker
5*105f6285SAndroid Build Coastguard Workerfrom treble.fetcher import fetcher_lib
6*105f6285SAndroid Build Coastguard Worker
7*105f6285SAndroid Build Coastguard Worker
8*105f6285SAndroid Build Coastguard Workerdef main():
9*105f6285SAndroid Build Coastguard Worker  parser = argparse.ArgumentParser(
10*105f6285SAndroid Build Coastguard Worker      description=__doc__, formatter_class=argparse.RawDescriptionHelpFormatter)
11*105f6285SAndroid Build Coastguard Worker  parser.add_argument(
12*105f6285SAndroid Build Coastguard Worker      '--json_keyfile',
13*105f6285SAndroid Build Coastguard Worker      help='JSON keyfile containing credentials. '
14*105f6285SAndroid Build Coastguard Worker      '(Default: Use default credential file)')
15*105f6285SAndroid Build Coastguard Worker  parser.add_argument(
16*105f6285SAndroid Build Coastguard Worker      '--target', required=True, help='The target name to download from.')
17*105f6285SAndroid Build Coastguard Worker  parser.add_argument(
18*105f6285SAndroid Build Coastguard Worker      '--artifact',
19*105f6285SAndroid Build Coastguard Worker      action='append',
20*105f6285SAndroid Build Coastguard Worker      default=[],
21*105f6285SAndroid Build Coastguard Worker      help='The name of the artifact to download. '
22*105f6285SAndroid Build Coastguard Worker      'Can be specified multiple times.')
23*105f6285SAndroid Build Coastguard Worker  parser.add_argument(
24*105f6285SAndroid Build Coastguard Worker      '--regex',
25*105f6285SAndroid Build Coastguard Worker      action='append',
26*105f6285SAndroid Build Coastguard Worker      default=[],
27*105f6285SAndroid Build Coastguard Worker      help='A regex pattern to compare to the names of the artifact to '
28*105f6285SAndroid Build Coastguard Worker      'download. Can be specified multiple times.')
29*105f6285SAndroid Build Coastguard Worker
30*105f6285SAndroid Build Coastguard Worker  parser.add_argument(
31*105f6285SAndroid Build Coastguard Worker      '--out_dir',
32*105f6285SAndroid Build Coastguard Worker      default='out/artifacts/',
33*105f6285SAndroid Build Coastguard Worker      help='Path to store fetched artifact to.')
34*105f6285SAndroid Build Coastguard Worker
35*105f6285SAndroid Build Coastguard Worker  group = parser.add_mutually_exclusive_group(required=True)
36*105f6285SAndroid Build Coastguard Worker  group.add_argument(
37*105f6285SAndroid Build Coastguard Worker      '--branch', help='Download from the latest build of this branch.')
38*105f6285SAndroid Build Coastguard Worker  group.add_argument('--build_id', help='Download from the specified build.')
39*105f6285SAndroid Build Coastguard Worker
40*105f6285SAndroid Build Coastguard Worker  args = parser.parse_args()
41*105f6285SAndroid Build Coastguard Worker  client = fetcher_lib.create_client_from_json_keyfile(
42*105f6285SAndroid Build Coastguard Worker      json_keyfile_name=args.json_keyfile)
43*105f6285SAndroid Build Coastguard Worker
44*105f6285SAndroid Build Coastguard Worker  build_id = fetcher_lib.get_latest_build_id(
45*105f6285SAndroid Build Coastguard Worker      client=client, branch=args.branch,
46*105f6285SAndroid Build Coastguard Worker      target=args.target) if args.branch else args.build_id
47*105f6285SAndroid Build Coastguard Worker
48*105f6285SAndroid Build Coastguard Worker  for artifact in args.artifact:
49*105f6285SAndroid Build Coastguard Worker    fetcher_lib.fetch_artifact(
50*105f6285SAndroid Build Coastguard Worker        client=client,
51*105f6285SAndroid Build Coastguard Worker        build_id=build_id,
52*105f6285SAndroid Build Coastguard Worker        target=args.target,
53*105f6285SAndroid Build Coastguard Worker        resource_id=artifact,
54*105f6285SAndroid Build Coastguard Worker        dest=os.path.join(args.out_dir, artifact))
55*105f6285SAndroid Build Coastguard Worker
56*105f6285SAndroid Build Coastguard Worker  for re in args.regex:
57*105f6285SAndroid Build Coastguard Worker    fetcher_lib.fetch_artifacts(
58*105f6285SAndroid Build Coastguard Worker        client=client,
59*105f6285SAndroid Build Coastguard Worker        build_id=build_id,
60*105f6285SAndroid Build Coastguard Worker        target=args.target,
61*105f6285SAndroid Build Coastguard Worker        pattern=re,
62*105f6285SAndroid Build Coastguard Worker        out_dir=args.out_dir)
63*105f6285SAndroid Build Coastguard Worker
64*105f6285SAndroid Build Coastguard Worker
65*105f6285SAndroid Build Coastguard Workerif __name__ == '__main__':
66*105f6285SAndroid Build Coastguard Worker  main()
67