Reference corresponding ticket on blueprint.
[tails.git] / bin / idf-content
blob027b72d5052973df6218d19c7157300bfd717671
1 #! /usr/bin/python3
3 import hashlib
4 import io
5 import json
6 import sys
8 from pathlib import Path, PurePath
10 def sha256_file(filename):
11     sha256 = hashlib.sha256()
12     with io.open(filename, mode="rb") as fd:
13         content = fd.read()
14         sha256.update(content)
15     return sha256.hexdigest()
17 def to_json(data):
18     return json.dumps(data, indent=4, sort_keys=True)
20 def target_file_url(channel, filename):
21     basename = PurePath(filename).name
22     return '%(baseurl)s/%(channel)s/%(subdir)s/%(basename)s' % {
23         'baseurl':  'http://dl.amnesia.boum.org/tails',
24         'channel':  channel,
25         'subdir':   PurePath(basename).stem,
26         'basename': basename,
27     }
29 def idf_content(build_target, channel, product_name, version, img, iso):
30     installation_paths = [
31         {
32             'type': 'iso',
33             'target-files': [{
34                 'url':    target_file_url(channel, iso),
35                 'sha256': sha256_file(iso),
36                 'size':   Path(iso).stat().st_size,
37             }],
38         },
39     ]
40     if img is not None:
41         installation_paths += {
42             'type': 'img',
43             'target-files': [{
44                 'url':    target_file_url(channel, img),
45                 'sha256': sha256_file(img),
46                 'size':   Path(img).stat().st_size,
47             }],
48         }
49     return to_json({
50         'build_target':  build_target,
51         'channel':       channel,
52         'product-name':  product_name,
53         'installations': [{
54             'version': version,
55             'installation-paths': installation_paths,
56         }],
57     })
59 if __name__ == '__main__':
60     import argparse
61     parser = argparse.ArgumentParser()
62     parser.add_argument('--build-target', dest='build_target', default='amd64')
63     parser.add_argument('--channel', default='stable')
64     parser.add_argument('--product-name', dest='product_name', default='Tails')
65     parser.add_argument('--version', default=None, required=True,
66                         help='Version of Tails .')
67     parser.add_argument('--img', default=None,
68                         help='Path to the USB image.')
69     parser.add_argument('--iso', default=None, required=True,
70                         help='Path to the ISO file.')
71     args = parser.parse_args()
73     print(idf_content(build_target=args.build_target,
74                       channel=args.channel,
75                       product_name=args.product_name,
76                       version=args.version,
77                       img=args.img,
78                       iso=args.iso))