#!/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/mojo/wiki/Release-process

import argparse
import distutils.util
import os
import subprocess
import sys
import tempfile

SCRIPT_DIR = os.path.dirname(os.path.abspath(__file__))
SRC_ROOT = os.path.dirname(os.path.dirname(os.path.dirname(SCRIPT_DIR)))
DART_SDK = os.path.join(SRC_ROOT, 'third_party', 'dart-sdk', 'dart-sdk', 'bin')
PUB = os.path.join(DART_SDK, 'pub')

PACKAGES = [
  'mojo',
  'mojo_apptest',
  'mojo_services',
  'mojom',
]

CONFIRM = """This tool is destructive and will revert your current branch to
origin/master among other things.  Are you sure you wish to continue?"""


def run(cwd, args):
    print 'RUNNING:', ' '.join(args), 'IN:', cwd
    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.parse_args()

    if not confirm(CONFIRM):
        print "Aborted."
        return 1

    run(SRC_ROOT, ['git', 'fetch', 'origin'])
    run(SRC_ROOT, ['git', 'reset', 'origin/master', '--hard'])
    run(SRC_ROOT, ['gclient', 'sync'])

    run(SRC_ROOT, ['mojo/tools/mojob.py', 'gn', '--android', '--release'])
    run(SRC_ROOT, ['ninja', '-C', 'out/android_Release'])

    package_root = tempfile.mkdtemp(prefix='pub_packages-')

    run(SRC_ROOT, [
        'mojo/dart/tools/prepare_pub_packages.py',
        '--out-dir',
        package_root,
        'out',
    ])

    for package in PACKAGES:
        package_dir = os.path.join(package_root, package)
        print "PACKAGE", package_dir, "PUB", PUB
        run(package_dir, [PUB, 'publish', '--force'])


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