#!/usr/bin/python
#
# Copyright 2011 Google Inc. All Rights Reserved.
"""chromeos.py: Build & Test ChromeOS using custom compilers."""
__author__ = 'asharif@google.com (Ahmad Sharif)'
import logging
import optparse
import os
import pickle
import sys
import xmlrpclib
from automation.clients.helper import jobs
from automation.clients.helper import perforce
from automation.common import command as cmd
from automation.common import job_group
from automation.common import logger
class ChromeOSNightlyClient(object):
DEPOT2_DIR = '//depot2/'
P4_CHECKOUT_DIR = 'perforce2/'
P4_VERSION_DIR = os.path.join(P4_CHECKOUT_DIR, 'gcctools/chromeos/v14')
def __init__(self, board, remote, gcc_githash, p4_snapshot=''):
self._board = board
self._remote = remote
self._gcc_githash = gcc_githash
self._p4_snapshot = p4_snapshot
def Run(self):
server = xmlrpclib.Server('http://localhost:8000')
server.ExecuteJobGroup(pickle.dumps(self.CreateJobGroup()))
def CheckoutV14Dir(self):
p4view = perforce.View(self.DEPOT2_DIR, [
perforce.PathMapping('gcctools/chromeos/v14/...')
])
return self.GetP4Snapshot(p4view)
def GetP4Snapshot(self, p4view):
p4client = perforce.CommandsFactory(self.P4_CHECKOUT_DIR, p4view)
if self._p4_snapshot:
return p4client.CheckoutFromSnapshot(self._p4_snapshot)
else:
return p4client.SetupAndDo(p4client.Sync(), p4client.Remove())
def CreateJobGroup(self):
chain = cmd.Chain(
self.CheckoutV14Dir(),
cmd.Shell('python',
os.path.join(self.P4_VERSION_DIR, 'test_toolchains.py'),
'--force-mismatch',
'--clean',
'--public', # crbug.com/145822
'--board=%s' % self._board,
'--remote=%s' % self._remote,
'--githashes=%s' % self._gcc_githash))
label = 'testlabel'
job = jobs.CreateLinuxJob(label, chain, timeout=24 * 60 * 60)
return job_group.JobGroup(label, [job], True, False)
@logger.HandleUncaughtExceptions
def Main(argv):
parser = optparse.OptionParser()
parser.add_option('-b',
'--board',
dest='board',
help='Run performance tests on these boards')
parser.add_option('-r',
'--remote',
dest='remote',
help='Run performance tests on these remotes')
parser.add_option('-g',
'--gcc_githash',
dest='gcc_githash',
help='Use this gcc_githash.')
parser.add_option('-p',
'--p4_snapshot',
dest='p4_snapshot',
default='',
help='Use this p4_snapshot.')
options, _ = parser.parse_args(argv)
if not all([options.board, options.remote, options.gcc_githash]):
logging.error('Specify a board, remote and gcc_githash')
return 1
client = ChromeOSNightlyClient(options.board,
options.remote,
options.gcc_githash,
p4_snapshot=options.p4_snapshot)
client.Run()
return 0
if __name__ == '__main__':
logger.SetUpRootLogger(level=logging.DEBUG, display_flags={'name': False})
sys.exit(Main(sys.argv))