blob: 6a5955c14f7a14c491354de34fd0fe2151764c9a [file] [log] [blame]
# Copyright (c) 2012 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
"""Entry point for the AddIn build bot.
Perform build steps and output results using the buildbot
annootator syntax
"""
import os
import sys
import subprocess
import urllib2
import zipfile
GSURL = 'https://commondatastorage.googleapis.com'
GSPATH = 'nativeclient-mirror/nacl/nacl_sdk/sdk'
SDKROOT = os.path.join('..', '..', 'out', 'sdk')
def Log(msg):
sys.stdout.write(msg + '\n')
sys.stdout.flush()
def RunCommand(cmd, env=None):
Log("Running: %s" % cmd)
Log("CWD: %s" % os.getcwd())
if type(cmd) == str:
cmd = cmd.split()
if sys.platform == 'cygwin':
# allow bat files in the current working directory to
# be executed on cygwin as they are on win32
if not os.path.dirname(cmd[0]) and os.path.exists(cmd[0]):
cmd[0] = './' + cmd[0]
rtn = subprocess.call(cmd, env=env)
if rtn:
Log("Command returned non-zero exit code: %s" % rtn)
Log('@@@STEP_FAILURE@@@')
sys.exit(1)
def StepBuild():
Log('@@@BUILD_STEP build AddIn@@@')
RunCommand('build.bat')
def StepInstall():
Log('@@@BUILD_STEP Install AddIn@@@')
RunCommand('developer_deploy.bat')
def StepInstallSDK():
Log('@@@BUILD_STEP Install SDK@@@')
naclsdk = os.path.join(SDKROOT, 'nacl_sdk', 'naclsdk.bat')
if not os.path.exists(naclsdk):
if not os.path.exists(SDKROOT):
os.makedirs(SDKROOT)
filename = os.path.join(SDKROOT, 'nacl_sdk.zip')
url = GSURL + "/nativeclient-mirror/nacl/nacl_sdk/nacl_sdk.zip"
contents = urllib2.urlopen(url).read()
with open(filename, 'wb') as zfileout:
zfileout.write(contents)
zfile = zipfile.ZipFile(filename)
zfile.extractall(SDKROOT)
RunCommand([naclsdk, 'update', '--force', 'pepper_23'])
RunCommand([naclsdk, 'update', '--force', 'pepper_canary'])
def StepTest():
Log('@@@BUILD_STEP Testing AddIn@@@')
# Don't actually test yet
env = dict(os.environ)
sdkroot = os.path.abspath(os.path.join(SDKROOT, 'nacl_sdk'))
env['NACL_SDK_ROOT'] = os.path.join(sdkroot, 'pepper_23')
RunCommand('test.bat', env)
env['NACL_SDK_ROOT'] = os.path.join(sdkroot, 'pepper_canary')
RunCommand('test.bat', env)
def _FindInPath(filename):
for path in os.environ['PATH'].split(os.pathsep):
result = os.path.join(path, filename)
if os.path.exists(result):
return result
Log('%s not found in PATH' % filename)
Log('@@@STEP_FAILURE@@@')
sys.exit(1)
def _GetGsutil():
if os.environ.get('BUILDBOT_BUILDERNAME'):
# When running in a buildbot slave use
# gsutil from the slave scripts folder
import slave
slave_dir = os.path.dirname(slave.__file__)
gsutil = os.path.join(slave_dir, 'gsutil')
if os.name == 'nt':
gsutil += '.bat'
gsutil = [gsutil]
else:
if os.name == 'nt':
gsutil = [sys.executable, _FindInPath('gsutil')]
else:
gsutil = ['gsutil']
return gsutil
def StepArchive():
rev = os.environ.get('BUILDBOT_GOT_REVISION')
if not rev:
Log('No BUILDBOT_GOT_REVISION found in environ')
Log('@@@STEP_FAILURE@@@')
sys.exit(1)
Log('@@@BUILD_STEP Archiving %s@@@' % rev)
basename = 'vs_addin.tgz'
remote_name = '%s/%s/%s' % (GSPATH, rev, basename)
local_filename = os.path.join('..', '..', 'out',
'vs_addin', basename)
cmd = _GetGsutil()
cmd += ['cp', '-a', 'public-read', local_filename,
'gs://' + remote_name]
RunCommand(cmd)
url = "%s/%s" % (GSURL, remote_name)
Log('@@@STEP_LINK@download@%s@@@' % url)
def main():
StepBuild()
StepInstall()
StepInstallSDK()
StepTest()
StepArchive()
if __name__ == '__main__':
main()