blob: 19834b8e020f245180251940ad61a93ec0bc248f [file] [log] [blame]
#!/usr/bin/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.
import argparse
import logging
import os
import subprocess
import sys
def _AddToPathIfNeeded(path):
if path not in sys.path:
sys.path.insert(0, path)
def Main(args, extra_args):
if args.dry_run:
logging.info('Dry-run mode, not actually deploying anything.')
dashboard_path = os.path.abspath(os.path.dirname(os.path.dirname(__file__)))
_AddToPathIfNeeded(dashboard_path)
import dashboard
catapult_path = os.path.dirname(dashboard_path)
_AddToPathIfNeeded(catapult_path)
tracing_path = os.path.join(catapult_path, 'tracing')
_AddToPathIfNeeded(tracing_path)
# Initialise the node_runner module to ensure that we have the right modules
# available even if we hadn't run the tests or the presubmit.
_AddToPathIfNeeded(os.path.join(catapult_path, 'common', 'py_utils'))
_AddToPathIfNeeded(os.path.join(catapult_path, 'common', 'node_runner'))
from node_runner import node_util
node_util.InitNode()
try:
from dashboard_build import preprocess
from catapult_build import temp_deployment_dir
deployment_paths = dashboard.PathsForDeployment()
target_dir = args.target_dir if args.target_dir else None
with temp_deployment_dir.TempDeploymentDir(
deployment_paths, use_symlinks=not args.copy_files,
cleanup=not args.dry_run, reuse_path=target_dir) as tempdir:
logging.info('Temporary working directory: %s', tempdir)
viewer_dir_path = os.path.join(tempdir, 'vulcanized_histograms_viewer')
viewer_html_path = os.path.join(viewer_dir_path,
'vulcanized_histograms_viewer.html')
try:
os.mkdir(viewer_dir_path)
except OSError:
pass
with open(viewer_html_path, 'wb') as f:
from tracing_build import vulcanize_histograms_viewer
s = vulcanize_histograms_viewer.VulcanizeHistogramsViewer()
f.write(s.encode('utf-8'))
preprocess.PackPinpoint(catapult_path, tempdir, deployment_paths)
deployment_paths.append(viewer_dir_path)
logging.info('Deployment dir is at %s', tempdir)
if not args.dry_run:
from catapult_build import appengine_deploy
appengine_deploy.Deploy(deployment_paths, extra_args,
os.environ.get('VERSION'))
if not extra_args:
logging.info(
'Deploying dashboard, api, upload, and pinpoint services')
appengine_deploy.Deploy(deployment_paths, [
'api.yaml', 'app.yaml', 'upload.yaml', 'upload-processing.yaml',
'pinpoint.yaml'
], os.environ.get('VERSION'))
except RuntimeError as error:
logging.error('Encountered an error: %s', error)
sys.exit(1)
except subprocess.CalledProcessError as error:
logging.error('Failed: %s', error)
sys.exit(error.returncode)
if __name__ == '__main__':
parser = argparse.ArgumentParser()
parser.add_argument(
'-n',
'--dry_run',
help='Create the deployment directory but do not actually deploy.',
action='store_true')
parser.add_argument(
'-t',
'--target_dir',
help='Specify the target directory, instead of creating a new one.')
parser.add_argument(
'-c',
'--copy_files',
help='Specify whether to copy files instead of symlinking.',
action='store_true')
args, extra_args = parser.parse_known_args()
# Set up the logging from here.
logging.basicConfig(
stream=sys.stdout,
level=logging.INFO,
format='[%(asctime)s - %(levelname)s]:\t%(message)s')
logging.info('Starting deploy script.')
Main(args, extra_args)