blob: 3c0d90702f256519a3d8f4e38f443c1f328a050d [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.
# Prepare release script.
#
# 1) Bump versions using sky/tools/roll_versions.py
# 2) Add any additional information to touched CHANGELOG.md files.
# 3) Add any release_notes/version.txt files for updated apks.
# 4) Make a commit, upload it, land it.
# 5) Run this script.
# 6) Publish updated apks using sky/tools/publish_apk.py
import argparse
import os
import subprocess
import sys
import distutils.util
DEFAULT_SKY_ENGINE_ROOT = '/src/sky_engine/src'
DEFAULT_SKY_SDK_ROOT = '/src/sky_sdk'
DEFAULT_DEMO_SITE_ROOT = '/src/domokit.github.io'
CONFIRM_MESSAGE = """This tool is destructive and will revert your current branch to
origin/master among other things. Are you sure you wish to continue?"""
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 main():
parser = argparse.ArgumentParser(description='Deploy!')
parser.add_argument('--sky-engine-root', help='Path to sky_engine/src',
default=DEFAULT_SKY_ENGINE_ROOT)
parser.add_argument('--sky-sdk-root', help='Path to sky_sdk',
default=DEFAULT_SKY_SDK_ROOT)
parser.add_argument('--demo-site-root', help='Path to domokit.github.io',
default=DEFAULT_DEMO_SITE_ROOT)
parser.add_argument('--dry-run', action='store_true', default=False,
help='Just print commands w/o executing.')
parser.add_argument('--no-pub-publish', dest='publish',
action='store_false', default=True, help='Skip pub publish step.')
args = parser.parse_args()
global DRY_RUN
DRY_RUN = args.dry_run
if not args.dry_run and not confirm(CONFIRM_MESSAGE):
print "Aborted."
return 1
sky_engine_root = os.path.abspath(os.path.expanduser(args.sky_engine_root))
sky_sdk_root = os.path.abspath(os.path.expanduser(args.sky_sdk_root))
demo_site_root = os.path.abspath(os.path.expanduser(args.demo_site_root))
# Derived paths:
dart_sdk_root = os.path.join(sky_engine_root, 'third_party/dart-sdk/dart-sdk')
pub_path = os.path.join(dart_sdk_root, 'bin/pub')
packages_root = os.path.join(sky_sdk_root, 'packages')
run(sky_engine_root, ['git', 'pull', '--rebase'])
run(sky_engine_root, ['gclient', 'sync'])
run(sky_engine_root, ['sky/tools/gn', '--android', '--release'])
# TODO(eseidel): We shouldn't use mojob anymore, it likely will break.
run(sky_engine_root, ['mojo/tools/mojob.py', 'build', '--android', '--release'])
# Run tests?
run(sky_sdk_root, ['git', 'fetch'])
run(sky_sdk_root, ['git', 'reset', '--hard', 'origin/master'])
run(sky_engine_root, [
'sky/tools/deploy_sdk.py',
'--non-interactive',
'--commit',
sky_sdk_root
])
# tag for version?
run(demo_site_root, ['git', 'fetch'])
run(demo_site_root, ['git', 'reset', '--hard', 'origin/master'])
# TODO(eseidel): We should move this script back into sky/tools.
run(sky_engine_root, ['mojo/tools/deploy_domokit_site.py', demo_site_root])
# tag for version?
if args.publish:
package_path = os.path.join(packages_root, 'sky')
run(package_path, [pub_path, 'publish', '--force'])
run(sky_sdk_root, ['git', 'push'])
run(demo_site_root, ['git', 'push'])
if __name__ == '__main__':
sys.exit(main())