| # -*- python -*- |
| # ex: set syntax=python: |
| |
| # Copyright 2015 The Chromium Authors. All rights reserved. |
| # Use of this source code is governed by a BSD-style license that can be |
| # found in the LICENSE file. |
| |
| import config |
| import master_site_config |
| |
| from buildbot.scheduler import Periodic |
| from buildbot.schedulers.basic import AnyBranchScheduler |
| from buildbot.schedulers.timed import Nightly |
| from buildbot.status import mail |
| |
| from master import exception_notifier |
| from master import gitiles_poller |
| from master import master_utils |
| from master import slaves_list |
| from master.factory import annotator_factory |
| from master.factory import remote_run_factory |
| |
| |
| ActiveMaster = master_site_config.InfraCron |
| |
| c = BuildmasterConfig = {} |
| c['slavePortnum'] = ActiveMaster.slave_port |
| c['schedulers'] = [] |
| c['builders'] = [] |
| c['change_source'] = [] |
| c['status'] = [] |
| |
| def mergeRequests(req1, req2): |
| if 'publish_tarball' in (req1.buildername, req2.buildername): |
| return False |
| return req1.canBeMergedWith(req2) |
| c['mergeRequests'] = mergeRequests |
| |
| f_annotations = annotator_factory.AnnotatorFactory(ActiveMaster) |
| |
| INFRA_REPO_URL = 'https://chromium.googlesource.com/infra/infra' |
| |
| def m_remote_run(recipe, **kwargs): |
| return remote_run_factory.RemoteRunFactory( |
| active_master=ActiveMaster, |
| repository=INFRA_REPO_URL, |
| recipe=recipe, |
| factory_properties={'path_config': 'kitchen'}, |
| **kwargs) |
| |
| ####### DATABASE |
| |
| config.DatabaseSetup(c) |
| |
| |
| ####### CHANGE SOURCES |
| c['change_source'].extend([ |
| gitiles_poller.GitilesPoller(INFRA_REPO_URL) |
| ]) |
| |
| ####### BUILDERS |
| |
| c['builders'].extend([ |
| { |
| 'name': 'gsubtreed', |
| 'factory': f_annotations.BaseFactory( |
| 'infra/gsubtreed', |
| {'target_repo': 'https://chromium.googlesource.com/chromium/src'}), |
| 'auto_reboot' : False, |
| 'category': '1cron', |
| }, |
| { |
| 'name': 'gsubtreed-aosp-platform-system-core', |
| 'factory': f_annotations.BaseFactory( |
| 'infra/gsubtreed', |
| {'target_repo': |
| 'https://chromium.googlesource.com/aosp/platform/system/core'}), |
| 'auto_reboot' : False, |
| 'category': '1cron', |
| }, |
| { |
| 'name': 'gsubtreed-infra', |
| 'factory': f_annotations.BaseFactory( |
| 'infra/gsubtreed', |
| {'target_repo': 'https://chromium.googlesource.com/infra/infra'}), |
| 'auto_reboot' : False, |
| 'category': '1cron', |
| }, |
| { |
| 'name': 'gsubtreed-llvm-clang', |
| 'factory': f_annotations.BaseFactory( |
| 'infra/gsubtreed', |
| {'target_repo': |
| 'https://chromium.googlesource.com/external/'+ |
| 'github.com/llvm-mirror/clang'}, |
| ), |
| 'auto_reboot' : False, |
| 'category': '1cron', |
| }, |
| { |
| 'name': 'gsubtreed-luci-py', |
| 'factory': f_annotations.BaseFactory( |
| 'infra/gsubtreed', |
| {'target_repo': 'https://chromium.googlesource.com/infra/luci/luci-py'}), |
| 'auto_reboot' : False, |
| 'category': '1cron', |
| }, |
| { |
| 'name': 'lkgr-tag-pusher', |
| 'factory': f_annotations.BaseFactory('infra/lkgr_tag_pusher'), |
| 'auto_reboot' : False, |
| 'category': '1cron', |
| }, |
| { |
| 'name': 'chromium-lkgr-finder', |
| 'factory': m_remote_run('lkgr_finder'), |
| 'auto_reboot' : False, |
| 'category': '1cron', |
| }, |
| { |
| 'name': 'publish_tarball', |
| 'factory': m_remote_run('publish_tarball', max_time=3*60*60), |
| 'auto_reboot' : False, |
| 'category': '1cron', |
| }, |
| { |
| 'name': 'Build From Tarball', |
| 'factory': m_remote_run('build_from_tarball'), |
| 'category': 'linux', |
| 'auto_reboot': False, |
| }, |
| { |
| 'name': 'GAE SDK CIPD Packager', |
| 'factory': f_annotations.BaseFactory(recipe='infra/gae_sdk_cipd_packager'), |
| 'category': '1cron', |
| }, |
| { |
| 'name': 'git-hash-metrics', |
| 'factory': m_remote_run(recipe='git_hash_metric'), |
| 'category': '3monitoring', |
| }, |
| { |
| 'name': 'wpt-exporter', |
| 'factory': m_remote_run('wpt_export'), |
| 'auto_reboot' : True, |
| 'category': '1cron', |
| }, |
| { |
| 'name': 'wpt-importer', |
| 'factory': m_remote_run('wpt_import'), |
| 'auto_reboot' : True, |
| 'category': '1cron', |
| }, |
| ]) |
| |
| third_party_platforms = ( |
| 'linux-amd64', |
| 'linux-386', |
| 'mac-amd64', |
| 'windows-amd64', |
| 'windows-386', |
| ) |
| third_party_builders = [ |
| { |
| 'name': 'third-party-packages-%s' % p, |
| 'factory': m_remote_run('third_party_packages'), |
| 'auto_reboot' : False, |
| 'category': '1cron', |
| } |
| for p in third_party_platforms |
| ] |
| c['builders'].extend(third_party_builders) |
| |
| ####### SCHEDULERS |
| |
| c['schedulers'].extend([ |
| # Period is intentionally small so that if a builder fails fast, it also |
| # gets restarted fast. |
| Periodic( |
| name='infra-runner-scheduler', |
| periodicBuildTimer=1*60, |
| builderNames=[ |
| 'chromium-lkgr-finder', |
| 'gsubtreed', |
| 'gsubtreed-aosp-platform-system-core', |
| 'gsubtreed-infra', |
| 'gsubtreed-llvm-clang', |
| 'gsubtreed-luci-py', |
| 'lkgr-tag-pusher', |
| 'wpt-exporter', |
| ] |
| ), |
| Periodic( |
| # Period is larger for wpt-importer jobs because these jobs take |
| # about 10 minutes when there's nothing to do, and can take several |
| # hours when there is something to do. |
| name='wpt-importer-scheduler', |
| periodicBuildTimer=10*60, |
| builderNames=['wpt-importer'] |
| ), |
| Nightly( |
| name='publish_tarball', |
| branch=None, |
| builderNames=['publish_tarball'], |
| hour=range(0, 24, 3), |
| ), |
| Nightly( |
| name='gae-sdk-scheduler', |
| branch='master', |
| hour=range(0, 24, 4), |
| minute=0, |
| builderNames=['GAE SDK CIPD Packager']), |
| Nightly( |
| name='third-party-packages', |
| branch='master', |
| hour=range(0, 24, 4), |
| minute=0, |
| builderNames=[b['name'] for b in third_party_builders]), |
| |
| # Trigger this builder on any change anywhere. |
| AnyBranchScheduler( |
| name='git-hash-metrics', |
| builderNames=['git-hash-metrics']), |
| ]) |
| |
| |
| ####### BUILDSLAVES |
| |
| # Associate the slaves to the builders. The configuration is in slaves.cfg. |
| slaves = slaves_list.SlavesList('slaves.cfg', 'InfraCron') |
| for builder in c['builders']: |
| builder['slavenames'] = slaves.GetSlavesName(builder=builder['name']) |
| |
| # The 'slaves' list defines the set of allowable buildslaves. List all the |
| # slaves registered to a builder. Remove dupes. |
| c['slaves'] = master_utils.AutoSetupSlaves( |
| c['builders'], config.Master.GetBotPassword()) |
| |
| # Make sure everything works together. |
| master_utils.VerifySetup(c, slaves) |
| |
| ####### STATUS TARGETS |
| |
| # Adds common status and tools (web status, mail notifier) to this master. |
| master_utils.AutoSetupMaster( |
| c, ActiveMaster, mail_notifier=False, order_console_by_time=True, |
| public_html='../master.chromium/public_html', |
| templates=['templates', '../master.chromium/templates'] |
| ) |
| |
| # Send alerts when builders fail. |
| |
| c['status'].extend([ |
| mail.MailNotifier( |
| fromaddr=ActiveMaster.from_address, |
| builders=[b['name'] for b in third_party_builders], |
| subject='third-party-packages build failed', |
| mode='failing', |
| relayhost=config.Master.smtp, |
| sendToInterestedUsers=False, |
| extraRecipients=['chrome-troopers+alerts@google.com'], |
| ), |
| ]) |
| |
| ####### PROJECT IDENTITY |
| |
| c['projectName'] = ActiveMaster.project_name |
| c['buildbotURL'] = ActiveMaster.buildbot_url |