Files
iconograph/server/publish_manifest.py
2016-03-31 23:05:33 -07:00

85 lines
1.9 KiB
Python
Executable File

#!/usr/bin/python3
import argparse
import os
import subprocess
import sys
import tempfile
parser = argparse.ArgumentParser(description='iconograph fetcher')
parser.add_argument(
'--cert',
dest='cert',
action='store',
required=True)
parser.add_argument(
'--default-rollout',
dest='default_rollout',
action='store',
type=int,
default=0)
parser.add_argument(
'--image-dir',
dest='image_dir',
action='store',
required=True)
parser.add_argument(
'--key',
dest='key',
action='store',
required=True)
parser.add_argument(
'--other-cert',
dest='other_certs',
action='append')
FLAGS = parser.parse_args()
def Exec(*args, **kwargs):
print('+', args)
subprocess.check_call(args, **kwargs)
def main():
base = os.path.dirname(sys.argv[0])
unsigned_manifest = os.path.join(FLAGS.image_dir, 'manifest.json.unsigned')
signed_manifest = os.path.join(FLAGS.image_dir, 'manifest.json')
with tempfile.NamedTemporaryFile(dir=FLAGS.image_dir, delete=False) as fh:
try:
Exec(
os.path.join(base, 'build_manifest.py'),
'--default-rollout', str(FLAGS.default_rollout),
'--image-dir', FLAGS.image_dir,
'--old-manifest', unsigned_manifest,
stdout=fh)
os.rename(fh.name, unsigned_manifest)
except:
os.unlink(fh.name)
raise
with tempfile.NamedTemporaryFile(dir=FLAGS.image_dir, delete=False) as fh, open(unsigned_manifest, 'r') as fh_in:
try:
args = [
os.path.join(base, 'wrap_file.py'),
'--cert', FLAGS.cert,
'--key', FLAGS.key,
]
for other_cert in FLAGS.other_certs or []:
args.extend([
'--other-cert', other_cert,
])
Exec(
*args,
stdin=fh_in,
stdout=fh)
os.rename(fh.name, signed_manifest)
except:
os.unlink(fh.name)
if __name__ == '__main__':
main()