| #!/usr/bin/env python |
| # Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file |
| # for details. All rights reserved. Use of this source code is governed by a |
| # BSD-style license that can be found in the LICENSE file. |
| """Helper for building and deploying Observatory""" |
| |
| import argparse |
| import os |
| import shutil |
| import subprocess |
| import sys |
| |
| SCRIPT_DIR = os.path.dirname(sys.argv[0]) |
| DART_ROOT = os.path.realpath(os.path.join(SCRIPT_DIR, '..')) |
| RUN_PUB = os.path.join(DART_ROOT, 'tools/run_pub.py') |
| IGNORE_PATTERNS = shutil.ignore_patterns( |
| '*.map', |
| '*.concat.js', |
| '*.scriptUrls', |
| '*.precompiled.js', |
| 'main.*', |
| 'unittest*', |
| '*_buildLogs*', |
| '*.log', |
| '*~') |
| |
| usage = """obs_tool.py [options]""" |
| |
| def BuildArguments(): |
| result = argparse.ArgumentParser(usage=usage) |
| result.add_argument("--package-root", help="package root", default=None) |
| result.add_argument("--dart-executable", help="dart executable", default=None) |
| result.add_argument("--directory", help="observatory root", default=None) |
| result.add_argument("--command", help="[get, build, deploy]", default=None) |
| return result |
| |
| def ProcessOptions(options, args): |
| return ((options.package_root != None) and |
| (options.directory != None) and |
| (options.command != None) and |
| (options.dart_executable != None)) |
| |
| def ChangeDirectory(directory): |
| os.chdir(directory); |
| |
| def PubGet(dart_executable, pkg_root): |
| # Always remove pubspec.lock before running 'pub get'. |
| try: |
| os.remove('pubspec.lock'); |
| except OSError as e: |
| pass |
| return subprocess.call(['python', |
| RUN_PUB, |
| '--package-root=' + pkg_root, |
| '--dart-executable=' + dart_executable, |
| 'get', |
| '--offline']) |
| |
| def PubBuild(dart_executable, pkg_root, output_dir): |
| return subprocess.call(['python', |
| RUN_PUB, |
| '--package-root=' + pkg_root, |
| '--dart-executable=' + dart_executable, |
| 'build', |
| '--output', |
| output_dir]) |
| |
| def Deploy(input_dir, output_dir): |
| shutil.rmtree(output_dir) |
| shutil.copytree(input_dir, output_dir, ignore=IGNORE_PATTERNS) |
| return 0 |
| |
| def ExecuteCommand(options, args): |
| cmd = options.command |
| if (cmd == 'get'): |
| return PubGet(options.dart_executable, options.package_root) |
| elif (cmd == 'build'): |
| return PubBuild(options.dart_executable, options.package_root, args[0]) |
| elif (cmd == 'deploy'): |
| Deploy('build', 'deployed') |
| else: |
| print >> sys.stderr, ('ERROR: command "%s" not supported') % (cmd) |
| return -1; |
| |
| def main(): |
| # Parse the options. |
| parser = BuildArguments() |
| (options, args) = parser.parse_known_args() |
| if not ProcessOptions(options, args): |
| parser.print_help() |
| return 1 |
| if os.getenv('DART_USE_BOOTSTRAP_BIN') != None: |
| dart_executable = options.dart_executable |
| # Calculate absolute paths before changing directory. |
| options.package_root = os.path.abspath(options.package_root) |
| options.dart_executable = os.path.abspath(options.dart_executable) |
| if len(args) == 1: |
| args[0] = os.path.abspath(args[0]) |
| # Pub must be run from the project's root directory. |
| ChangeDirectory(options.directory) |
| return ExecuteCommand(options, args) |
| |
| if __name__ == '__main__': |
| sys.exit(main()); |