aboutsummaryrefslogtreecommitdiff
path: root/deprecated/automation/clients/helper/chromeos.py
diff options
context:
space:
mode:
Diffstat (limited to 'deprecated/automation/clients/helper/chromeos.py')
-rw-r--r--deprecated/automation/clients/helper/chromeos.py180
1 files changed, 180 insertions, 0 deletions
diff --git a/deprecated/automation/clients/helper/chromeos.py b/deprecated/automation/clients/helper/chromeos.py
new file mode 100644
index 00000000..e7157451
--- /dev/null
+++ b/deprecated/automation/clients/helper/chromeos.py
@@ -0,0 +1,180 @@
+# Copyright 2011 Google Inc. All Rights Reserved.
+
+__author__ = 'asharif@google.com (Ahmad Sharif)'
+
+import os.path
+import re
+
+from automation.clients.helper import jobs
+from automation.clients.helper import perforce
+from automation.common import command as cmd
+from automation.common import machine
+
+
+class ScriptsFactory(object):
+
+ def __init__(self, chromeos_root, scripts_path):
+ self._chromeos_root = chromeos_root
+ self._scripts_path = scripts_path
+
+ def SummarizeResults(self, logs_path):
+ return cmd.Shell('summarize_results.py', logs_path, path=self._scripts_path)
+
+ def Buildbot(self, config_name):
+ buildbot = os.path.join(self._chromeos_root,
+ 'chromite/cbuildbot/cbuildbot.py')
+
+ return cmd.Shell(buildbot, '--buildroot=%s' % self._chromeos_root,
+ '--resume', '--noarchive', '--noprebuilts', '--nosync',
+ '--nouprev', '--notests', '--noclean', config_name)
+
+ def RunBenchmarks(self, board, tests):
+ image_path = os.path.join(self._chromeos_root, 'src/build/images', board,
+ 'latest/chromiumos_image.bin')
+
+ return cmd.Shell('cros_run_benchmarks.py',
+ '--remote=$SECONDARY_MACHINES[0]',
+ '--board=%s' % board,
+ '--tests=%s' % tests,
+ '--full_table',
+ image_path,
+ path='/home/mobiletc-prebuild')
+
+ def SetupChromeOS(self, version='latest', use_minilayout=False):
+ setup_chromeos = cmd.Shell('setup_chromeos.py',
+ '--public',
+ '--dir=%s' % self._chromeos_root,
+ '--version=%s' % version,
+ path=self._scripts_path)
+
+ if use_minilayout:
+ setup_chromeos.AddOption('--minilayout')
+ return setup_chromeos
+
+
+class CommandsFactory(object):
+ DEPOT2_DIR = '//depot2/'
+ P4_CHECKOUT_DIR = 'perforce2/'
+ P4_VERSION_DIR = os.path.join(P4_CHECKOUT_DIR, 'gcctools/chromeos/v14')
+
+ CHROMEOS_ROOT = 'chromeos'
+ CHROMEOS_SCRIPTS_DIR = os.path.join(CHROMEOS_ROOT, 'src/scripts')
+ CHROMEOS_BUILDS_DIR = '/home/mobiletc-prebuild/www/chromeos_builds'
+
+ def __init__(self, chromeos_version, board, toolchain, p4_snapshot):
+ self.chromeos_version = chromeos_version
+ self.board = board
+ self.toolchain = toolchain
+ self.p4_snapshot = p4_snapshot
+
+ self.scripts = ScriptsFactory(self.CHROMEOS_ROOT, self.P4_VERSION_DIR)
+
+ def AddBuildbotConfig(self, config_name, config_list):
+ config_header = 'add_config(%r, [%s])' % (config_name,
+ ', '.join(config_list))
+ config_file = os.path.join(self.CHROMEOS_ROOT,
+ 'chromite/cbuildbot/cbuildbot_config.py')
+ quoted_config_header = '%r' % config_header
+ quoted_config_header = re.sub("'", "\\\"", quoted_config_header)
+
+ return cmd.Pipe(
+ cmd.Shell('echo', quoted_config_header),
+ cmd.Shell('tee', '--append', config_file))
+
+ def RunBuildbot(self):
+ config_dict = {'board': self.board,
+ 'build_tests': True,
+ 'chrome_tests': True,
+ 'unittests': False,
+ 'vm_tests': False,
+ 'prebuilts': False,
+ 'latest_toolchain': True,
+ 'useflags': ['chrome_internal'],
+ 'usepkg_chroot': True,
+ self.toolchain: True}
+ config_name = '%s-toolchain-test' % self.board
+ if 'arm' in self.board:
+ config_list = ['arm']
+ else:
+ config_list = []
+ config_list.extend(['internal', 'full', 'official', str(config_dict)])
+
+ add_config_shell = self.AddBuildbotConfig(config_name, config_list)
+ return cmd.Chain(add_config_shell, self.scripts.Buildbot(config_name))
+
+ def BuildAndBenchmark(self):
+ return cmd.Chain(
+ self.CheckoutV14Dir(),
+ self.SetupChromeOSCheckout(self.chromeos_version, True),
+ self.RunBuildbot(),
+ self.scripts.RunBenchmarks(self.board, 'BootPerfServer,10:Page,3'))
+
+ 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 CheckoutV14Dir(self):
+ p4view = perforce.View(self.DEPOT2_DIR, [
+ perforce.PathMapping('gcctools/chromeos/v14/...')
+ ])
+ return self.GetP4Snapshot(p4view)
+
+ def SetupChromeOSCheckout(self, version, use_minilayout=False):
+ version_re = '^\d+\.\d+\.\d+\.[a-zA-Z0-9]+$'
+
+ location = os.path.join(self.CHROMEOS_BUILDS_DIR, version)
+
+ if version in ['weekly', 'quarterly']:
+ assert os.path.islink(location), 'Symlink %s does not exist.' % location
+
+ location_expanded = os.path.abspath(os.path.realpath(location))
+ version = os.path.basename(location_expanded)
+
+ if version in ['top', 'latest'] or re.match(version_re, version):
+ return self.scripts.SetupChromeOS(version, use_minilayout)
+
+ elif version.endswith('bz2') or version.endswith('gz'):
+ return cmd.UnTar(location_expanded, self.CHROMEOS_ROOT)
+
+ else:
+ signature_file_location = os.path.join(location,
+ 'src/scripts/enter_chroot.sh')
+ assert os.path.exists(signature_file_location), (
+ 'Signature file %s does not exist.' % signature_file_location)
+
+ return cmd.Copy(location, to_dir=self.CHROMEOS_ROOT, recursive=True)
+
+
+class JobsFactory(object):
+
+ def __init__(self,
+ chromeos_version='top',
+ board='x86-mario',
+ toolchain='trunk',
+ p4_snapshot=''):
+ self.chromeos_version = chromeos_version
+ self.board = board
+ self.toolchain = toolchain
+
+ self.commands = CommandsFactory(chromeos_version, board, toolchain,
+ p4_snapshot)
+
+ def BuildAndBenchmark(self):
+ command = self.commands.BuildAndBenchmark()
+
+ label = 'BuildAndBenchmark(%s,%s,%s)' % (self.toolchain, self.board,
+ self.chromeos_version)
+
+ machine_label = 'chromeos-%s' % self.board
+
+ job = jobs.CreateLinuxJob(label, command)
+ job.DependsOnMachine(
+ machine.MachineSpecification(label=machine_label,
+ lock_required=True),
+ False)
+
+ return job