blob: b4e1ea09f9865ade616c99376ba6198de4c9f2e2 [file] [log] [blame]
#!/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
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()
class Artifact(object):
def __init__(self, category, name):
self.category = category
self.name = name
GS_URL = 'gs://mojo/sky/%(category)s/%(config)s/%(commit_hash)s/%(name)s'
ARTIFACTS = {
'android-arm': [
Artifact('shell', 'SkyShell.apk'),
Artifact('viewer', 'sky_viewer.mojo'),
Artifact('viewer', 'libsky_viewer_library.so'),
],
'linux-x64': [
Artifact('shell', 'icudtl.dat'),
Artifact('shell', 'sky_shell'),
Artifact('shell', 'sky_snapshot'),
Artifact('viewer', 'sky_viewer.mojo'),
Artifact('viewer', 'libsky_viewer_library.so'),
]
}
def upload_artifacts(dist_root, config, commit_hash):
for artifact in ARTIFACTS[config]:
src = os.path.join(artifact.category, artifact.name)
dst = GS_URL % {
'category': artifact.category,
'config': config,
'commit_hash': commit_hash,
'name': artifact.name,
}
z = ','.join([ 'mojo', 'dat' ])
run(dist_root, ['gsutil', 'cp', '-z', z, src, 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_dist_root = os.path.join(engine_root, 'out/android_Release/dist')
linux_dist_root = os.path.join(engine_root, 'out/Release/dist')
sky_engine_package_root = os.path.join(android_dist_root, 'packages/sky_engine/sky_engine')
sky_services_package_root = os.path.join(android_dist_root, '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)
upload_artifacts(android_dist_root, 'android-arm', commit_hash)
upload_artifacts(linux_dist_root, 'linux-x64', 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())