#!/usr/bin/python2 # # 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))