OLD | NEW |
---|---|
1 # Copyright (c) 2013 The Chromium Authors. All rights reserved. | 1 # Copyright (c) 2013 The Chromium Authors. All rights reserved. |
2 # Use of this source code is governed by a BSD-style license that can be | 2 # Use of this source code is governed by a BSD-style license that can be |
3 # found in the LICENSE file. | 3 # found in the LICENSE file. |
4 | 4 |
5 | 5 |
6 """Miscellaneous utilities needed by the Skia buildbot master.""" | 6 """Miscellaneous utilities needed by the Skia buildbot master.""" |
7 | 7 |
8 | 8 |
9 import httplib2 | 9 import httplib2 |
10 import re | 10 import re |
(...skipping 16 matching lines...) Expand all Loading... | |
27 from skia_master_scripts import chromeos_factory | 27 from skia_master_scripts import chromeos_factory |
28 from skia_master_scripts import factory as skia_factory | 28 from skia_master_scripts import factory as skia_factory |
29 from skia_master_scripts import housekeeping_percommit_factory, \ | 29 from skia_master_scripts import housekeeping_percommit_factory, \ |
30 housekeeping_periodic_factory | 30 housekeeping_periodic_factory |
31 from skia_master_scripts import ios_factory | 31 from skia_master_scripts import ios_factory |
32 from skia_master_scripts import nacl_factory | 32 from skia_master_scripts import nacl_factory |
33 | 33 |
34 import config_private | 34 import config_private |
35 | 35 |
36 | 36 |
37 CATEGORY_BUILD = ' Build' | 37 BUILDER_NAME_SEP = '-' |
38 TRYBOT_NAME_SUFFIX = '_Trybot' | 38 |
39 # Patterns for creating builder names, based on the role of the builder. | |
40 # TODO(borenet): Extract these into a separate file (JSON?) so that they can be | |
41 # read by other users. | |
42 BUILDER_ROLE_COMPILE = 'Build' | |
43 BUILDER_ROLE_PERF = 'Perf' | |
44 BUILDER_ROLE_TEST = 'Test' | |
45 BUILDER_ROLE_HOUSEKEEPER = 'Housekeeper' | |
epoger
2013/04/24 18:56:10
ideas for shorter name: House, Tasks, Other
| |
46 BUILDER_NAME_DEFAULT_ATTRS = ['os', 'model', 'gpu', 'configuration', | |
47 'arch_width'] | |
48 BUILDER_NAME_SCHEMA = { | |
49 BUILDER_ROLE_COMPILE: ['os', 'compiler', 'configuration', 'target_arch'], | |
50 BUILDER_ROLE_TEST: BUILDER_NAME_DEFAULT_ATTRS, | |
51 BUILDER_ROLE_PERF: BUILDER_NAME_DEFAULT_ATTRS, | |
52 BUILDER_ROLE_HOUSEKEEPER: ['frequency'], | |
53 } | |
54 | |
55 TRYBOT_NAME_SUFFIX = 'Trybot' | |
39 TRY_SCHEDULER_SVN = 'skia_try_svn' | 56 TRY_SCHEDULER_SVN = 'skia_try_svn' |
40 TRY_SCHEDULER_RIETVELD = 'skia_try_rietveld' | 57 TRY_SCHEDULER_RIETVELD = 'skia_try_rietveld' |
41 TRY_SCHEDULERS = [TRY_SCHEDULER_SVN, TRY_SCHEDULER_RIETVELD] | 58 TRY_SCHEDULERS = [TRY_SCHEDULER_SVN, TRY_SCHEDULER_RIETVELD] |
42 TRY_SCHEDULERS_STR = '|'.join(TRY_SCHEDULERS) | 59 TRY_SCHEDULERS_STR = '|'.join(TRY_SCHEDULERS) |
43 | 60 |
44 | 61 |
45 def IsTrybot(builder_name): | 62 def IsTrybot(builder_name): |
46 return builder_name.endswith(TRYBOT_NAME_SUFFIX) | 63 return builder_name.endswith(TRYBOT_NAME_SUFFIX) |
47 | 64 |
48 | 65 |
(...skipping 159 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
208 # Specifically, the Helper class hardcodes each registered scheduler to be | 225 # Specifically, the Helper class hardcodes each registered scheduler to be |
209 # instantiated as a 'Scheduler,' which aliases 'SingleBranchScheduler.' We add | 226 # instantiated as a 'Scheduler,' which aliases 'SingleBranchScheduler.' We add |
210 # an 'AnyBranchScheduler' method and change the implementation of Update() to | 227 # an 'AnyBranchScheduler' method and change the implementation of Update() to |
211 # instantiate the proper type. | 228 # instantiate the proper type. |
212 | 229 |
213 # TODO(borenet): modify this code upstream so that we don't need this override. | 230 # TODO(borenet): modify this code upstream so that we don't need this override. |
214 # BUG: http://code.google.com/p/skia/issues/detail?id=761 | 231 # BUG: http://code.google.com/p/skia/issues/detail?id=761 |
215 class SkiaHelper(master_config.Helper): | 232 class SkiaHelper(master_config.Helper): |
216 | 233 |
217 def Builder(self, name, factory, gatekeeper=None, scheduler=None, | 234 def Builder(self, name, factory, gatekeeper=None, scheduler=None, |
218 builddir=None, auto_reboot=False, notify_on_missing=False, | 235 builddir=None, auto_reboot=False, notify_on_missing=False): |
219 override_category=None): | |
220 if override_category: | |
221 old_category = self._defaults.get('category') | |
222 self._defaults['category'] = override_category | |
223 super(SkiaHelper, self).Builder(name=name, factory=factory, | 236 super(SkiaHelper, self).Builder(name=name, factory=factory, |
224 gatekeeper=gatekeeper, scheduler=scheduler, | 237 gatekeeper=gatekeeper, scheduler=scheduler, |
225 builddir=builddir, auto_reboot=auto_reboot, | 238 builddir=builddir, auto_reboot=auto_reboot, |
226 notify_on_missing=notify_on_missing) | 239 notify_on_missing=notify_on_missing) |
227 if override_category: | |
228 self._defaults['category'] = old_category | |
229 | 240 |
230 def AnyBranchScheduler(self, name, branches, treeStableTimer=60, | 241 def AnyBranchScheduler(self, name, branches, treeStableTimer=60, |
231 categories=None): | 242 categories=None): |
232 if name in self._schedulers: | 243 if name in self._schedulers: |
233 raise ValueError('Scheduler %s already exist' % name) | 244 raise ValueError('Scheduler %s already exist' % name) |
234 self._schedulers[name] = {'type': 'AnyBranchScheduler', | 245 self._schedulers[name] = {'type': 'AnyBranchScheduler', |
235 'branches': branches, | 246 'branches': branches, |
236 'treeStableTimer': treeStableTimer, | 247 'treeStableTimer': treeStableTimer, |
237 'builders': [], | 248 'builders': [], |
238 'categories': categories} | 249 'categories': categories} |
(...skipping 121 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
360 # been defined. | 371 # been defined. |
361 # pylint: disable=W0601 | 372 # pylint: disable=W0601 |
362 global skia_all_subdirs | 373 global skia_all_subdirs |
363 try: | 374 try: |
364 if skia_all_subdirs: | 375 if skia_all_subdirs: |
365 raise Exception('skia_all_subdirs has already been defined!') | 376 raise Exception('skia_all_subdirs has already been defined!') |
366 except NameError: | 377 except NameError: |
367 skia_all_subdirs = all_subdirs | 378 skia_all_subdirs = all_subdirs |
368 | 379 |
369 | 380 |
370 def MakeBuilderName(builder_base_name, config): | 381 def MakeBuilderName(role, extra_config=None, is_trybot=False, **kwargs): |
371 """ Inserts config into builder_base_name at '%s', or if builder_base_name | 382 schema = BUILDER_NAME_SCHEMA.get(role) |
epoger
2013/04/24 18:56:10
I like how you did this! The Python force is stro
| |
372 does not contain '%s', appends config to the end of builder_base_name, | 383 if not schema: |
373 separated by an underscore. """ | 384 raise ValueError('%s is not a recognized role.' % role) |
374 try: | 385 for k, v in kwargs.iteritems(): |
375 return builder_base_name % config | 386 if BUILDER_NAME_SEP in v: |
376 except TypeError: | 387 raise ValueError('%s not allowed in %s.' % (v, BUILDER_NAME_SEP)) |
377 # If builder_base_name does not contain '%s' | 388 if not k in schema: |
378 return '%s_%s' % (builder_base_name, config) | 389 raise ValueError('Schema does not contain "%s": %s' %(k, schema)) |
390 if extra_config and BUILDER_NAME_SEP in extra_config: | |
391 raise ValueError('%s not allowed in %s.' % (extra_config, | |
392 BUILDER_NAME_SEP)) | |
393 name_parts = [role] | |
394 name_parts.extend([kwargs[attribute] for attribute in schema]) | |
395 if extra_config: | |
396 name_parts.append(extra_config) | |
397 if is_trybot: | |
398 name_parts.append(TRYBOT_NAME_SUFFIX) | |
399 return BUILDER_NAME_SEP.join(name_parts) | |
379 | 400 |
380 | 401 |
381 def MakeCompileBuilderName(builder_base_name, release=False): | 402 def _MakeBuilderSet(helper, os, model, gpu, arch_width, gm_image_subdir, |
382 if release: | 403 extra_config=None, perf_output_basedir=None, |
383 compile_name = 'Compile_Release' | 404 extra_branches=None, factory_type=None, do_debug=True, |
384 else: | 405 do_release=True, do_bench=True, is_trybot=False, **kwargs): |
385 compile_name = 'Compile_Debug' | 406 """ Creates a set of builders for a given platform: |
386 return MakeBuilderName(builder_base_name, compile_name) | |
387 | |
388 | |
389 def MakeDebugBuilderName(builder_base_name): | |
390 return MakeBuilderName(builder_base_name, skia_factory.CONFIG_DEBUG) | |
391 | |
392 | |
393 def MakeReleaseBuilderName(builder_base_name): | |
394 return MakeBuilderName(builder_base_name, skia_factory.CONFIG_RELEASE) | |
395 | |
396 | |
397 def MakeBenchBuilderName(builder_base_name): | |
398 return MakeBuilderName(builder_base_name, skia_factory.CONFIG_BENCH) | |
399 | |
400 | |
401 def MakeSchedulerName(builder_base_name): | |
402 return MakeBuilderName(builder_base_name, 'Scheduler') | |
403 | |
404 | |
405 def _MakeBuilderSet(helper, builder_base_name, gm_image_subdir, | |
406 perf_output_basedir=None, extra_branches=None, | |
407 factory_type=None, do_compile=True, do_debug=True, | |
408 do_release=True, do_bench=True, try_schedulers=None, | |
409 compile_bot_warnings_as_errors=True, | |
410 **kwargs): | |
411 """ Creates a trio of builders for a given platform: | |
412 1. Debug mode builder which runs all steps | 407 1. Debug mode builder which runs all steps |
413 2. Release mode builder which runs all steps EXCEPT benchmarks | 408 2. Release mode builder which runs all steps EXCEPT benchmarks |
414 3. Release mode builder which runs ONLY benchmarks. | 409 3. Release mode builder which runs ONLY benchmarks. |
415 """ | 410 """ |
416 B = helper.Builder | 411 B = helper.Builder |
417 F = helper.Factory | 412 F = helper.Factory |
418 | 413 |
419 if not extra_branches: | 414 if not extra_branches: |
420 extra_branches = [] | 415 extra_branches = [] |
421 subdirs_to_checkout = set(extra_branches) | 416 subdirs_to_checkout = set(extra_branches) |
422 if gm_image_subdir: | 417 if gm_image_subdir: |
423 gm_image_branch = 'gm-expected/%s' % gm_image_subdir | 418 gm_image_branch = 'gm-expected/%s' % gm_image_subdir |
424 subdirs_to_checkout.add(gm_image_branch) | 419 subdirs_to_checkout.add(gm_image_branch) |
425 | 420 |
426 if try_schedulers: | 421 if is_trybot: |
427 scheduler_name = '|'.join(try_schedulers) | 422 scheduler_name = TRY_SCHEDULERS_STR |
428 builder_base_name = builder_base_name + TRYBOT_NAME_SUFFIX | |
429 else: | 423 else: |
430 scheduler_name = MakeSchedulerName(builder_base_name) | 424 scheduler_name = MakeBuilderName(role=BUILDER_ROLE_TEST, |
425 os=os, | |
426 model=model, | |
427 gpu=gpu, | |
428 arch_width=arch_width, | |
429 configuration='Scheduler', | |
430 extra_config=extra_config, | |
431 is_trybot=False) | |
431 branches = list(subdirs_to_checkout.union(SKIA_PRIMARY_SUBDIRS)) | 432 branches = list(subdirs_to_checkout.union(SKIA_PRIMARY_SUBDIRS)) |
432 helper.AnyBranchScheduler(scheduler_name, branches=branches) | 433 helper.AnyBranchScheduler(scheduler_name, branches=branches) |
433 | 434 |
434 if do_compile: | 435 if do_debug: |
435 compile_debug_builder_name = MakeCompileBuilderName(builder_base_name, | 436 debug_builder_name = MakeBuilderName( |
436 release=False) | 437 role=BUILDER_ROLE_TEST, |
437 B(compile_debug_builder_name, 'f_%s' % compile_debug_builder_name, | 438 os=os, |
438 # Do not add gatekeeper for trybots. | 439 model=model, |
439 gatekeeper='GateKeeper' if try_schedulers is None else None, | 440 gpu=gpu, |
440 scheduler=scheduler_name, override_category=CATEGORY_BUILD) | |
441 F('f_%s' % compile_debug_builder_name, factory_type( | |
442 builder_name=compile_debug_builder_name, | |
443 other_subdirs=subdirs_to_checkout, | |
444 configuration=skia_factory.CONFIG_DEBUG, | 441 configuration=skia_factory.CONFIG_DEBUG, |
445 gm_image_subdir=gm_image_subdir, | 442 arch_width=arch_width, |
446 do_patch_step=(try_schedulers is not None), | 443 extra_config=extra_config, |
447 perf_output_basedir=None, | 444 is_trybot=is_trybot) |
448 compile_warnings_as_errors=compile_bot_warnings_as_errors, | |
449 **kwargs | |
450 ).BuildCompileOnly()) | |
451 compile_release_builder_name = MakeCompileBuilderName(builder_base_name, | |
452 release=True) | |
453 B(compile_release_builder_name, 'f_%s' % compile_release_builder_name, | |
454 # Do not add gatekeeper for trybots. | |
455 gatekeeper='GateKeeper' if try_schedulers is None else None, | |
456 scheduler=scheduler_name, override_category=CATEGORY_BUILD) | |
457 F('f_%s' % compile_release_builder_name, factory_type( | |
458 builder_name=compile_release_builder_name, | |
459 other_subdirs=subdirs_to_checkout, | |
460 configuration=skia_factory.CONFIG_RELEASE, | |
461 gm_image_subdir=gm_image_subdir, | |
462 do_patch_step=(try_schedulers is not None), | |
463 perf_output_basedir=None, | |
464 compile_warnings_as_errors=compile_bot_warnings_as_errors, | |
465 **kwargs | |
466 ).BuildCompileOnly()) | |
467 | |
468 if do_debug: | |
469 debug_builder_name = MakeDebugBuilderName(builder_base_name) | |
470 B(debug_builder_name, 'f_%s' % debug_builder_name, | 445 B(debug_builder_name, 'f_%s' % debug_builder_name, |
471 scheduler=scheduler_name) | 446 scheduler=scheduler_name) |
472 F('f_%s' % debug_builder_name, factory_type( | 447 F('f_%s' % debug_builder_name, factory_type( |
473 builder_name=debug_builder_name, | 448 builder_name=debug_builder_name, |
474 other_subdirs=subdirs_to_checkout, | 449 other_subdirs=subdirs_to_checkout, |
475 configuration=skia_factory.CONFIG_DEBUG, | 450 configuration=skia_factory.CONFIG_DEBUG, |
476 gm_image_subdir=gm_image_subdir, | 451 gm_image_subdir=gm_image_subdir, |
477 do_patch_step=(try_schedulers is not None), | 452 do_patch_step=is_trybot, |
478 perf_output_basedir=None, | 453 perf_output_basedir=None, |
479 compile_warnings_as_errors=False, | 454 compile_warnings_as_errors=False, |
480 **kwargs | 455 **kwargs |
481 ).Build()) | 456 ).Build()) |
482 | 457 |
483 if do_release: | 458 if do_release: |
484 no_perf_builder_name = MakeReleaseBuilderName(builder_base_name) | 459 no_perf_builder_name = MakeBuilderName( |
460 role=BUILDER_ROLE_TEST, | |
461 os=os, | |
462 model=model, | |
463 gpu=gpu, | |
464 configuration=skia_factory.CONFIG_RELEASE, | |
465 arch_width=arch_width, | |
466 extra_config=extra_config, | |
467 is_trybot=is_trybot) | |
485 B(no_perf_builder_name, 'f_%s' % no_perf_builder_name, | 468 B(no_perf_builder_name, 'f_%s' % no_perf_builder_name, |
486 scheduler=scheduler_name) | 469 scheduler=scheduler_name) |
487 F('f_%s' % no_perf_builder_name, factory_type( | 470 F('f_%s' % no_perf_builder_name, factory_type( |
488 builder_name=no_perf_builder_name, | 471 builder_name=no_perf_builder_name, |
489 other_subdirs=subdirs_to_checkout, | 472 other_subdirs=subdirs_to_checkout, |
490 configuration=skia_factory.CONFIG_RELEASE, | 473 configuration=skia_factory.CONFIG_RELEASE, |
491 gm_image_subdir=gm_image_subdir, | 474 gm_image_subdir=gm_image_subdir, |
492 do_patch_step=(try_schedulers is not None), | 475 do_patch_step=is_trybot, |
493 perf_output_basedir=None, | 476 perf_output_basedir=None, |
494 compile_warnings_as_errors=False, | 477 compile_warnings_as_errors=False, |
495 **kwargs | 478 **kwargs |
496 ).BuildNoPerf()) | 479 ).BuildNoPerf()) |
497 | 480 |
498 if do_bench: | 481 if do_bench: |
499 perf_builder_name = MakeBenchBuilderName(builder_base_name) | 482 perf_builder_name = MakeBuilderName( |
483 role=BUILDER_ROLE_PERF, | |
484 os=os, | |
485 model=model, | |
486 gpu=gpu, | |
487 configuration=skia_factory.CONFIG_RELEASE, | |
488 arch_width=arch_width, | |
489 extra_config=extra_config, | |
490 is_trybot=is_trybot) | |
500 B(perf_builder_name, 'f_%s' % perf_builder_name, | 491 B(perf_builder_name, 'f_%s' % perf_builder_name, |
501 scheduler=scheduler_name) | 492 scheduler=scheduler_name) |
502 F('f_%s' % perf_builder_name, factory_type( | 493 F('f_%s' % perf_builder_name, factory_type( |
503 builder_name=perf_builder_name, | 494 builder_name=perf_builder_name, |
504 other_subdirs=subdirs_to_checkout, | 495 other_subdirs=subdirs_to_checkout, |
505 configuration=skia_factory.CONFIG_RELEASE, | 496 configuration=skia_factory.CONFIG_RELEASE, |
506 gm_image_subdir=gm_image_subdir, | 497 gm_image_subdir=gm_image_subdir, |
507 do_patch_step=(try_schedulers is not None), | 498 do_patch_step=is_trybot, |
508 perf_output_basedir=perf_output_basedir, | 499 perf_output_basedir=perf_output_basedir, |
509 compile_warnings_as_errors=False, | 500 compile_warnings_as_errors=False, |
510 **kwargs | 501 **kwargs |
511 ).BuildPerfOnly()) | 502 ).BuildPerfOnly()) |
512 | 503 |
513 | 504 |
514 def _MakeBuilderAndMaybeTrybotSet(do_trybots=True, **kwargs): | 505 def _MakeBuilderAndMaybeTrybotSet(do_trybots=True, **kwargs): |
515 _MakeBuilderSet(try_schedulers=None, **kwargs) | 506 _MakeBuilderSet(**kwargs) |
516 if do_trybots: | 507 if do_trybots: |
517 _MakeBuilderSet(try_schedulers=TRY_SCHEDULERS, **kwargs) | 508 _MakeBuilderSet(is_trybot=True, **kwargs) |
518 | 509 |
519 | 510 |
520 def MakeBuilderSet(**kwargs): | 511 def MakeBuilderSet(**kwargs): |
521 _MakeBuilderAndMaybeTrybotSet(factory_type=skia_factory.SkiaFactory, **kwargs) | 512 _MakeBuilderAndMaybeTrybotSet(factory_type=skia_factory.SkiaFactory, **kwargs) |
522 | 513 |
523 | 514 |
524 def MakeHousekeeperBuilderSet(helper, do_trybots, do_upload_results): | 515 def MakeHousekeeperBuilderSet(helper, do_trybots, do_upload_results): |
525 B = helper.Builder | 516 B = helper.Builder |
526 F = helper.Factory | 517 F = helper.Factory |
527 | 518 |
528 builder_factory_scheduler = [ | 519 builder_factory_scheduler = [ |
529 # The Percommit housekeeper | 520 # The Percommit housekeeper |
530 ('Skia_PerCommit_House_Keeping', | 521 (MakeBuilderName(role='Housekeeper', frequency='PerCommit'), |
531 housekeeping_percommit_factory.HouseKeepingPerCommitFactory, | 522 housekeeping_percommit_factory.HouseKeepingPerCommitFactory, |
532 'skia_rel'), | 523 'skia_rel'), |
533 # The Periodic housekeeper | 524 # The Periodic housekeeper |
534 ('Skia_Periodic_House_Keeping', | 525 (MakeBuilderName(role='Housekeeper', frequency='Nightly'), |
535 housekeeping_periodic_factory.HouseKeepingPeriodicFactory, | 526 housekeeping_periodic_factory.HouseKeepingPeriodicFactory, |
536 'skia_periodic'), | 527 'skia_periodic'), |
537 ] | 528 ] |
538 if do_trybots: | 529 if do_trybots: |
539 # Add the corresponding trybot builders to the above list. | 530 # Add the corresponding trybot builders to the above list. |
540 builder_factory_scheduler.extend([ | 531 builder_factory_scheduler.extend([ |
541 (builder + TRYBOT_NAME_SUFFIX, factory, TRY_SCHEDULERS_STR) | 532 (builder + BUILDER_NAME_SEP + TRYBOT_NAME_SUFFIX, factory, |
533 TRY_SCHEDULERS_STR) | |
542 for (builder, factory, _scheduler) in builder_factory_scheduler]) | 534 for (builder, factory, _scheduler) in builder_factory_scheduler]) |
543 | 535 |
544 for (builder_name, factory, scheduler) in builder_factory_scheduler: | 536 for (builder_name, factory, scheduler) in builder_factory_scheduler: |
545 B(builder_name, 'f_%s' % builder_name, scheduler=scheduler) | 537 B(builder_name, 'f_%s' % builder_name, scheduler=scheduler) |
546 F('f_%s' % builder_name, | 538 F('f_%s' % builder_name, |
547 factory( | 539 factory( |
548 do_upload_results=do_upload_results, | 540 do_upload_results=do_upload_results, |
549 target_platform=skia_factory.TARGET_PLATFORM_LINUX, | 541 target_platform=skia_factory.TARGET_PLATFORM_LINUX, |
550 builder_name=builder_name, | 542 builder_name=builder_name, |
551 do_patch_step=(scheduler == TRY_SCHEDULERS_STR), | 543 do_patch_step=(scheduler == TRY_SCHEDULERS_STR), |
552 ).Build()) | 544 ).Build()) |
553 | 545 |
554 | 546 |
555 def MakeAndroidBuilderSet(extra_branches=None, **kwargs): | 547 def _DeviceToModelName(device): |
548 return device.replace('_', ' ').title().replace(' ', '') | |
rmistry
2013/04/25 11:36:45
Lets add a short comment here, something like:
# '
| |
549 | |
550 | |
551 def MakeAndroidBuilderSet(device, extra_branches=None, **kwargs): | |
556 if not extra_branches: | 552 if not extra_branches: |
557 extra_branches = [] | 553 extra_branches = [] |
558 extra_branches.append('android') | 554 extra_branches.append('android') |
559 _MakeBuilderAndMaybeTrybotSet(factory_type=android_factory.AndroidFactory, | 555 _MakeBuilderAndMaybeTrybotSet(factory_type=android_factory.AndroidFactory, |
560 extra_branches=extra_branches, | 556 extra_branches=extra_branches, |
557 device=device, | |
558 model=_DeviceToModelName(device), | |
561 **kwargs) | 559 **kwargs) |
562 | 560 |
563 | 561 |
564 def MakeChromeOSBuilderSet(**kwargs): | 562 def MakeChromeOSBuilderSet(**kwargs): |
565 _MakeBuilderAndMaybeTrybotSet(factory_type=chromeos_factory.ChromeOSFactory, | 563 _MakeBuilderAndMaybeTrybotSet(factory_type=chromeos_factory.ChromeOSFactory, |
566 **kwargs) | 564 **kwargs) |
567 | 565 |
568 | 566 |
569 def MakeIOSBuilderSet(**kwargs): | 567 def MakeIOSBuilderSet(**kwargs): |
570 _MakeBuilderAndMaybeTrybotSet(factory_type=ios_factory.iOSFactory, **kwargs) | 568 _MakeBuilderAndMaybeTrybotSet(factory_type=ios_factory.iOSFactory, **kwargs) |
571 | 569 |
572 | 570 |
573 def MakeNaClBuilderSet(**kwargs): | 571 def MakeNaClBuilderSet(**kwargs): |
574 _MakeBuilderAndMaybeTrybotSet(factory_type=nacl_factory.NaClFactory, **kwargs) | 572 _MakeBuilderAndMaybeTrybotSet(factory_type=nacl_factory.NaClFactory, **kwargs) |
575 | 573 |
576 | 574 |
575 def _MakeCompileBuilder(helper, scheduler, os, compiler, configuration, | |
576 target_arch, factory_type, is_trybot, | |
577 extra_config=None, **kwargs): | |
578 builder_name = MakeBuilderName(role=BUILDER_ROLE_COMPILE, | |
579 os=os, | |
580 compiler=compiler, | |
581 configuration=configuration, | |
582 target_arch=target_arch, | |
583 extra_config=extra_config, | |
584 is_trybot=is_trybot) | |
585 helper.Builder(builder_name, 'f_%s' % builder_name, | |
586 # Do not add gatekeeper for trybots. | |
587 gatekeeper='GateKeeper' if is_trybot else None, | |
588 scheduler=scheduler) | |
589 helper.Factory('f_%s' % builder_name, factory_type( | |
590 builder_name=builder_name, | |
591 do_patch_step=is_trybot, | |
592 configuration=configuration, | |
593 **kwargs | |
594 ).BuildCompileOnly()) | |
595 return builder_name | |
596 | |
597 | |
598 def MakeCompileBuilderSet(scheduler, do_trybots=True, **kwargs): | |
599 if do_trybots: | |
600 _MakeCompileBuilder(scheduler=scheduler, is_trybot=True, **kwargs) | |
601 _MakeCompileBuilder(scheduler=TRY_SCHEDULERS_STR, is_trybot=False, **kwargs) | |
602 | |
603 | |
604 | |
577 def CanMergeBuildRequests(req1, req2): | 605 def CanMergeBuildRequests(req1, req2): |
578 """ Determine whether or not two BuildRequests can be merged. Note that the | 606 """ Determine whether or not two BuildRequests can be merged. Note that the |
579 call to buildbot.sourcestamp.SourceStamp.canBeMergedWith() is conspicuously | 607 call to buildbot.sourcestamp.SourceStamp.canBeMergedWith() is conspicuously |
580 missing. This is because that method verifies that: | 608 missing. This is because that method verifies that: |
581 1. req1.source.repository == req2.source.repository | 609 1. req1.source.repository == req2.source.repository |
582 2. req1.source.project == req2.source.project | 610 2. req1.source.project == req2.source.project |
583 3. req1.source.branch == req2.source.branch | 611 3. req1.source.branch == req2.source.branch |
584 4. req1.patch == None and req2.patch = None | 612 4. req1.patch == None and req2.patch = None |
585 5. (req1.source.changes and req2.source.changes) or \ | 613 5. (req1.source.changes and req2.source.changes) or \ |
586 (not req1.source.changes and not req2.source.changes and \ | 614 (not req1.source.changes and not req2.source.changes and \ |
(...skipping 27 matching lines...) Expand all Loading... | |
614 # request is associated with a change but the revisions match (#5 above). | 642 # request is associated with a change but the revisions match (#5 above). |
615 if req1.source.changes and not req2.source.changes: | 643 if req1.source.changes and not req2.source.changes: |
616 return False | 644 return False |
617 if not req1.source.changes and req2.source.changes: | 645 if not req1.source.changes and req2.source.changes: |
618 return False | 646 return False |
619 if not (req1.source.changes and req2.source.changes): | 647 if not (req1.source.changes and req2.source.changes): |
620 if req1.source.revision != req2.source.revision: | 648 if req1.source.revision != req2.source.revision: |
621 return False | 649 return False |
622 | 650 |
623 return True | 651 return True |
OLD | NEW |