Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(672)

Unified Diff: infra/bots/common.py

Issue 1703663002: Port Skia recipe to normal Python scripts, move to Skia repo (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: Address comments Created 4 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « infra/bots/README.md ('k') | infra/bots/compile_skia.isolate » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: infra/bots/common.py
diff --git a/infra/bots/common.py b/infra/bots/common.py
new file mode 100644
index 0000000000000000000000000000000000000000..9b96440c4fad1cae66c06276bcb00b2c41f3eeef
--- /dev/null
+++ b/infra/bots/common.py
@@ -0,0 +1,150 @@
+#!/usr/bin/env python
+#
+# Copyright 2016 Google Inc.
+#
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+
+import os
+import subprocess
+import sys
+
+from flavor import android_flavor
+from flavor import chromeos_flavor
+from flavor import cmake_flavor
+from flavor import coverage_flavor
+from flavor import default_flavor
+from flavor import ios_flavor
+from flavor import valgrind_flavor
+from flavor import xsan_flavor
+
+
+CONFIG_COVERAGE = 'Coverage'
+CONFIG_DEBUG = 'Debug'
+CONFIG_RELEASE = 'Release'
+VALID_CONFIGS = (CONFIG_COVERAGE, CONFIG_DEBUG, CONFIG_RELEASE)
+
+GM_ACTUAL_FILENAME = 'actual-results.json'
+GM_EXPECTATIONS_FILENAME = 'expected-results.json'
+GM_IGNORE_TESTS_FILENAME = 'ignored-tests.txt'
+
+GS_GM_BUCKET = 'chromium-skia-gm'
+GS_SUMMARIES_BUCKET = 'chromium-skia-gm-summaries'
+
+SKIA_REPO = 'https://skia.googlesource.com/skia.git'
+INFRA_REPO = 'https://skia.googlesource.com/buildbot.git'
+
+SERVICE_ACCOUNT_FILE = 'service-account-skia.json'
+SERVICE_ACCOUNT_INTERNAL_FILE = 'service-account-skia-internal.json'
+
+
+def is_android(bot_cfg):
+ """Determine whether the given bot is an Android bot."""
+ return ('Android' in bot_cfg.get('extra_config', '') or
+ bot_cfg.get('os') == 'Android')
+
+def is_chromeos(bot_cfg):
+ return ('CrOS' in bot_cfg.get('extra_config', '') or
+ bot_cfg.get('os') == 'ChromeOS')
+
+def is_cmake(bot_cfg):
+ return 'CMake' in bot_cfg.get('extra_config', '')
+
+def is_ios(bot_cfg):
+ return ('iOS' in bot_cfg.get('extra_config', '') or
+ bot_cfg.get('os') == 'iOS')
+
+
+def is_valgrind(bot_cfg):
+ return 'Valgrind' in bot_cfg.get('extra_config', '')
+
+
+def is_xsan(bot_cfg):
+ return (bot_cfg.get('extra_config') == 'ASAN' or
+ bot_cfg.get('extra_config') == 'MSAN' or
+ bot_cfg.get('extra_config') == 'TSAN')
+
+
+class BotInfo(object):
+ def __init__(self, bot_name, slave_name, out_dir):
+ """Initialize the bot, given its name.
+
+ Assumes that CWD is the directory containing this file.
+ """
+ self.name = bot_name
+ self.slave_name = slave_name
+ self.skia_dir = os.path.abspath(os.path.join(
+ os.path.dirname(os.path.realpath(__file__)),
+ os.pardir, os.pardir))
+ os.chdir(self.skia_dir)
+ self.build_dir = os.path.abspath(os.path.join(self.skia_dir, os.pardir))
+ self.out_dir = out_dir
+ self.spec = self.get_bot_spec(bot_name)
+ self.configuration = self.spec['configuration']
+ self.default_env = {
+ 'SKIA_OUT': self.out_dir,
+ 'BUILDTYPE': self.configuration,
+ 'PATH': os.environ['PATH'],
+ }
+ self.default_env.update(self.spec['env'])
+ self.build_targets = [str(t) for t in self.spec['build_targets']]
+ self.bot_cfg = self.spec['builder_cfg']
+ self.is_trybot = self.bot_cfg['is_trybot']
+ self.upload_dm_results = self.spec['upload_dm_results']
+ self.upload_perf_results = self.spec['upload_perf_results']
+ self.dm_flags = self.spec['dm_flags']
+ self.nanobench_flags = self.spec['nanobench_flags']
+ self._ccache = None
+ self._checked_for_ccache = False
+ self.flavor = self.get_flavor(self.bot_cfg)
+
+ @property
+ def ccache(self):
+ if not self._checked_for_ccache:
+ self._checked_for_ccache = True
+ if sys.platform != 'win32':
+ try:
+ result = subprocess.check_output(['which', 'ccache'])
+ self._ccache = result.rstrip()
+ except subprocess.CalledProcessError:
+ pass
+
+ return self._ccache
+
+ def get_bot_spec(self, bot_name):
+ """Retrieve the bot spec for this bot."""
+ sys.path.append(self.skia_dir)
+ from tools import buildbot_spec
+ return buildbot_spec.get_builder_spec(bot_name)
+
+ def get_flavor(self, bot_cfg):
+ """Return a flavor utils object specific to the given bot."""
+ if is_android(bot_cfg):
+ return android_flavor.AndroidFlavorUtils(self)
+ elif is_chromeos(bot_cfg):
+ return chromeos_flavor.ChromeOSFlavorUtils(self)
+ elif is_cmake(bot_cfg):
+ return cmake_flavor.CMakeFlavorUtils(self)
+ elif is_ios(bot_cfg):
+ return ios_flavor.iOSFlavorUtils(self)
+ elif is_valgrind(bot_cfg):
+ return valgrind_flavor.ValgrindFlavorUtils(self)
+ elif is_xsan(bot_cfg):
+ return xsan_flavor.XSanFlavorUtils(self)
+ elif bot_cfg.get('configuration') == CONFIG_COVERAGE:
+ return coverage_flavor.CoverageFlavorUtils(self)
+ else:
+ return default_flavor.DefaultFlavorUtils(self)
+
+ def run(self, cmd, env=None, cwd=None):
+ _env = {}
+ _env.update(self.default_env)
+ _env.update(env or {})
+ cwd = cwd or self.skia_dir
+ print '============'
+ print 'CMD: %s' % cmd
+ print 'CWD: %s' % cwd
+ print 'ENV: %s' % _env
+ print '============'
+ subprocess.check_call(cmd, env=_env, cwd=cwd)
« no previous file with comments | « infra/bots/README.md ('k') | infra/bots/compile_skia.isolate » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698