blob: cffbb6dc2c550be0b21722c722de0650361190b0 [file] [log] [blame]
#!/usr/bin/env fuchsia-vendored-python
# Copyright 2016 The Fuchsia 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 os
import paths
import subprocess
import sys
# These are the locations of pubspec files that are roots of the dependency
# graph. If they contain conflicting requirements for a package 'pub get' will
# error out and the conflicts will have to be resolved before the packages can
# be updated.
ROOT_PUBSPECS = [
'prebuilt/third_party/sky_engine',
]
FLUTTER_GIT = 'https://github.com/flutter/flutter.git'
FLUTTER_ROOT = 'third_party/dart-pkg/git/flutter'
FLUTTER_PUBSPECS = [
'packages/flutter',
'packages/flutter_driver',
'packages/flutter_test',
'packages/flutter_tools',
'packages/fuchsia_remote_debug_protocol',
]
# These are the locations of yaml files listing the Dart dependencies of a git
# project.
PROJECT_DEPENDENCIES = [
'src/dart',
]
def main():
parser = argparse.ArgumentParser('Update third-party Dart packages')
parser.add_argument(
'--changelog', help='Path to the changelog file to write', default=None)
parser.add_argument(
'--debug', help='Turns on debugging mode', action='store_true')
# Accept an optional flutter commit/revision id.
parser.add_argument(
'--flutter-revision', help='A git hash within the flutter repo')
script_args = parser.parse_args()
if sys.platform.startswith('linux'):
platform = 'linux-x64'
elif sys.platform.startswith('darwin'):
platform = 'mac-x64'
else:
print('Unsupported platform: %s' % sys.platform)
return 1
dart_path = os.path.join(
paths.FUCHSIA_ROOT, 'prebuilt', 'third_party', 'dart', platform, 'bin',
'dart')
importer_path = os.path.join(
paths.FUCHSIA_ROOT, 'scripts', 'dart', 'package_importer.py')
output_path = os.path.join(
paths.FUCHSIA_ROOT, 'third_party', 'dart-pkg', 'pub')
flutter_absolute_root = os.path.join(paths.FUCHSIA_ROOT, FLUTTER_ROOT)
# flutter --version has the side effect of creating a version file that pub
# uses to find which package versions are compatible with the current version
# of flutter
flutter_tool = os.path.join(flutter_absolute_root, 'bin', 'flutter')
subprocess.check_call([flutter_tool, '--version'])
python_tool = os.path.join(
paths.FUCHSIA_ROOT, 'prebuilt', 'third_party', 'python3', platform,
'bin', 'python3.8')
args = [python_tool, importer_path]
if script_args.debug:
args.append('--debug')
args.extend(['--dart', dart_path])
args.extend(['--output', output_path])
args.append('--pubspecs')
for root in ROOT_PUBSPECS:
args.append(os.path.join(paths.FUCHSIA_ROOT, root))
if script_args.flutter_revision:
args.append('--git-pubspecs')
for flutter_pubspec in FLUTTER_PUBSPECS:
args.append(
','.join(
[
flutter_pubspec.split('/').pop(), FLUTTER_GIT,
script_args.flutter_revision, flutter_pubspec
]))
else:
for flutter_pubspec in FLUTTER_PUBSPECS:
args.append(os.path.join(flutter_absolute_root, flutter_pubspec))
args.append('--projects')
for project in PROJECT_DEPENDENCIES:
args.append(os.path.join(paths.FUCHSIA_ROOT, project))
if script_args.changelog:
args.extend([
'--changelog',
script_args.changelog,
])
subprocess.check_call(args, env={'FLUTTER_ROOT': flutter_absolute_root})
if __name__ == '__main__':
sys.exit(main())