Index: master/skia_master_scripts/utils.py |
=================================================================== |
--- master/skia_master_scripts/utils.py (revision 8722) |
+++ master/skia_master_scripts/utils.py (working copy) |
@@ -34,8 +34,25 @@ |
import config_private |
-CATEGORY_BUILD = ' Build' |
-TRYBOT_NAME_SUFFIX = '_Trybot' |
+BUILDER_NAME_SEP = '-' |
+ |
+# Patterns for creating builder names, based on the role of the builder. |
+# TODO(borenet): Extract these into a separate file (JSON?) so that they can be |
+# read by other users. |
+BUILDER_ROLE_COMPILE = 'Build' |
+BUILDER_ROLE_PERF = 'Perf' |
+BUILDER_ROLE_TEST = 'Test' |
+BUILDER_ROLE_HOUSEKEEPER = 'Housekeeper' |
epoger
2013/04/24 18:56:10
ideas for shorter name: House, Tasks, Other
|
+BUILDER_NAME_DEFAULT_ATTRS = ['os', 'model', 'gpu', 'configuration', |
+ 'arch_width'] |
+BUILDER_NAME_SCHEMA = { |
+ BUILDER_ROLE_COMPILE: ['os', 'compiler', 'configuration', 'target_arch'], |
+ BUILDER_ROLE_TEST: BUILDER_NAME_DEFAULT_ATTRS, |
+ BUILDER_ROLE_PERF: BUILDER_NAME_DEFAULT_ATTRS, |
+ BUILDER_ROLE_HOUSEKEEPER: ['frequency'], |
+} |
+ |
+TRYBOT_NAME_SUFFIX = 'Trybot' |
TRY_SCHEDULER_SVN = 'skia_try_svn' |
TRY_SCHEDULER_RIETVELD = 'skia_try_rietveld' |
TRY_SCHEDULERS = [TRY_SCHEDULER_SVN, TRY_SCHEDULER_RIETVELD] |
@@ -215,17 +232,11 @@ |
class SkiaHelper(master_config.Helper): |
def Builder(self, name, factory, gatekeeper=None, scheduler=None, |
- builddir=None, auto_reboot=False, notify_on_missing=False, |
- override_category=None): |
- if override_category: |
- old_category = self._defaults.get('category') |
- self._defaults['category'] = override_category |
+ builddir=None, auto_reboot=False, notify_on_missing=False): |
super(SkiaHelper, self).Builder(name=name, factory=factory, |
gatekeeper=gatekeeper, scheduler=scheduler, |
builddir=builddir, auto_reboot=auto_reboot, |
notify_on_missing=notify_on_missing) |
- if override_category: |
- self._defaults['category'] = old_category |
def AnyBranchScheduler(self, name, branches, treeStableTimer=60, |
categories=None): |
@@ -367,48 +378,32 @@ |
skia_all_subdirs = all_subdirs |
-def MakeBuilderName(builder_base_name, config): |
- """ Inserts config into builder_base_name at '%s', or if builder_base_name |
- does not contain '%s', appends config to the end of builder_base_name, |
- separated by an underscore. """ |
- try: |
- return builder_base_name % config |
- except TypeError: |
- # If builder_base_name does not contain '%s' |
- return '%s_%s' % (builder_base_name, config) |
+def MakeBuilderName(role, extra_config=None, is_trybot=False, **kwargs): |
+ schema = BUILDER_NAME_SCHEMA.get(role) |
epoger
2013/04/24 18:56:10
I like how you did this! The Python force is stro
|
+ if not schema: |
+ raise ValueError('%s is not a recognized role.' % role) |
+ for k, v in kwargs.iteritems(): |
+ if BUILDER_NAME_SEP in v: |
+ raise ValueError('%s not allowed in %s.' % (v, BUILDER_NAME_SEP)) |
+ if not k in schema: |
+ raise ValueError('Schema does not contain "%s": %s' %(k, schema)) |
+ if extra_config and BUILDER_NAME_SEP in extra_config: |
+ raise ValueError('%s not allowed in %s.' % (extra_config, |
+ BUILDER_NAME_SEP)) |
+ name_parts = [role] |
+ name_parts.extend([kwargs[attribute] for attribute in schema]) |
+ if extra_config: |
+ name_parts.append(extra_config) |
+ if is_trybot: |
+ name_parts.append(TRYBOT_NAME_SUFFIX) |
+ return BUILDER_NAME_SEP.join(name_parts) |
-def MakeCompileBuilderName(builder_base_name, release=False): |
- if release: |
- compile_name = 'Compile_Release' |
- else: |
- compile_name = 'Compile_Debug' |
- return MakeBuilderName(builder_base_name, compile_name) |
- |
- |
-def MakeDebugBuilderName(builder_base_name): |
- return MakeBuilderName(builder_base_name, skia_factory.CONFIG_DEBUG) |
- |
- |
-def MakeReleaseBuilderName(builder_base_name): |
- return MakeBuilderName(builder_base_name, skia_factory.CONFIG_RELEASE) |
- |
- |
-def MakeBenchBuilderName(builder_base_name): |
- return MakeBuilderName(builder_base_name, skia_factory.CONFIG_BENCH) |
- |
- |
-def MakeSchedulerName(builder_base_name): |
- return MakeBuilderName(builder_base_name, 'Scheduler') |
- |
- |
-def _MakeBuilderSet(helper, builder_base_name, gm_image_subdir, |
- perf_output_basedir=None, extra_branches=None, |
- factory_type=None, do_compile=True, do_debug=True, |
- do_release=True, do_bench=True, try_schedulers=None, |
- compile_bot_warnings_as_errors=True, |
- **kwargs): |
- """ Creates a trio of builders for a given platform: |
+def _MakeBuilderSet(helper, os, model, gpu, arch_width, gm_image_subdir, |
+ extra_config=None, perf_output_basedir=None, |
+ extra_branches=None, factory_type=None, do_debug=True, |
+ do_release=True, do_bench=True, is_trybot=False, **kwargs): |
+ """ Creates a set of builders for a given platform: |
1. Debug mode builder which runs all steps |
2. Release mode builder which runs all steps EXCEPT benchmarks |
3. Release mode builder which runs ONLY benchmarks. |
@@ -423,50 +418,30 @@ |
gm_image_branch = 'gm-expected/%s' % gm_image_subdir |
subdirs_to_checkout.add(gm_image_branch) |
- if try_schedulers: |
- scheduler_name = '|'.join(try_schedulers) |
- builder_base_name = builder_base_name + TRYBOT_NAME_SUFFIX |
+ if is_trybot: |
+ scheduler_name = TRY_SCHEDULERS_STR |
else: |
- scheduler_name = MakeSchedulerName(builder_base_name) |
+ scheduler_name = MakeBuilderName(role=BUILDER_ROLE_TEST, |
+ os=os, |
+ model=model, |
+ gpu=gpu, |
+ arch_width=arch_width, |
+ configuration='Scheduler', |
+ extra_config=extra_config, |
+ is_trybot=False) |
branches = list(subdirs_to_checkout.union(SKIA_PRIMARY_SUBDIRS)) |
helper.AnyBranchScheduler(scheduler_name, branches=branches) |
- if do_compile: |
- compile_debug_builder_name = MakeCompileBuilderName(builder_base_name, |
- release=False) |
- B(compile_debug_builder_name, 'f_%s' % compile_debug_builder_name, |
- # Do not add gatekeeper for trybots. |
- gatekeeper='GateKeeper' if try_schedulers is None else None, |
- scheduler=scheduler_name, override_category=CATEGORY_BUILD) |
- F('f_%s' % compile_debug_builder_name, factory_type( |
- builder_name=compile_debug_builder_name, |
- other_subdirs=subdirs_to_checkout, |
+ if do_debug: |
+ debug_builder_name = MakeBuilderName( |
+ role=BUILDER_ROLE_TEST, |
+ os=os, |
+ model=model, |
+ gpu=gpu, |
configuration=skia_factory.CONFIG_DEBUG, |
- gm_image_subdir=gm_image_subdir, |
- do_patch_step=(try_schedulers is not None), |
- perf_output_basedir=None, |
- compile_warnings_as_errors=compile_bot_warnings_as_errors, |
- **kwargs |
- ).BuildCompileOnly()) |
- compile_release_builder_name = MakeCompileBuilderName(builder_base_name, |
- release=True) |
- B(compile_release_builder_name, 'f_%s' % compile_release_builder_name, |
- # Do not add gatekeeper for trybots. |
- gatekeeper='GateKeeper' if try_schedulers is None else None, |
- scheduler=scheduler_name, override_category=CATEGORY_BUILD) |
- F('f_%s' % compile_release_builder_name, factory_type( |
- builder_name=compile_release_builder_name, |
- other_subdirs=subdirs_to_checkout, |
- configuration=skia_factory.CONFIG_RELEASE, |
- gm_image_subdir=gm_image_subdir, |
- do_patch_step=(try_schedulers is not None), |
- perf_output_basedir=None, |
- compile_warnings_as_errors=compile_bot_warnings_as_errors, |
- **kwargs |
- ).BuildCompileOnly()) |
- |
- if do_debug: |
- debug_builder_name = MakeDebugBuilderName(builder_base_name) |
+ arch_width=arch_width, |
+ extra_config=extra_config, |
+ is_trybot=is_trybot) |
B(debug_builder_name, 'f_%s' % debug_builder_name, |
scheduler=scheduler_name) |
F('f_%s' % debug_builder_name, factory_type( |
@@ -474,14 +449,22 @@ |
other_subdirs=subdirs_to_checkout, |
configuration=skia_factory.CONFIG_DEBUG, |
gm_image_subdir=gm_image_subdir, |
- do_patch_step=(try_schedulers is not None), |
+ do_patch_step=is_trybot, |
perf_output_basedir=None, |
compile_warnings_as_errors=False, |
**kwargs |
).Build()) |
if do_release: |
- no_perf_builder_name = MakeReleaseBuilderName(builder_base_name) |
+ no_perf_builder_name = MakeBuilderName( |
+ role=BUILDER_ROLE_TEST, |
+ os=os, |
+ model=model, |
+ gpu=gpu, |
+ configuration=skia_factory.CONFIG_RELEASE, |
+ arch_width=arch_width, |
+ extra_config=extra_config, |
+ is_trybot=is_trybot) |
B(no_perf_builder_name, 'f_%s' % no_perf_builder_name, |
scheduler=scheduler_name) |
F('f_%s' % no_perf_builder_name, factory_type( |
@@ -489,14 +472,22 @@ |
other_subdirs=subdirs_to_checkout, |
configuration=skia_factory.CONFIG_RELEASE, |
gm_image_subdir=gm_image_subdir, |
- do_patch_step=(try_schedulers is not None), |
+ do_patch_step=is_trybot, |
perf_output_basedir=None, |
compile_warnings_as_errors=False, |
**kwargs |
).BuildNoPerf()) |
if do_bench: |
- perf_builder_name = MakeBenchBuilderName(builder_base_name) |
+ perf_builder_name = MakeBuilderName( |
+ role=BUILDER_ROLE_PERF, |
+ os=os, |
+ model=model, |
+ gpu=gpu, |
+ configuration=skia_factory.CONFIG_RELEASE, |
+ arch_width=arch_width, |
+ extra_config=extra_config, |
+ is_trybot=is_trybot) |
B(perf_builder_name, 'f_%s' % perf_builder_name, |
scheduler=scheduler_name) |
F('f_%s' % perf_builder_name, factory_type( |
@@ -504,7 +495,7 @@ |
other_subdirs=subdirs_to_checkout, |
configuration=skia_factory.CONFIG_RELEASE, |
gm_image_subdir=gm_image_subdir, |
- do_patch_step=(try_schedulers is not None), |
+ do_patch_step=is_trybot, |
perf_output_basedir=perf_output_basedir, |
compile_warnings_as_errors=False, |
**kwargs |
@@ -512,9 +503,9 @@ |
def _MakeBuilderAndMaybeTrybotSet(do_trybots=True, **kwargs): |
- _MakeBuilderSet(try_schedulers=None, **kwargs) |
+ _MakeBuilderSet(**kwargs) |
if do_trybots: |
- _MakeBuilderSet(try_schedulers=TRY_SCHEDULERS, **kwargs) |
+ _MakeBuilderSet(is_trybot=True, **kwargs) |
def MakeBuilderSet(**kwargs): |
@@ -527,18 +518,19 @@ |
builder_factory_scheduler = [ |
# The Percommit housekeeper |
- ('Skia_PerCommit_House_Keeping', |
+ (MakeBuilderName(role='Housekeeper', frequency='PerCommit'), |
housekeeping_percommit_factory.HouseKeepingPerCommitFactory, |
'skia_rel'), |
# The Periodic housekeeper |
- ('Skia_Periodic_House_Keeping', |
+ (MakeBuilderName(role='Housekeeper', frequency='Nightly'), |
housekeeping_periodic_factory.HouseKeepingPeriodicFactory, |
'skia_periodic'), |
] |
if do_trybots: |
# Add the corresponding trybot builders to the above list. |
builder_factory_scheduler.extend([ |
- (builder + TRYBOT_NAME_SUFFIX, factory, TRY_SCHEDULERS_STR) |
+ (builder + BUILDER_NAME_SEP + TRYBOT_NAME_SUFFIX, factory, |
+ TRY_SCHEDULERS_STR) |
for (builder, factory, _scheduler) in builder_factory_scheduler]) |
for (builder_name, factory, scheduler) in builder_factory_scheduler: |
@@ -552,12 +544,18 @@ |
).Build()) |
-def MakeAndroidBuilderSet(extra_branches=None, **kwargs): |
+def _DeviceToModelName(device): |
+ return device.replace('_', ' ').title().replace(' ', '') |
rmistry
2013/04/25 11:36:45
Lets add a short comment here, something like:
# '
|
+ |
+ |
+def MakeAndroidBuilderSet(device, extra_branches=None, **kwargs): |
if not extra_branches: |
extra_branches = [] |
extra_branches.append('android') |
_MakeBuilderAndMaybeTrybotSet(factory_type=android_factory.AndroidFactory, |
extra_branches=extra_branches, |
+ device=device, |
+ model=_DeviceToModelName(device), |
**kwargs) |
@@ -574,6 +572,36 @@ |
_MakeBuilderAndMaybeTrybotSet(factory_type=nacl_factory.NaClFactory, **kwargs) |
+def _MakeCompileBuilder(helper, scheduler, os, compiler, configuration, |
+ target_arch, factory_type, is_trybot, |
+ extra_config=None, **kwargs): |
+ builder_name = MakeBuilderName(role=BUILDER_ROLE_COMPILE, |
+ os=os, |
+ compiler=compiler, |
+ configuration=configuration, |
+ target_arch=target_arch, |
+ extra_config=extra_config, |
+ is_trybot=is_trybot) |
+ helper.Builder(builder_name, 'f_%s' % builder_name, |
+ # Do not add gatekeeper for trybots. |
+ gatekeeper='GateKeeper' if is_trybot else None, |
+ scheduler=scheduler) |
+ helper.Factory('f_%s' % builder_name, factory_type( |
+ builder_name=builder_name, |
+ do_patch_step=is_trybot, |
+ configuration=configuration, |
+ **kwargs |
+ ).BuildCompileOnly()) |
+ return builder_name |
+ |
+ |
+def MakeCompileBuilderSet(scheduler, do_trybots=True, **kwargs): |
+ if do_trybots: |
+ _MakeCompileBuilder(scheduler=scheduler, is_trybot=True, **kwargs) |
+ _MakeCompileBuilder(scheduler=TRY_SCHEDULERS_STR, is_trybot=False, **kwargs) |
+ |
+ |
+ |
def CanMergeBuildRequests(req1, req2): |
""" Determine whether or not two BuildRequests can be merged. Note that the |
call to buildbot.sourcestamp.SourceStamp.canBeMergedWith() is conspicuously |