# 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.
# TODO(qyearsley): Add a step to vulcanize each template HTML file.
# TODO(qyearsley): Add a step to put static files in a versioned
# directory and modify app.yaml and request_handler as needed.
import subprocess
import sys
from catapult_build import module_finder
from catapult_build import temp_deployment_dir
def AppcfgUpdate(paths, app_id):
"""Deploys a new version of an App Engine app from a temporary directory.
Args:
paths: List of paths to files and directories that should be linked
(or copied) in the deployment directory.
app_id: The application ID to use.
"""
try:
import appcfg # pylint: disable=unused-variable
except ImportError:
# TODO(qyearsley): Put the App Engine SDK in the path with the
# binary dependency manager.
# See: https://github.com/catapult-project/catapult/issues/2135
print 'This script requires the App Engine SDK to be in PYTHONPATH.'
sys.exit(1)
with temp_deployment_dir.TempDeploymentDir(
paths, use_symlinks=False) as temp_dir:
print 'Deploying from "%s".' % temp_dir
_Run([
module_finder.FindModule('appcfg'),
'--application=%s' % app_id,
'--version=%s' % _VersionName(),
'update',
temp_dir,
])
def _VersionName():
is_synced = not _Run(['git', 'diff', 'master']).strip()
deployment_type = 'clean' if is_synced else 'dev'
email = _Run(['git', 'config', '--get', 'user.email'])
username = email[0:email.find('@')]
commit_hash = _Run(['git', 'rev-parse', '--short=8', 'HEAD']).strip()
return '%s-%s-%s' % (deployment_type, username, commit_hash)
def _Run(command):
proc = subprocess.Popen(command, stdout=subprocess.PIPE)
output, _ = proc.communicate()
return output