aboutsummaryrefslogtreecommitdiff
path: root/deprecated/automation/clients/helper
diff options
context:
space:
mode:
Diffstat (limited to 'deprecated/automation/clients/helper')
-rw-r--r--deprecated/automation/clients/helper/__init__.py1
-rw-r--r--deprecated/automation/clients/helper/android.py319
-rw-r--r--deprecated/automation/clients/helper/chromeos.py180
-rw-r--r--deprecated/automation/clients/helper/crosstool.py168
-rw-r--r--deprecated/automation/clients/helper/jobs.py11
-rw-r--r--deprecated/automation/clients/helper/perforce.py215
6 files changed, 0 insertions, 894 deletions
diff --git a/deprecated/automation/clients/helper/__init__.py b/deprecated/automation/clients/helper/__init__.py
deleted file mode 100644
index 8b137891..00000000
--- a/deprecated/automation/clients/helper/__init__.py
+++ /dev/null
@@ -1 +0,0 @@
-
diff --git a/deprecated/automation/clients/helper/android.py b/deprecated/automation/clients/helper/android.py
deleted file mode 100644
index 7ff2ac1c..00000000
--- a/deprecated/automation/clients/helper/android.py
+++ /dev/null
@@ -1,319 +0,0 @@
-# Copyright 2011 Google Inc. All Rights Reserved.
-"""Helper modules for Android toolchain test infrastructure.
-
-Provides following Android toolchain test jobs and commands.
-. Checkout Android toolchain source code
-. Build Android toolchain
-. Checkout and build Android tree
-. Checkout/build/run Android benchmarks, generate size dashboard
-. Transform size dashboard to report, send perflab jobid to
- perflab dashboard server.(TODO)
-"""
-
-__author__ = 'jingyu@google.com (Jing Yu)'
-
-import os.path
-
-from automation.clients.helper import jobs
-from automation.clients.helper import perforce
-from automation.common import command as cmd
-from automation.common import job
-
-
-class JobsFactory(object):
-
- def __init__(self, gcc_version='4.4.3', build_type='DEVELOPMENT'):
- assert gcc_version in ['4.4.3', '4.6', 'google_main', 'fsf_trunk']
- assert build_type in ['DEVELOPMENT', 'RELEASE']
-
- self.gcc_version = gcc_version
- self.commands = CommandsFactory(gcc_version, build_type)
- self.tc_tag = 'gcc-%s-%s' % (gcc_version, build_type)
-
- def CheckoutAndroidToolchain(self):
- """Check out Android toolchain sources by release and gcc version."""
- command = self.commands.CheckoutAndroidToolchain()
- new_job = jobs.CreateLinuxJob('AndroidCheckoutToolchain(%s)' % self.tc_tag,
- command)
- checkout_dir_dep = job.FolderDependency(new_job, self.commands.CHECKOUT_DIR)
- return new_job, checkout_dir_dep
-
- def BuildAndroidToolchain(self, checkout_dir_dep):
- """Build Android Toolchain."""
- command = self.commands.BuildAndroidToolchain()
- new_job = jobs.CreateLinuxJob('AndroidBuildToolchain(%s)' % self.tc_tag,
- command)
- new_job.DependsOnFolder(checkout_dir_dep)
- tc_prefix_dep = job.FolderDependency(new_job,
- self.commands.toolchain_prefix_dir)
- return new_job, tc_prefix_dep
-
- def BuildAndroidImage(self,
- tc_prefix_dep,
- product='stingray',
- branch='ics-release'):
- assert product in ['stingray', 'passion', 'trygon', 'soju']
- assert branch in ['honeycomb-release', 'ics-release']
- command = self.commands.BuildAndroidImage(product, branch)
- new_job = jobs.CreateLinuxJob('AndroidGetBuildTree(%s)' % self.tc_tag,
- command)
- new_job.DependsOnFolder(tc_prefix_dep)
- return new_job
-
- def Benchmark(self, tc_prefix_dep, arch='soju'):
- assert arch in ['soju', 'stingray']
- script_cmd = self.commands.CheckoutScripts()
- experiment_tag = 'android/nightly/%s/%s/$JOB_ID' % (self.tc_tag, arch)
- build_run_benchmark_cmd = self.commands.BuildRunBenchmark(arch,
- experiment_tag)
- command = cmd.Chain(script_cmd, build_run_benchmark_cmd)
- new_job = jobs.CreateLinuxJob('AndroidBenchmarking(%s)' % self.tc_tag,
- command)
- new_job.DependsOnFolder(tc_prefix_dep)
- return new_job
-
-
-class CommandsFactory(object):
- CHECKOUT_DIR = 'androidtc-checkout-dir'
- TOOLCHAIN_SRC_DIR = os.path.join(CHECKOUT_DIR, 'src')
- TOOLCHAIN_BUILD_DIR = 'obj'
- ANDROID_TREES_DIR = 'android_trees'
- TOOLS_DIR = 'android-tools'
- BENCHMARK_OUT_DIR = 'results'
-
- def __init__(self, gcc_version, build_type):
- assert gcc_version in ['4.4.3', '4.6', 'google_main', 'fsf_trunk']
- assert build_type in ['DEVELOPMENT', 'RELEASE']
-
- self.build_type = build_type
- self.gcc_version = gcc_version
- self.binutils_version = '2.21'
- self.gold_version = '2.21'
- self.toolchain_prefix_dir = 'install-gcc-%s-%s' % (gcc_version, build_type)
- self.p4client = self._CreatePerforceClient()
- self.scripts = ScriptsFactory(self.gcc_version, self.binutils_version,
- self.gold_version)
-
- def _CreatePerforceClient(self):
- p4_dev_path = 'gcctools/google_vendor_src_branch'
- mobile_rel_branch = ('branches/'
- 'mobile_toolchain_v15_release_branch/gcctools/'
- 'google_vendor_src_branch')
- gcc_443_rel_branch = ('branches/'
- 'android_compiler_v14_release_branch/gcctools/'
- 'google_vendor_src_branch')
-
- # Common views for tools
- p4view = perforce.View('depot2', perforce.PathMapping.ListFromPathTuples([(
- 'gcctools/android/build/...', 'src/build/...'), (
- 'gcctools/android/Tarballs/...', 'src/tarballs/...')]))
- for mapping in perforce.PathMapping.ListFromPathDict(
- {'gcctools/android': ['tools/scripts/...', 'master/...']}):
- p4view.add(mapping)
-
- # Add views for gdb
- p4view.add(perforce.PathMapping(p4_dev_path, 'src',
- 'gdb/gdb-7.1.x-android/...'))
-
- # Add view for binutils for ld and gold
- if self.build_type is 'RELEASE':
- binutils_branch = mobile_rel_branch
- else:
- binutils_branch = p4_dev_path
- p4view.add(perforce.PathMapping(binutils_branch, 'src', (
- 'binutils/binutils-%s/...' % self.binutils_version)))
- if self.binutils_version != self.gold_version:
- p4view.add(perforce.PathMapping(binutils_branch, 'src', (
- 'binutils/binutils-%s/...' % self.gold_version)))
-
- # Add view for gcc if gcc_version is '4.4.3'.
- if self.gcc_version == '4.4.3':
- gcc443_path = 'gcc/gcc-4.4.3/...'
- if self.build_type is 'RELEASE':
- p4view.add(perforce.PathMapping(gcc_443_rel_branch, 'src', gcc443_path))
- else:
- p4view.add(perforce.PathMapping(p4_dev_path, 'src', gcc443_path))
-
- return perforce.CommandsFactory(self.CHECKOUT_DIR, p4view)
-
- def _CheckoutGCCFromSVN(self):
- """Check out gcc from fsf svn.
-
- Return the command that check out gcc from svn
- to gcc_required_dir (=TOOLCHAIN_SRC_DIR/src/gcc/gcc-xxx).
-
- TODO:
- Create a svn class that does these jobs.
- Parallelize p4 checkout and svn checkout.
- """
- if self.gcc_version == '4.4.3':
- return ''
- assert self.gcc_version in ['4.6', 'google_main', 'fsf_trunk']
-
- gcc_branches_dir = {'4.6': 'branches/google/gcc-4_6',
- 'google_main': 'branches/google/main',
- 'fsf_trunk': 'trunk'}
-
- # Find GCC revision number, output it to TOOLCHAIN_SRC_DIR/CLNUM_GCC
- svn_get_revision = cmd.Pipe(
- cmd.Shell('svn', 'info'),
- cmd.Shell('grep', '"Revision:"'),
- cmd.Shell('sed', '-E', '"s,Revision: ([0-9]+).*,\\1,"'),
- output='../../../CLNUM_GCC')
-
- svn_co_command = 'svn co svn://gcc.gnu.org/svn/gcc/%s .' % (
- gcc_branches_dir[self.gcc_version])
-
- gcc_required_dir = os.path.join(self.TOOLCHAIN_SRC_DIR, 'gcc',
- 'gcc-%s' % self.gcc_version)
-
- return cmd.Chain(
- cmd.MakeDir(gcc_required_dir),
- cmd.Wrapper(
- cmd.Chain(svn_co_command, svn_get_revision),
- cwd=gcc_required_dir))
-
- def CheckoutAndroidToolchain(self):
- p4client = self.p4client
- command = p4client.SetupAndDo(p4client.Sync(),
- p4client.SaveCurrentCLNumber('CLNUM'),
- p4client.Remove())
- if self.gcc_version != '4.4.3':
- command.append(self._CheckoutGCCFromSVN())
-
- return command
-
- def BuildAndroidToolchain(self):
- script_cmd = self.scripts.BuildAndroidToolchain(
- self.toolchain_prefix_dir, self.CHECKOUT_DIR, self.TOOLCHAIN_BUILD_DIR,
- self.TOOLCHAIN_SRC_DIR)
-
- # Record toolchain and gcc CL number
- record_cl_cmd = cmd.Copy(
- os.path.join(self.CHECKOUT_DIR, 'CLNUM*'),
- to_dir=self.toolchain_prefix_dir)
- save_cmd = cmd.Tar(
- os.path.join('$JOB_TMP', 'results', '%s.tar.bz2' %
- self.toolchain_prefix_dir), self.toolchain_prefix_dir)
- return cmd.Chain(script_cmd, record_cl_cmd, save_cmd)
-
- def _BuildAndroidTree(self, local_android_branch_dir, product):
- target_tools_prefix = os.path.join('$JOB_TMP', self.toolchain_prefix_dir,
- 'bin', 'arm-linux-androideabi-')
- java_path = '/usr/lib/jvm/java-6-sun/bin'
- build_cmd = cmd.Shell('make', '-j8', 'PRODUCT-%s-userdebug' % product,
- 'TARGET_TOOLS_PREFIX=%s' % target_tools_prefix,
- 'PATH=%s:$PATH' % java_path)
- return cmd.Wrapper(build_cmd, cwd=local_android_branch_dir)
-
- def BuildAndroidImage(self, product, branch):
- assert product in ['stingray', 'passion', 'trygon', 'soju']
-
- # Copy the tree from atree.mtv.corp to ANDROID_TREES_DIR/branch
- androidtrees_host = 'atree.mtv.corp.google.com'
- androidtrees_path = ('/usr/local/google2/home/mobiletc-prebuild/'
- 'android_trees')
- remote_android_branch_path = os.path.join(androidtrees_path, branch)
- local_android_branch_dir = os.path.join(self.ANDROID_TREES_DIR, branch)
- gettree_cmd = cmd.RemoteCopyFrom(
- androidtrees_host, remote_android_branch_path, local_android_branch_dir)
-
- # Configure and build the tree
- buildtree_cmd = self._BuildAndroidTree(local_android_branch_dir, product)
-
- # Compress and copy system.img to result
- result_system_img = os.path.join(local_android_branch_dir, 'out', 'target',
- 'product', product, 'system.img')
- copy_img = cmd.Copy(result_system_img, to_dir='results')
- compress_img = cmd.Shell('bzip2', os.path.join('results', 'system.img'))
-
- return cmd.Chain(gettree_cmd, buildtree_cmd, copy_img, compress_img)
-
- def CheckoutScripts(self):
- p4view = perforce.View('depot2',
- [perforce.PathMapping('gcctools/android/tools/...',
- 'tools/...')])
- p4client = perforce.CommandsFactory(self.TOOLS_DIR, p4view)
- return p4client.SetupAndDo(p4client.Sync(), p4client.Remove())
-
- def BuildRunBenchmark(self, arch, run_experiment):
- # Copy base benchmark binaries from atree.mtv.corp
- base_benchbin_host = 'atree.mtv.corp.google.com'
- base_benchbin_path = ('/usr/local/google2/home/mobiletc-prebuild/'
- 'archive/v3binaries/2011-10-18')
- local_basebenchbin_dir = 'base_benchmark_bin'
- getbase_cmd = cmd.RemoteCopyFrom(base_benchbin_host, base_benchbin_path,
- local_basebenchbin_dir)
-
- # Build and run benchmark.
- android_arch = 'android_%s' % arch
- run_label = 'normal'
- benchmark_cmd = self.scripts.RunBenchmark(
- self.toolchain_prefix_dir, self.TOOLS_DIR, self.BENCHMARK_OUT_DIR,
- run_label, run_experiment, android_arch, local_basebenchbin_dir)
-
- # Extract jobid from BENCHMARK_OUT_DIR/log/jobid_normal.log file.
- # Copy jobid to www server to generate performance dashboard.
- # TODO(jingyu)
-
- return cmd.Chain(getbase_cmd, benchmark_cmd)
-
-
-class ScriptsFactory(object):
-
- def __init__(self, gcc_version, binutils_version, gold_version):
- self._gcc_version = gcc_version
- self._binutils_version = binutils_version
- self._gold_version = gold_version
-
- def BuildAndroidToolchain(self, toolchain_prefix_dir, checkout_dir,
- toolchain_build_dir, androidtc_src_dir):
- if self._gcc_version == '4.4.3':
- gold_option = 'both/gold'
- else:
- gold_option = 'default'
-
- return cmd.Shell(
- 'build_androidtoolchain.sh',
- '--toolchain-src=%s' % os.path.join('$JOB_TMP', androidtc_src_dir),
- '--build-path=%s' % os.path.join('$JOB_TMP', toolchain_build_dir),
- '--install-prefix=%s' % os.path.join('$JOB_TMP', toolchain_prefix_dir),
- '--target=arm-linux-androideabi',
- '--enable-gold=%s' % gold_option,
- '--with-gcc-version=%s' % self._gcc_version,
- '--with-binutils-version=%s' % self._binutils_version,
- '--with-gold-version=%s' % self._gold_version,
- '--with-gdb-version=7.1.x-android',
- '--log-path=%s/logs' % '$JOB_HOME',
- '--android-sysroot=%s' % os.path.join('$JOB_TMP', checkout_dir,
- 'gcctools', 'android', 'master',
- 'honeycomb_generic_sysroot'),
- path=os.path.join(checkout_dir, 'gcctools', 'android', 'tools',
- 'scripts'))
-
- def RunBenchmark(self,
- toolchain_prefix_dir,
- checkout_dir,
- output_dir,
- run_label,
- run_experiment,
- arch,
- base_bench_bin=None):
- if base_bench_bin:
- base_bench_opt = '--base_benchmark_bin=%s' % base_bench_bin
- else:
- base_bench_opt = ''
-
- return cmd.Shell(
- 'benchmark.sh',
- '--android_toolchain=%s' % os.path.join('$JOB_TMP',
- toolchain_prefix_dir),
- '--bench_space=%s' % os.path.join('$JOB_TMP', 'bench'),
- '--benchmark_bin=%s' % os.path.join('$JOB_TMP', output_dir,
- 'bench_bin'),
- base_bench_opt,
- '--log_path=%s' % os.path.join('$JOB_TMP', output_dir, 'log'),
- '--arch=%s' % arch,
- '--run_label=%s' % run_label,
- '--run_experiment=%s' % run_experiment,
- path=os.path.join(checkout_dir, 'tools', 'scripts'))
diff --git a/deprecated/automation/clients/helper/chromeos.py b/deprecated/automation/clients/helper/chromeos.py
deleted file mode 100644
index e7157451..00000000
--- a/deprecated/automation/clients/helper/chromeos.py
+++ /dev/null
@@ -1,180 +0,0 @@
-# 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
diff --git a/deprecated/automation/clients/helper/crosstool.py b/deprecated/automation/clients/helper/crosstool.py
deleted file mode 100644
index 80154b25..00000000
--- a/deprecated/automation/clients/helper/crosstool.py
+++ /dev/null
@@ -1,168 +0,0 @@
-# Copyright 2011 Google Inc. All Rights Reserved.
-
-__author__ = 'kbaclawski@google.com (Krystian Baclawski)'
-
-import os.path
-import time
-
-from automation.clients.helper import jobs
-from automation.clients.helper import perforce
-from automation.common import command as cmd
-from automation.common import job
-
-
-class JobsFactory(object):
-
- def __init__(self):
- self.commands = CommandsFactory()
-
- def CheckoutCrosstool(self, target):
- command = self.commands.CheckoutCrosstool()
- new_job = jobs.CreateLinuxJob('CheckoutCrosstool(%s)' % target, command)
- checkout_dir_dep = job.FolderDependency(new_job,
- CommandsFactory.CHECKOUT_DIR)
- manifests_dir_dep = job.FolderDependency(
- new_job, os.path.join(self.commands.buildit_path, target), 'manifests')
- return new_job, checkout_dir_dep, manifests_dir_dep
-
- def BuildRelease(self, checkout_dir, target):
- command = self.commands.BuildRelease(target)
- new_job = jobs.CreateLinuxJob('BuildRelease(%s)' % target, command)
- new_job.DependsOnFolder(checkout_dir)
- build_tree_dep = job.FolderDependency(new_job,
- self.commands.buildit_work_dir_path)
- return new_job, build_tree_dep
-
- def RunTests(self, checkout_dir, build_tree_dir, target, board, component):
- command = self.commands.RunTests(target, board, component)
- new_job = jobs.CreateLinuxJob('RunTests(%s, %s, %s)' %
- (target, component, board), command)
- new_job.DependsOnFolder(checkout_dir)
- new_job.DependsOnFolder(build_tree_dir)
- testrun_dir_dep = job.FolderDependency(
- new_job, self.commands.dejagnu_output_path, board)
- return new_job, testrun_dir_dep
-
- def GenerateReport(self, testrun_dirs, manifests_dir, target, boards):
- command = self.commands.GenerateReport(boards)
- new_job = jobs.CreateLinuxJob('GenerateReport(%s)' % target, command)
- new_job.DependsOnFolder(manifests_dir)
- for testrun_dir in testrun_dirs:
- new_job.DependsOnFolder(testrun_dir)
- return new_job
-
-
-class CommandsFactory(object):
- CHECKOUT_DIR = 'crosstool-checkout-dir'
-
- def __init__(self):
- self.buildit_path = os.path.join(self.CHECKOUT_DIR, 'gcctools', 'crosstool',
- 'v15')
-
- self.buildit_work_dir = 'buildit-tmp'
- self.buildit_work_dir_path = os.path.join('$JOB_TMP', self.buildit_work_dir)
- self.dejagnu_output_path = os.path.join(self.buildit_work_dir_path,
- 'dejagnu-output')
-
- paths = {
- 'gcctools': [
- 'crosstool/v15/...', 'scripts/...'
- ],
- 'gcctools/google_vendor_src_branch': [
- 'binutils/binutils-2.21/...', 'gdb/gdb-7.2.x/...',
- 'zlib/zlib-1.2.3/...'
- ],
- 'gcctools/vendor_src': [
- 'gcc/google/gcc-4_6/...'
- ]
- }
-
- p4view = perforce.View('depot2',
- perforce.PathMapping.ListFromPathDict(paths))
-
- self.p4client = perforce.CommandsFactory(self.CHECKOUT_DIR, p4view)
-
- def CheckoutCrosstool(self):
- p4client = self.p4client
-
- return p4client.SetupAndDo(p4client.Sync(),
- p4client.SaveCurrentCLNumber('CLNUM'),
- p4client.Remove())
-
- def BuildRelease(self, target):
- clnum_path = os.path.join('$JOB_TMP', self.CHECKOUT_DIR, 'CLNUM')
-
- toolchain_root = os.path.join('/google/data/rw/projects/toolchains', target,
- 'unstable')
- toolchain_path = os.path.join(toolchain_root, '${CLNUM}')
-
- build_toolchain = cmd.Wrapper(
- cmd.Chain(
- cmd.MakeDir(toolchain_path),
- cmd.Shell('buildit',
- '--keep-work-dir',
- '--build-type=release',
- '--work-dir=%s' % self.buildit_work_dir_path,
- '--results-dir=%s' % toolchain_path,
- '--force-release=%s' % '${CLNUM}',
- target,
- path='.')),
- cwd=self.buildit_path,
- umask='0022',
- env={'CLNUM': '$(< %s)' % clnum_path})
-
- # remove all but 10 most recent directories
- remove_old_toolchains_from_x20 = cmd.Wrapper(
- cmd.Pipe(
- cmd.Shell('ls', '-1', '-r'), cmd.Shell('sed', '-e', '1,10d'),
- cmd.Shell('xargs', 'rm', '-r', '-f')),
- cwd=toolchain_root)
-
- return cmd.Chain(build_toolchain, remove_old_toolchains_from_x20)
-
- def RunTests(self, target, board, component='gcc'):
- dejagnu_flags = ['--outdir=%s' % self.dejagnu_output_path,
- '--target_board=%s' % board]
-
- # Look for {pandaboard,qemu}.exp files in
- # //depot/google3/experimental/users/kbaclawski/dejagnu/boards
-
- site_exp_file = os.path.join('/google/src/head/depot/google3',
- 'experimental/users/kbaclawski',
- 'dejagnu/site.exp')
-
- build_dir_path = os.path.join(target, 'rpmbuild/BUILD/crosstool*-0.0',
- 'build-%s' % component)
-
- run_dejagnu = cmd.Wrapper(
- cmd.Chain(
- cmd.MakeDir(self.dejagnu_output_path),
- cmd.Shell('make',
- 'check',
- '-k',
- '-j $(grep -c processor /proc/cpuinfo)',
- 'RUNTESTFLAGS="%s"' % ' '.join(dejagnu_flags),
- 'DEJAGNU="%s"' % site_exp_file,
- ignore_error=True)),
- cwd=os.path.join(self.buildit_work_dir_path, build_dir_path),
- env={'REMOTE_TMPDIR': 'job-$JOB_ID'})
-
- save_results = cmd.Copy(self.dejagnu_output_path,
- to_dir='$JOB_TMP/results',
- recursive=True)
-
- return cmd.Chain(run_dejagnu, save_results)
-
- def GenerateReport(self, boards):
- sumfiles = [os.path.join('$JOB_TMP', board, '*.sum') for board in boards]
-
- return cmd.Wrapper(
- cmd.Shell('dejagnu.sh',
- 'report',
- '-m',
- '$JOB_TMP/manifests/*.xfail',
- '-o',
- '$JOB_TMP/results/report.html',
- *sumfiles,
- path='.'),
- cwd='$HOME/automation/clients/report')
diff --git a/deprecated/automation/clients/helper/jobs.py b/deprecated/automation/clients/helper/jobs.py
deleted file mode 100644
index 96a1c408..00000000
--- a/deprecated/automation/clients/helper/jobs.py
+++ /dev/null
@@ -1,11 +0,0 @@
-# Copyright 2010 Google Inc. All Rights Reserved.
-
-from automation.common import job
-from automation.common import machine
-
-
-def CreateLinuxJob(label, command, lock=False, timeout=4 * 60 * 60):
- to_return = job.Job(label, command, timeout)
- to_return.DependsOnMachine(machine.MachineSpecification(os='linux',
- lock_required=lock))
- return to_return
diff --git a/deprecated/automation/clients/helper/perforce.py b/deprecated/automation/clients/helper/perforce.py
deleted file mode 100644
index 1f2dfe79..00000000
--- a/deprecated/automation/clients/helper/perforce.py
+++ /dev/null
@@ -1,215 +0,0 @@
-# Copyright 2011 Google Inc. All Rights Reserved.
-
-__author__ = 'kbaclawski@google.com (Krystian Baclawski)'
-
-import collections
-import os.path
-
-from automation.common import command as cmd
-
-
-class PathMapping(object):
- """Stores information about relative path mapping (remote to local)."""
-
- @classmethod
- def ListFromPathDict(cls, prefix_path_dict):
- """Takes {'prefix1': ['path1',...], ...} and returns a list of mappings."""
-
- mappings = []
-
- for prefix, paths in sorted(prefix_path_dict.items()):
- for path in sorted(paths):
- mappings.append(cls(os.path.join(prefix, path)))
-
- return mappings
-
- @classmethod
- def ListFromPathTuples(cls, tuple_list):
- """Takes a list of tuples and returns a list of mappings.
-
- Args:
- tuple_list: [('remote_path1', 'local_path1'), ...]
-
- Returns:
- a list of mapping objects
- """
- mappings = []
- for remote_path, local_path in tuple_list:
- mappings.append(cls(remote_path, local_path))
-
- return mappings
-
- def __init__(self, remote, local=None, common_suffix=None):
- suffix = self._FixPath(common_suffix or '')
-
- self.remote = os.path.join(remote, suffix)
- self.local = os.path.join(local or remote, suffix)
-
- @staticmethod
- def _FixPath(path_s):
- parts = [part for part in path_s.strip('/').split('/') if part]
-
- if not parts:
- return ''
-
- return os.path.join(*parts)
-
- def _GetRemote(self):
- return self._remote
-
- def _SetRemote(self, path_s):
- self._remote = self._FixPath(path_s)
-
- remote = property(_GetRemote, _SetRemote)
-
- def _GetLocal(self):
- return self._local
-
- def _SetLocal(self, path_s):
- self._local = self._FixPath(path_s)
-
- local = property(_GetLocal, _SetLocal)
-
- def GetAbsolute(self, depot, client):
- return (os.path.join('//', depot, self.remote),
- os.path.join('//', client, self.local))
-
- def __str__(self):
- return '%s(%s => %s)' % (self.__class__.__name__, self.remote, self.local)
-
-
-class View(collections.MutableSet):
- """Keeps all information about local client required to work with perforce."""
-
- def __init__(self, depot, mappings=None, client=None):
- self.depot = depot
-
- if client:
- self.client = client
-
- self._mappings = set(mappings or [])
-
- @staticmethod
- def _FixRoot(root_s):
- parts = root_s.strip('/').split('/', 1)
-
- if len(parts) != 1:
- return None
-
- return parts[0]
-
- def _GetDepot(self):
- return self._depot
-
- def _SetDepot(self, depot_s):
- depot = self._FixRoot(depot_s)
- assert depot, 'Not a valid depot name: "%s".' % depot_s
- self._depot = depot
-
- depot = property(_GetDepot, _SetDepot)
-
- def _GetClient(self):
- return self._client
-
- def _SetClient(self, client_s):
- client = self._FixRoot(client_s)
- assert client, 'Not a valid client name: "%s".' % client_s
- self._client = client
-
- client = property(_GetClient, _SetClient)
-
- def add(self, mapping):
- assert type(mapping) is PathMapping
- self._mappings.add(mapping)
-
- def discard(self, mapping):
- assert type(mapping) is PathMapping
- self._mappings.discard(mapping)
-
- def __contains__(self, value):
- return value in self._mappings
-
- def __len__(self):
- return len(self._mappings)
-
- def __iter__(self):
- return iter(mapping for mapping in self._mappings)
-
- def AbsoluteMappings(self):
- return iter(mapping.GetAbsolute(self.depot, self.client)
- for mapping in self._mappings)
-
-
-class CommandsFactory(object):
- """Creates shell commands used for interaction with Perforce."""
-
- def __init__(self, checkout_dir, p4view, name=None, port=None):
- self.port = port or 'perforce2:2666'
- self.view = p4view
- self.view.client = name or 'p4-automation-$HOSTNAME-$JOB_ID'
- self.checkout_dir = checkout_dir
- self.p4config_path = os.path.join(self.checkout_dir, '.p4config')
-
- def Initialize(self):
- return cmd.Chain('mkdir -p %s' % self.checkout_dir, 'cp ~/.p4config %s' %
- self.checkout_dir, 'chmod u+w %s' % self.p4config_path,
- 'echo "P4PORT=%s" >> %s' % (self.port, self.p4config_path),
- 'echo "P4CLIENT=%s" >> %s' %
- (self.view.client, self.p4config_path))
-
- def Create(self):
- # TODO(kbaclawski): Could we support value list for options consistently?
- mappings = ['-a \"%s %s\"' % mapping
- for mapping in self.view.AbsoluteMappings()]
-
- # First command will create client with default mappings. Second one will
- # replace default mapping with desired. Unfortunately, it seems that it
- # cannot be done in one step. P4EDITOR is defined to /bin/true because we
- # don't want "g4 client" to enter real editor and wait for user actions.
- return cmd.Wrapper(
- cmd.Chain(
- cmd.Shell('g4', 'client'),
- cmd.Shell('g4', 'client', '--replace', *mappings)),
- env={'P4EDITOR': '/bin/true'})
-
- def SaveSpecification(self, filename=None):
- return cmd.Pipe(cmd.Shell('g4', 'client', '-o'), output=filename)
-
- def Sync(self, revision=None):
- sync_arg = '...'
- if revision:
- sync_arg = '%s@%s' % (sync_arg, revision)
- return cmd.Shell('g4', 'sync', sync_arg)
-
- def SaveCurrentCLNumber(self, filename=None):
- return cmd.Pipe(
- cmd.Shell('g4', 'changes', '-m1', '...#have'),
- cmd.Shell('sed', '-E', '"s,Change ([0-9]+) .*,\\1,"'),
- output=filename)
-
- def Remove(self):
- return cmd.Shell('g4', 'client', '-d', self.view.client)
-
- def SetupAndDo(self, *commands):
- return cmd.Chain(self.Initialize(),
- self.InCheckoutDir(self.Create(), *commands))
-
- def InCheckoutDir(self, *commands):
- return cmd.Wrapper(cmd.Chain(*commands), cwd=self.checkout_dir)
-
- def CheckoutFromSnapshot(self, snapshot):
- cmds = cmd.Chain()
-
- for mapping in self.view:
- local_path, file_part = mapping.local.rsplit('/', 1)
-
- if file_part == '...':
- remote_dir = os.path.join(snapshot, local_path)
- local_dir = os.path.join(self.checkout_dir, os.path.dirname(local_path))
-
- cmds.extend([
- cmd.Shell('mkdir', '-p', local_dir), cmd.Shell(
- 'rsync', '-lr', remote_dir, local_dir)
- ])
-
- return cmds