| #!/usr/bin/env python |
| # Copyright (c) 2012 The WebRTC project authors. All Rights Reserved. |
| # |
| # Use of this source code is governed by a BSD-style license |
| # that can be found in the LICENSE file in the root of the source |
| # tree. An additional intellectual property rights grant can be found |
| # in the file PATENTS. All contributing project authors may |
| # be found in the AUTHORS file in the root of the source tree. |
| |
| import os |
| |
| # These modules come from scripts, which must be in the PYTHONPATH. |
| from master import master_utils |
| from master import slaves_list |
| from master.builders_pools import BuildersPools |
| from master.factory import annotator_factory |
| from master.factory import remote_run_factory |
| from master.try_job_http import TryJobHTTP |
| from master.try_mail_notifier import TryMailNotifier |
| |
| import config |
| import master_site_config |
| |
| ActiveMaster = master_site_config.WebRTCTryServer |
| |
| MAIL_NOTIFIER = True |
| |
| # This is the dictionary that the buildmaster pays attention to. We also use |
| # a shorter alias to save typing. |
| c = BuildmasterConfig = {} |
| |
| config.DatabaseSetup(c) |
| |
| ####### CHANGESOURCES |
| c['change_source'] = [] |
| |
| # Avoid merging requests. |
| c['mergeRequests'] = lambda *_: False |
| |
| ####### BUILDERS |
| |
| # Recipe based builders. |
| specs = [ |
| {'name': 'win_compile_dbg', 'slavebuilddir': 'win'}, |
| {'name': 'win_compile_rel', 'slavebuilddir': 'win'}, |
| {'name': 'win_compile_x64_dbg', 'slavebuilddir': 'win'}, |
| {'name': 'win_compile_x64_rel', 'slavebuilddir': 'win'}, |
| {'name': 'win_dbg', 'slavebuilddir': 'win'}, |
| {'name': 'win_rel', 'slavebuilddir': 'win'}, |
| {'name': 'win_x64_dbg', 'slavebuilddir': 'win'}, |
| {'name': 'win_x64_rel', 'slavebuilddir': 'win'}, |
| {'name': 'win_clang_dbg', 'slavebuilddir': 'win_clang'}, |
| {'name': 'win_clang_rel', 'slavebuilddir': 'win_clang'}, |
| {'name': 'win_x64_clang_dbg', 'slavebuilddir': 'win_clang'}, |
| {'name': 'win_x64_clang_rel', 'slavebuilddir': 'win_clang'}, |
| {'name': 'win_asan', 'slavebuilddir': 'win_asan'}, |
| {'name': 'win_x64_win8', 'slavebuilddir': 'win'}, |
| {'name': 'win_x64_win10', 'slavebuilddir': 'win'}, |
| {'name': 'win_experimental', 'slavebuilddir': 'win'}, |
| { |
| 'name': 'win_more_configs', |
| 'recipe': 'webrtc/more_configs', |
| 'slavebuilddir': 'win_more_configs', |
| }, |
| { |
| 'name': 'win_chromium_compile', |
| 'recipe': 'chromium_trybot', |
| 'slavebuilddir': 'remote_run', |
| }, |
| {'name': 'mac_compile_dbg', 'slavebuilddir': 'mac32'}, |
| {'name': 'mac_compile_rel', 'slavebuilddir': 'mac32'}, |
| {'name': 'mac_dbg', 'slavebuilddir': 'mac32'}, |
| {'name': 'mac_rel', 'slavebuilddir': 'mac32'}, |
| {'name': 'mac_experimental', 'slavebuilddir': 'mac32'}, |
| { |
| 'name': 'mac_chromium_compile', |
| 'recipe': 'chromium_trybot', |
| 'slavebuilddir': 'remote_run', |
| }, |
| {'name': 'ios_dbg', 'slavebuilddir': 'mac32', 'recipe': 'webrtc/ios'}, |
| {'name': 'ios_rel', 'slavebuilddir': 'mac32', 'recipe': 'webrtc/ios'}, |
| {'name': 'ios_arm64_dbg', 'slavebuilddir': 'mac64', 'recipe': 'webrtc/ios'}, |
| {'name': 'ios_arm64_rel', 'slavebuilddir': 'mac64', 'recipe': 'webrtc/ios'}, |
| { |
| 'name': 'ios32_sim_ios9_dbg', |
| 'slavebuilddir': 'mac32', |
| 'recipe': 'webrtc/ios', |
| }, |
| { |
| 'name': 'ios64_sim_ios9_dbg', |
| 'slavebuilddir': 'mac64', |
| 'recipe': 'webrtc/ios', |
| }, |
| { |
| 'name': 'ios64_sim_ios10_dbg', |
| 'slavebuilddir': 'mac64', |
| 'recipe': 'webrtc/ios', |
| }, |
| { |
| 'name': 'ios64_sim_ios11_dbg', |
| 'slavebuilddir': 'mac64', |
| 'recipe': 'webrtc/ios', |
| }, |
| { |
| 'name': 'ios_api_framework', |
| 'slavebuilddir': 'mac64', |
| 'recipe': 'webrtc/ios_api_framework', |
| }, |
| {'name': 'mac_asan', 'slavebuilddir': 'mac_asan'}, |
| {'name': 'linux_compile_dbg', 'slavebuilddir': 'linux64'}, |
| {'name': 'linux_compile_rel', 'slavebuilddir': 'linux64'}, |
| {'name': 'linux_dbg', 'slavebuilddir': 'linux64'}, |
| {'name': 'linux_rel', 'slavebuilddir': 'linux64'}, |
| {'name': 'linux_arm64_dbg', 'slavebuilddir': 'linux_arm'}, |
| {'name': 'linux_arm64_rel', 'slavebuilddir': 'linux_arm'}, |
| {'name': 'linux32_dbg', 'slavebuilddir': 'linux32'}, |
| {'name': 'linux32_rel', 'slavebuilddir': 'linux32'}, |
| {'name': 'linux32_arm_dbg', 'slavebuilddir': 'linux32_arm'}, |
| {'name': 'linux32_arm_rel', 'slavebuilddir': 'linux32_arm'}, |
| {'name': 'linux_gcc_rel', 'slavebuilddir': 'linux_gcc'}, |
| {'name': 'linux_memcheck', 'slavebuilddir': 'linux_memcheck'}, |
| {'name': 'linux_msan', 'slavebuilddir': 'linux_msan'}, |
| {'name': 'linux_tsan2', 'slavebuilddir': 'linux_tsan2'}, |
| {'name': 'linux_asan', 'slavebuilddir': 'linux_asan'}, |
| {'name': 'linux_ubsan', 'slavebuilddir': 'linux_ubsan'}, |
| {'name': 'linux_ubsan_vptr', 'slavebuilddir': 'linux_ubsan_vptr'}, |
| { |
| 'name': 'linux_more_configs', |
| 'recipe': 'webrtc/more_configs', |
| 'slavebuilddir': 'linux64', |
| }, |
| { |
| 'name': 'linux_libfuzzer_rel', |
| 'recipe': 'webrtc/libfuzzer', |
| 'slavebuilddir': 'linux64_libfuzzer', |
| }, |
| {'name': 'linux_experimental', 'slavebuilddir': 'linux64'}, |
| { |
| 'name': 'linux_chromium_compile', |
| 'recipe': 'chromium_trybot', |
| 'slavebuilddir': 'remote_run', |
| }, |
| { |
| 'name': 'android_chromium_compile', |
| 'recipe': 'chromium_trybot', |
| 'slavebuilddir': 'remote_run', |
| }, |
| {'name': 'android_compile_dbg', 'slavebuilddir': 'android'}, |
| {'name': 'android_compile_rel', 'slavebuilddir': 'android'}, |
| {'name': 'android_compile_arm64_dbg', 'slavebuilddir': 'android_arm64'}, |
| {'name': 'android_compile_arm64_rel', 'slavebuilddir': 'android_arm64'}, |
| {'name': 'android_compile_mips_dbg', 'slavebuilddir': 'android_mips'}, |
| {'name': 'android_compile_x86_rel', 'slavebuilddir': 'android_x86'}, |
| {'name': 'android_compile_x86_dbg', 'slavebuilddir': 'android_x86'}, |
| {'name': 'android_compile_x64_dbg', 'slavebuilddir': 'android_x64'}, |
| {'name': 'android_dbg', 'slavebuilddir': 'android'}, |
| {'name': 'android_rel', 'slavebuilddir': 'android'}, |
| {'name': 'android_arm64_rel', 'slavebuilddir': 'android_arm64'}, |
| { |
| 'name': 'android_more_configs', |
| 'recipe': 'webrtc/more_configs', |
| 'slavebuilddir': 'android', |
| }, |
| {'name': 'android_experimental', 'slavebuilddir': 'android'}, |
| { |
| 'name': 'noop', |
| 'recipe': 'webrtc/noop', |
| 'slavebuilddir': 'noop' |
| } |
| ] |
| |
| |
| m_annotator = annotator_factory.AnnotatorFactory() |
| |
| |
| def m_remote_run(recipe, **kwargs): |
| return remote_run_factory.RemoteRunFactory( |
| active_master=ActiveMaster, |
| repository='https://chromium.googlesource.com/chromium/tools/build.git', |
| recipe=recipe, |
| factory_properties={'path_config': 'kitchen'}, |
| **kwargs) |
| |
| |
| c['builders'] = [ |
| { |
| 'name': spec['name'], |
| 'factory': m_annotator.BaseFactory(spec['recipe']) |
| if 'recipe' in spec and spec['recipe'] in ('webrtc/ios', |
| 'webrtc/libfuzzer', |
| 'webrtc/more_configs',) |
| else m_remote_run(spec.get('recipe', 'webrtc/standalone')), |
| 'slavebuilddir': spec['slavebuilddir'], |
| } for spec in specs |
| ] |
| |
| |
| # Presubmit builder. |
| c['builders'].append( |
| { |
| 'name': 'presubmit', |
| 'factory': m_annotator.BaseFactory('run_presubmit', |
| {'repo_name': 'webrtc', |
| 'runhooks': True}), |
| 'slavebuilddir': 'linux64', |
| } |
| ) |
| |
| # Slaves are loaded from slaves.cfg. |
| slaves = slaves_list.SlavesList('slaves.cfg', 'WebRTCTryServer') |
| |
| for builder in c['builders']: |
| # Associate the slaves to the builders. The configuration is in slaves.cfg. |
| builder['slavenames'] = slaves.GetSlavesName(builder=builder['name']) |
| # Disable auto_reboot when testing locally, but don't change for production. |
| if not ActiveMaster.is_production_host: |
| builder['auto_reboot'] = False |
| |
| |
| ####### BUILDSLAVES |
| |
| # 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) |
| |
| ####### SCHEDULERS |
| |
| pools = BuildersPools('webrtc') |
| for spec in specs: |
| pools['webrtc'].append(spec['name']) |
| |
| # Configure the Schedulers; |
| c['schedulers'] = [] |
| |
| last_good_urls = {'webrtc': ActiveMaster.last_good_url} |
| code_review_sites = {'webrtc': ActiveMaster.code_review_site} |
| |
| c['schedulers'].append(TryJobHTTP( |
| name='webrtc_try_job_http', |
| port=ActiveMaster.try_job_port, |
| last_good_urls=last_good_urls, |
| code_review_sites=code_review_sites, |
| pools=pools)) |
| |
| ####### STATUS TARGETS |
| |
| # Buildbot master url: |
| # Must come before AutoSetupMaster(). |
| c['buildbotURL'] = ActiveMaster.buildbot_url |
| |
| # Adds common status and tools to this master. |
| # Use our own mail notifier. |
| master_utils.AutoSetupMaster(c, ActiveMaster, |
| order_console_by_time=True, |
| public_html='../master.chromium/public_html', |
| templates=['./templates', |
| '../master.chromium/templates']) |
| |
| if MAIL_NOTIFIER: |
| # Add a dumb MailNotifier first so it will be used for BuildSlave with |
| # notify_on_missing set when they go missing. |
| from buildbot.status import mail |
| c['status'].append(mail.MailNotifier( |
| fromaddr=ActiveMaster.from_address, |
| builders=[], |
| relayhost=config.Master.smtp, |
| lookup=master_utils.UsersAreEmails())) |
| |
| # Try job result emails. |
| from master.try_mail_notifier import TryMailNotifier |
| c['status'].append(TryMailNotifier( |
| fromaddr=ActiveMaster.from_address, |
| reply_to=ActiveMaster.reply_to, |
| subject='try %(result)s for %(reason)s @ r%(revision)s', |
| mode='all', |
| relayhost=config.Master.smtp, |
| lookup=master_utils.UsersAreEmails())) |
| |
| ####### PROJECT IDENTITY |
| |
| # The 'projectURL' string will be used to provide a link |
| # from buildbot HTML pages to your project's home page. |
| c['projectURL'] = 'http://dev.chromium.org/developers/testing/try-server-usage' |