| import json |
| import os |
| import sys |
| |
| from buildbot.changes.pb import PBChangeSource |
| from buildbot.plugins import util |
| from datetime import timedelta |
| from loadConfig import * |
| |
| from buildbot.www.hooks.github import GitHubEventHandler |
| |
| |
| def load_password(name, default=None): |
| if os.getenv(name): |
| return os.getenv(name) |
| try: |
| passwords = json.load(open('passwords.json')) |
| return passwords.get(name, default) |
| except Exception as e: |
| print('Error in finding {} in passwords.json'.format(name)) |
| return default |
| |
| |
| # This is work-around for https://bugs.webkit.org/show_bug.cgi?id=222361 |
| from buildbot.process.buildstep import BuildStep |
| BuildStep.warn_deprecated_if_oldstyle_subclass = lambda self, name: None |
| |
| |
| is_test_mode_enabled = os.getenv('BUILDBOT_PRODUCTION') is None |
| |
| c = BuildmasterConfig = {} |
| |
| c['change_source'] = PBChangeSource(port=16000) |
| |
| # permissions for WebStatus |
| |
| c['www'] = dict(port='tcp:8710:interface=127.0.0.1', plugins=dict(waterfall_view={}, console_view={}, grid_view={}), allowed_origins=["*"]) |
| c['www']['ui_default_config'] = { |
| 'Builders.show_workers_name': True, |
| 'Builders.buildFetchLimit': 1000, |
| 'Workers.showWorkerBuilders': True, |
| } |
| |
| if not is_test_mode_enabled: |
| credentials = load_password('BUILD_WEBKIT_CREDENTIALS') |
| if not credentials: |
| print('BUILD_WEBKIT credentials not found. Please ensure BUILD_WEBKIT_CREDENTIALS is configured either in env variables or in passwords.json') |
| sys.exit(1) |
| # See https://docs.buildbot.net/2.10.0/manual/configuration/www.html#example-configs |
| authz = util.Authz( |
| allowRules=[util.AnyControlEndpointMatcher(role="admin")], |
| roleMatchers=[util.RolesFromEmails(admin=list(credentials.keys()))] |
| ) |
| auth = util.UserPasswordAuth(credentials) |
| c['www']['auth'] = auth |
| c['www']['authz'] = authz |
| |
| c['www']['change_hook_dialects'] = dict( |
| github={ |
| 'class': GitHubEventHandler, |
| 'secret': load_password('GITHUB_HOOK_SECRET'), |
| 'token': load_password('GITHUB_COM_ACCESS_TOKEN'), |
| }, |
| ) |
| |
| c['protocols'] = {'pb': {'port': 17000}} |
| c['projectName'] = 'WebKit' |
| c['projectURL'] = 'https://webkit.org' |
| |
| if is_test_mode_enabled: |
| c['buildbotURL'] = 'http://localhost:8710/' |
| else: |
| c['buildbotURL'] = 'https://build.webkit.org/' |
| db_url = load_password('DB_URL') |
| db_name = load_password('DB_NAME') |
| db_username = load_password('DB_USERNAME') |
| db_password = load_password('DB_PASSWORD') |
| if None in [db_url, db_name, db_username, db_password]: |
| print('\n\nERROR: Database information missing from passwords.json.\n') |
| sys.exit(1) |
| # See https://docs.buildbot.net/2.10.0/manual/configuration/global.html#database-specification |
| c['db_url'] = 'postgresql://{}:{}@{}/{}'.format(db_username, db_password, db_url, db_name) |
| # configure a janitor to delete old logs |
| c['configurators'] = [util.JanitorConfigurator(logHorizon=timedelta(weeks=26), hour='1', dayOfWeek='*')] |
| |
| c['buildCacheSize'] = 60 |
| c['logCompressionMethod'] = 'lz4' |
| c['buildbotNetUsageData'] = None |
| |
| loadBuilderConfig(c, is_test_mode_enabled=is_test_mode_enabled) |