提交 5082974b 编写于 作者: A Adam Barth

Remove vendored dart-sdk (#2688)

The engine.git repo doesn't need a copy of the Dart SDK anymore.

Fixes https://github.com/flutter/flutter/issues/2618
上级 237fee47
......@@ -46,7 +46,6 @@ target_os = ["android"]
* `cd src` (Change to the directory that `gclient sync` created in your `engine` directory.)
* `git remote add upstream git@github.com:flutter/engine.git` (So that you fetch from the master repository, not your clone, when running `git fetch` et al.)
* Run `./tools/android/download_android_tools.py` to add Android dependencies to your tree. You will need to run this command again if you ever run `git clean -xdf`, since that deletes these dependencies. (`git clean -df` is fine since it skips these `.gitignore`d files.)
* Add `.../engine/src/third_party/dart-sdk/dart-sdk/bin/` to your path so that you can run the `pub` tool more easily.
* Add `.../engine/src/third_party/android_tools/sdk/platform-tools` to your path so that you can run the `adb` tool more easily. This is also required by the `flutter` tool, which is used to run Flutter apps.
* Make sure you are still in the `src` directory that the `gclient sync` step created earlier.
* If you're on Linux, run `sudo ./build/install-build-deps-android.sh`
......
......@@ -133,12 +133,6 @@ hooks = [
'pattern': '.',
'action': ['python', 'src/tools/clang/scripts/update.py', '--if-needed'],
},
{
# Pull dart sdk if needed
'name': 'dart',
'pattern': '.',
'action': ['python', 'src/tools/dart/update.py'],
},
{
# Update LASTCHANGE. This is also run by export_tarball.py in
# src/tools/export_tarball - please keep them in sync.
......
#!/usr/bin/env python
# Copyright 2015 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.
# See https://github.com/domokit/sky_engine/wiki/Release-process
import argparse
import os
import subprocess
import sys
import distutils.util
import tempfile
import zipfile
DRY_RUN = False
def run(cwd, args):
print 'RUNNING:', ' '.join(args), 'IN:', cwd
if DRY_RUN:
return
subprocess.check_call(args, cwd=cwd)
def confirm(prompt):
user_input = raw_input("%s (y/N) " % prompt)
try:
return distutils.util.strtobool(user_input) == 1
except ValueError:
return False
def git_revision(cwd):
return subprocess.check_output([
'git', 'rev-parse', 'HEAD',
], cwd=cwd).strip()
GS_URL = 'gs://mojo/flutter/%(commit_hash)s/%(config)s/%(name)s'
# Paths of the artifacts that will be packaged into a zip file.
ZIP_ARTIFACTS = {
'android-arm': [
'chromium-debug.keystore',
'icudtl.dat',
'dist/shell/SkyShell.apk',
'dist/shell/flutter.mojo',
'gen/sky/shell/shell/classes.dex.jar',
'gen/sky/shell/shell/shell/libs/armeabi-v7a/libsky_shell.so',
# TODO(mpcomplete): obsolete. Remove after updating the flutter tool.
'gen/sky/shell/shell/classes.dex',
],
'linux-x64': [
'dist/shell/icudtl.dat',
'dist/shell/sky_shell',
'dist/shell/sky_snapshot',
'dist/shell/flutter.mojo',
],
}
# Paths of the artifacts that will be uploaded to GCS as individual files.
FILE_ARTIFACTS = {
'android-arm': [
'dist/shell/flutter.mojo',
'dist/shell/libflutter_library.so',
],
'linux-x64': [
'dist/shell/flutter.mojo',
'dist/shell/libflutter_library.so',
],
}
def find_missing_artifacts(config, config_root):
result = []
for artifact_map in [ZIP_ARTIFACTS, FILE_ARTIFACTS]:
for artifact_path in artifact_map[config]:
full_path = os.path.join(config_root, artifact_path)
if not os.path.exists(full_path):
result.append(full_path)
return result
# Do not try to compress file types that are already compressed.
FILE_TYPE_COMPRESSION = {
'.apk': zipfile.ZIP_STORED,
}
def upload_artifacts(dist_root, config, commit_hash):
# Build and upload a zip file of artifacts
zip_fd, zip_filename = tempfile.mkstemp('.zip', 'artifacts_')
try:
os.close(zip_fd)
artifact_zip = zipfile.ZipFile(zip_filename, 'w')
for artifact_path in ZIP_ARTIFACTS[config]:
_, extension = os.path.splitext(artifact_path)
artifact_zip.write(os.path.join(dist_root, artifact_path),
os.path.basename(artifact_path),
FILE_TYPE_COMPRESSION.get(extension, zipfile.ZIP_DEFLATED))
artifact_zip.close()
dst = GS_URL % {
'config': config,
'commit_hash': commit_hash,
'name': 'artifacts.zip',
}
run(dist_root, ['gsutil', 'cp', zip_filename, dst])
finally:
os.remove(zip_filename)
# Upload individual file artifacts
for artifact_path in FILE_ARTIFACTS[config]:
dst = GS_URL % {
'config': config,
'commit_hash': commit_hash,
'name': os.path.basename(artifact_path),
}
z = ','.join([ 'mojo', 'so' ])
run(dist_root, ['gsutil', 'cp', '-z', z, artifact_path, dst])
def main():
parser = argparse.ArgumentParser(description='Deploy!')
parser.add_argument('--dry-run', action='store_true', default=False,
help='Just print commands w/o executing.')
parser.add_argument('--revision', help='The git revision to publish.')
args = parser.parse_args()
global DRY_RUN
DRY_RUN = args.dry_run
engine_root = os.path.abspath('.')
if not os.path.exists(os.path.join(engine_root, 'sky')):
print "Cannot find //sky. Is %s the Flutter engine repository?" % engine_root
return 1
commit_hash = git_revision(engine_root)
if commit_hash != args.revision:
print "Current revision %s does not match requested revision %s." % (commit_hash, args.revision)
print "Please update the current revision to %s." % args.revision
return 1
# Derived paths:
dart_sdk_root = os.path.join(engine_root, 'third_party/dart-sdk/dart-sdk')
pub_path = os.path.join(dart_sdk_root, 'bin/pub')
android_out_root = os.path.join(engine_root, 'out/android_Release')
linux_out_root = os.path.join(engine_root, 'out/Release')
sky_engine_package_root = os.path.join(android_out_root, 'dist/packages/sky_engine/sky_engine')
sky_services_package_root = os.path.join(android_out_root, 'dist/packages/sky_services/sky_services')
sky_engine_revision_file = os.path.join(sky_engine_package_root, 'lib', 'REVISION')
run(engine_root, ['sky/tools/gn', '--android', '--release'])
run(engine_root, ['ninja', '-C', 'out/android_Release', ':dist'])
run(engine_root, ['sky/tools/gn', '--release'])
run(engine_root, ['ninja', '-C', 'out/Release', ':dist'])
with open(sky_engine_revision_file, 'w') as stream:
stream.write(commit_hash)
configs = [('android-arm', android_out_root),
('linux-x64', linux_out_root)]
# Check for missing artifact files
missing_artifacts = []
for config, config_root in configs:
missing_artifacts.extend(find_missing_artifacts(config, config_root))
if missing_artifacts:
print ('Build is missing files:\n%s' %
'\n'.join('\t%s' % path for path in missing_artifacts))
return 1
# Upload artifacts
for config, config_root in configs:
upload_artifacts(config_root, config, commit_hash)
run(sky_engine_package_root, [pub_path, 'publish', '--force'])
run(sky_services_package_root, [pub_path, 'publish', '--force'])
if __name__ == '__main__':
sys.exit(main())
#!/usr/bin/python
# Copyright 2015 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.
"""Pulls down the current dart sdk to third_party/dart-sdk/.
You can manually force this to run again by removing
third_party/dart-sdk/STAMP_FILE, which contains the URL of the SDK that
was downloaded. Rolling works by updating LINUX_64_SDK to a new URL.
"""
import os
import shutil
import subprocess
import sys
# How to roll the dart sdk: Just change this url! We write this to the stamp
# file after we download, and then check the stamp file for differences.
SDK_URL_BASE = ('http://gsdview.appspot.com/dart-archive/channels/stable/raw/'
'1.14.1/sdk/')
LINUX_64_SDK = 'dartsdk-linux-x64-release.zip'
MACOS_64_SDK = 'dartsdk-macos-x64-release.zip'
# Path constants. (All of these should be absolute paths.)
THIS_DIR = os.path.abspath(os.path.dirname(__file__))
MOJO_DIR = os.path.abspath(os.path.join(THIS_DIR, '..', '..'))
DART_SDK_DIR = os.path.join(MOJO_DIR, 'third_party', 'dart-sdk')
STAMP_FILE = os.path.join(DART_SDK_DIR, 'STAMP_FILE')
LIBRARIES_FILE = os.path.join(DART_SDK_DIR,'dart-sdk',
'lib', '_internal', 'libraries.dart')
PATCH_FILE = os.path.join(MOJO_DIR, 'tools', 'dart', 'patch_sdk.diff')
def RunCommand(command, fail_hard=True):
"""Run command and return success (True) or failure; or if fail_hard is
True, exit on failure."""
print 'Running %s' % (str(command))
if subprocess.call(command, shell=False) == 0:
return True
print 'Failed.'
if fail_hard:
sys.exit(1)
return False
def main():
# Only get the SDK if we don't have a stamp for or have an out of date stamp
# file.
get_sdk = False
if sys.platform.startswith('linux'):
sdk_url = SDK_URL_BASE + LINUX_64_SDK
output_file = os.path.join(DART_SDK_DIR, LINUX_64_SDK)
elif sys.platform.startswith('darwin'):
sdk_url = SDK_URL_BASE + MACOS_64_SDK
output_file = os.path.join(DART_SDK_DIR, MACOS_64_SDK)
else:
print "Platform not supported"
return 1
if not os.path.exists(STAMP_FILE):
get_sdk = True
else:
# Get the contents of the stamp file.
with open(STAMP_FILE, "r") as stamp_file:
stamp_url = stamp_file.read().replace('\n', '')
if stamp_url != sdk_url:
get_sdk = True
if get_sdk:
# Completely remove all traces of the previous SDK.
if os.path.exists(DART_SDK_DIR):
shutil.rmtree(DART_SDK_DIR)
os.mkdir(DART_SDK_DIR)
# Download the Linux x64 based Dart SDK.
# '-C -': Resume transfer if possible.
# '--location': Follow Location: redirects.
# '-o': Output file.
curl_command = ['curl',
'-C', '-',
'--location',
'-o', output_file,
sdk_url]
if not RunCommand(curl_command, fail_hard=False):
print "Failed to get dart sdk from server."
return 1
# Write our stamp file so we don't redownload the sdk.
with open(STAMP_FILE, "w") as stamp_file:
stamp_file.write(sdk_url)
unzip_command = ['unzip', '-o', '-q', output_file, '-d', DART_SDK_DIR]
if not RunCommand(unzip_command, fail_hard=False):
print "Failed to unzip the dart sdk."
return 1
return 0
if __name__ == '__main__':
sys.exit(main())
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册