blob: 28045e499b118fff06a6688fce4bdbf41ad2d54f [file] [log] [blame]
#!/usr/bin/env python3.8
# Copyright 2020 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
import argparse
import json
import os
import subprocess
import sys
def fini_to_json(input, output):
with open(input, 'r') as input_file:
lines = input_file.read().splitlines()
entries = []
for line in lines:
values = line.split("=", 1)
entries.append({'source': values[1], 'destination': values[0]})
with open(output, 'w') as output_file:
json.dump(
sorted(entries, key=lambda x: (x['destination'], x['source'])),
output_file,
indent=2,
sort_keys=True,
separators=(',', ': '))
def main():
parser = argparse.ArgumentParser(description='Create an asset manifest')
parser.add_argument(
'--flutter-root',
type=str,
required=True,
help='The root of the Flutter SDK')
parser.add_argument(
'--flutter-tools',
type=str,
required=True,
help='The executable for the Flutter tool')
parser.add_argument(
'--asset-dir',
type=str,
required=True,
help='The directory where to put intermediate files')
parser.add_argument(
'--app-dir', type=str, required=True, help='The root of the app')
parser.add_argument(
'--packages', type=str, required=True, help='The package map to use')
parser.add_argument(
'--manifest', type=str, help='The application manifest', required=True)
parser.add_argument(
'--component-name',
type=str,
help='The name of the component',
required=True)
parser.add_argument(
'--output',
type=str,
help=
'Output path for the asset manifest used by the fuchsia packaging tool')
args = parser.parse_args()
env = os.environ.copy()
env['FLUTTER_ROOT'] = args.flutter_root
# This ensures the tool does not make unneeded network calls.
env['BOT'] = 'true'
intermediate = args.output + '.partial'
call_args = [
args.flutter_tools,
'--asset-dir=%s' % args.asset_dir,
'--packages=%s' % args.packages,
'--manifest=%s' % args.manifest,
'--asset-manifest-out=%s' % intermediate,
'--component-name=%s' % args.component_name
]
result = subprocess.call(call_args, env=env, cwd=args.app_dir)
if result == 0:
fini_to_json(intermediate, args.output)
return result
if __name__ == '__main__':
sys.exit(main())