big_red_button.py 3.8 KB
Newer Older
1 2 3 4 5
#!/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.

6 7
# Prepare release script.
#
8 9 10 11 12 13
# 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
14

15
import argparse
16 17
import os
import subprocess
18
import sys
19
import distutils.util
20

21

22
DEFAULT_SKY_ENGINE_ROOT = '/src/sky_engine/src'
23 24
DEFAULT_SKY_SDK_ROOT = '/src/sky_sdk'
DEFAULT_DEMO_SITE_ROOT = '/src/domokit.github.io'
25 26
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?"""
27
DRY_RUN = False
28

29

30 31
def run(cwd, args):
    print 'RUNNING:', ' '.join(args), 'IN:', cwd
32 33
    if DRY_RUN:
        return
34 35 36
    subprocess.check_call(args, cwd=cwd)


37 38 39 40 41 42 43 44
def confirm(prompt):
    user_input = raw_input("%s (y/N) " % prompt)
    try:
        return distutils.util.strtobool(user_input) == 1
    except ValueError:
        return False


45 46 47 48 49 50 51 52
def publish_packages(pub_path, packages_root):
    for package in os.listdir(packages_root):
        package_path = os.path.join(packages_root, package)
        if not os.path.isdir(package_path):
            continue
        run(package_path, [pub_path, 'publish', '--force'])


53 54
def main():
    parser = argparse.ArgumentParser(description='Deploy!')
55 56
    parser.add_argument('--sky-engine-root', help='Path to sky_engine/src',
        default=DEFAULT_SKY_ENGINE_ROOT)
57 58 59 60 61 62 63 64
    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.')
65 66
    args = parser.parse_args()

67 68 69 70
    global DRY_RUN
    DRY_RUN = args.dry_run

    if not args.dry_run and not confirm(CONFIRM_MESSAGE):
71 72 73
        print "Aborted."
        return 1

74
    sky_engine_root = os.path.abspath(os.path.expanduser(args.sky_engine_root))
75 76
    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))
77 78

    # Derived paths:
79
    dart_sdk_root = os.path.join(sky_engine_root, 'third_party/dart-sdk/dart-sdk')
80 81 82
    pub_path = os.path.join(dart_sdk_root, 'bin/pub')
    packages_root = os.path.join(sky_sdk_root, 'packages')

83 84
    run(sky_engine_root, ['git', 'pull', '--rebase'])
    run(sky_engine_root, ['gclient', 'sync'])
85
    run(sky_engine_root, ['sky/tools/gn', '--android', '--release'])
86 87
    # TODO(eseidel): We shouldn't use mojob anymore, it likely will break.
    run(sky_engine_root, ['mojo/tools/mojob.py', 'build', '--android', '--release'])
88 89
    # Run tests?

90
    run(sky_sdk_root, ['git', 'fetch'])
91
    run(sky_sdk_root, ['git', 'reset', '--hard', 'origin/master'])
92
    run(sky_engine_root, [
93 94 95 96 97 98 99
        'sky/tools/deploy_sdk.py',
        '--non-interactive',
        '--commit',
        sky_sdk_root
    ])
    # tag for version?

100
    run(demo_site_root, ['git', 'fetch'])
101
    run(demo_site_root, ['git', 'reset', '--hard', 'origin/master'])
102 103
    # TODO(eseidel): We should move this script back into sky/tools.
    run(sky_engine_root, ['mojo/tools/deploy_domokit_site.py', demo_site_root])
104 105
    # tag for version?

106 107
    if args.publish:
        publish_packages(pub_path, packages_root)
108 109 110 111 112 113 114

    run(sky_sdk_root, ['git', 'push'])
    run(demo_site_root, ['git', 'push'])


if __name__ == '__main__':
    sys.exit(main())