# 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