aboutsummaryrefslogtreecommitdiff
path: root/automation/clients/chromeos.py
diff options
context:
space:
mode:
Diffstat (limited to 'automation/clients/chromeos.py')
-rwxr-xr-xautomation/clients/chromeos.py104
1 files changed, 104 insertions, 0 deletions
diff --git a/automation/clients/chromeos.py b/automation/clients/chromeos.py
new file mode 100755
index 00000000..084f7840
--- /dev/null
+++ b/automation/clients/chromeos.py
@@ -0,0 +1,104 @@
+#!/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))