[jhbuild/remove-buildbot-support] wip
- From: Christoph Reiter <creiter src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [jhbuild/remove-buildbot-support] wip
- Date: Mon, 9 Sep 2019 16:45:25 +0000 (UTC)
commit 8e948ee0614eb2e585250e4d7eef4237ac2ddc53
Author: Christoph Reiter <reiter christoph gmail com>
Date: Mon Sep 9 18:44:07 2019 +0200
wip
buildbot/.svnignore | 5 -
buildbot/AUTHORS | 5 -
buildbot/Makefile.am | 52 -
buildbot/README | 5 -
buildbot/buildbot.tac | 12 -
buildbot/master.cfg | 80 --
buildbot/public_html/bar.png | Bin 154 -> 0 bytes
buildbot/public_html/building.png | Bin 923 -> 0 bytes
buildbot/public_html/cyan-bar.png | Bin 221 -> 0 bytes
buildbot/public_html/download.png | Bin 440 -> 0 bytes
buildbot/public_html/emptyimg.png | Bin 6978 -> 0 bytes
buildbot/public_html/error.png | Bin 784 -> 0 bytes
buildbot/public_html/feed-atom.png | Bin 849 -> 0 bytes
buildbot/public_html/feed.png | Bin 725 -> 0 bytes
buildbot/public_html/figure.png | Bin 540 -> 0 bytes
buildbot/public_html/foot-16.png | Bin 650 -> 0 bytes
buildbot/public_html/foot.png | Bin 699 -> 0 bytes
buildbot/public_html/general_bg.png | Bin 178 -> 0 bytes
buildbot/public_html/general_separator.png | Bin 212 -> 0 bytes
buildbot/public_html/gnome-16.png | Bin 650 -> 0 bytes
buildbot/public_html/gnome-64.png | Bin 4385 -> 0 bytes
buildbot/public_html/gnome-gtp.png | Bin 4208 -> 0 bytes
buildbot/public_html/green-bar.png | Bin 227 -> 0 bytes
buildbot/public_html/idle.png | Bin 418 -> 0 bytes
buildbot/public_html/images.jpeg | Bin 352 -> 0 bytes
buildbot/public_html/index.html | 29 -
buildbot/public_html/info.png | Bin 543 -> 0 bytes
buildbot/public_html/lgo.css | 377 ------
buildbot/public_html/logo.png | Bin 5675 -> 0 bytes
buildbot/public_html/nobody.png | Bin 5701 -> 0 bytes
buildbot/public_html/offline.png | Bin 424 -> 0 bytes
buildbot/public_html/purple-bar.png | Bin 227 -> 0 bytes
buildbot/public_html/red-bar.png | Bin 228 -> 0 bytes
buildbot/public_html/robot.png | Bin 3608 -> 0 bytes
buildbot/public_html/robots.txt | 2 -
buildbot/public_html/star.png | Bin 2871 -> 0 bytes
buildbot/public_html/t.png | Bin 317 -> 0 bytes
buildbot/public_html/tab_left.png | Bin 371 -> 0 bytes
buildbot/public_html/tab_right.png | Bin 1134 -> 0 bytes
buildbot/public_html/top-header-gradient.png | Bin 725 -> 0 bytes
buildbot/public_html/warn.png | Bin 809 -> 0 bytes
buildbot/public_html/webpage.png | Bin 844 -> 0 bytes
buildbot/template.html | 48 -
configure.ac | 4 -
doc/C/index.docbook | 61 -
jhbuild/Makefile.am | 2 +-
jhbuild/buildbot/Makefile.am | 11 -
jhbuild/buildbot/__init__.py | 0
jhbuild/buildbot/changes.py | 148 ---
jhbuild/buildbot/factory.py | 50 -
jhbuild/buildbot/scheduler.py | 173 ---
jhbuild/buildbot/status/Makefile.am | 7 -
jhbuild/buildbot/status/__init__.py | 0
jhbuild/buildbot/status/web/Makefile.am | 13 -
jhbuild/buildbot/status/web/__init__.py | 221 ----
jhbuild/buildbot/status/web/bot.py | 67 -
jhbuild/buildbot/status/web/build.py | 206 ---
jhbuild/buildbot/status/web/builder.py | 143 --
jhbuild/buildbot/status/web/changes.py | 90 --
jhbuild/buildbot/status/web/feeds.py | 265 ----
jhbuild/buildbot/status/web/logs.py | 87 --
jhbuild/buildbot/status/web/step.py | 115 --
jhbuild/buildbot/status/web/waterfall.py | 491 -------
jhbuild/buildbot/steps.py | 265 ----
jhbuild/buildbot/test/__init__.py | 0
jhbuild/buildbot/test/mail/svn-commits-list.1 | 1370 --------------------
jhbuild/buildbot/test/mail/svn-commits-list.2 | 91 --
jhbuild/buildbot/test/mail/svn-commits-list.3 | 709 ----------
.../buildbot/test/mail/svn-commits-list.3.comments | 43 -
jhbuild/buildbot/test/mail/svn-commits-list.4 | 70 -
jhbuild/buildbot/test/mail/svn-commits-list.5 | 114 --
jhbuild/buildbot/test/mail/svn-commits-list.6 | 87 --
jhbuild/buildbot/test/test_mail.py | 68 -
jhbuild/commands/bot.py | 738 +----------
jhbuild/config.py | 8 +-
jhbuild/defaults.jhbuildrc | 14 -
76 files changed, 5 insertions(+), 6341 deletions(-)
---
diff --git a/configure.ac b/configure.ac
index efa3a44e..58923be4 100644
--- a/configure.ac
+++ b/configure.ac
@@ -56,14 +56,10 @@ AC_CONFIG_FILES([
triggers/Makefile
jhbuild.desktop.in
jhbuild/Makefile
- jhbuild/buildbot/Makefile
- jhbuild/buildbot/status/web/Makefile
- jhbuild/buildbot/status/Makefile
jhbuild/commands/Makefile
jhbuild/frontends/Makefile
jhbuild/modtypes/Makefile
jhbuild/utils/Makefile
jhbuild/versioncontrol/Makefile
- buildbot/Makefile
])
AC_OUTPUT
diff --git a/doc/C/index.docbook b/doc/C/index.docbook
index 5e580783..9d93e39c 100644
--- a/doc/C/index.docbook
+++ b/doc/C/index.docbook
@@ -611,67 +611,6 @@ Type=Application</programlisting>
</section>
</section>
- <section id="buildbot-integration">
- <title>Buildbot Integration</title>
-
- <para>Coupled with the <ulink url="http://buildbot.net">Buildbot</ulink>
- project, JHBuild can also function as a continuous integration tool. The
- Buildbot configuration is used by the GNOME project at
- <ulink url="http://build.gnome.org">build.gnome.org</ulink>.</para>
-
- <section id="buildbot-slave">
- <title>Configuring a Buildbot Slave</title>
-
- <para>A Buildbot slave is a variation of a normal JHBuild installation
- that serves the requests of a Buildbot master. It is recommended to set
- up JHBuild and complete a build with most modules building successfully
- before adding the Buildbot customizations.</para>
-
- <para>Buildbot commands are options to the <command>bot</command>
- command. To download and install the extra required software, run the
- following command:</para>
-
-<screen><prompt>$</prompt> <userinput>jhbuild bot --setup</userinput></screen>
-
- <para>Once this step has completed successfully, three new configuration
- variables are required in <filename>~/.config/jhbuildrc</filename>.
- </para>
-
- <note>
- <para>It is not possible to use an alternate configuration file, the
- <link linkend="option-file"><option>--file</option></link> will not
- get desired effects.</para>
- </note>
-
-<programlisting>
-jhbuildbot_master = 'build.gnome.org:9070'
-jhbuildbot_slavename = 'slavename'
-jhbuildbot_password = 'password'
-</programlisting>
-
- <para><varname>jhbuildbot_master</varname> is a string specifying the
- Buildbot master server; it defaults to
- <literal>'build.gnome.org:9070'</literal>.
- <varname>jhbuildbot_slavename</varname> and
- <varname>jhbuildbot_password</varname> identify the slave on the master
- server. Contact the Buildbot master administrators to obtain the slave
- name and password.</para>
-
- <note>
- <para>The administrators of
- <ulink url="http://build.gnome.org">build.gnome.org</ulink> can be
- reached on the <ulink url="mailto:build-brigade-list gnome org">Build
- Brigade mailing list</ulink>.</para>
- </note>
- </section>
-
-<!-- TODO: configuring a buildbot master
- <section id="buildbot-master">
- <title>Configuring a Buildbot Master</title>
- </section>
- -->
- </section>
-
<section id="command-reference">
<title>Command Reference</title>
diff --git a/jhbuild/Makefile.am b/jhbuild/Makefile.am
index 5722b988..f535a6f4 100644
--- a/jhbuild/Makefile.am
+++ b/jhbuild/Makefile.am
@@ -1,4 +1,4 @@
-SUBDIRS = buildbot commands frontends modtypes utils versioncontrol
+SUBDIRS = commands frontends modtypes utils versioncontrol
appdir = $(pythondir)/jhbuild/
diff --git a/jhbuild/commands/bot.py b/jhbuild/commands/bot.py
index 0919241c..0b8de052 100644
--- a/jhbuild/commands/bot.py
+++ b/jhbuild/commands/bot.py
@@ -23,32 +23,11 @@
# to override just some parts of them). Buildbot is also licensed under the
# GNU General Public License.
-import os
-import signal
-import sys
-import urllib
from optparse import make_option
-import socket
-import __builtin__
-import csv
-import logging
-try:
- import elementtree.ElementTree as ET
-except ImportError:
- import xml.etree.ElementTree as ET
-
-import jhbuild.moduleset
-import jhbuild.frontends
from jhbuild.commands import Command, register_command
-from jhbuild.commands.base import cmd_build
-from jhbuild.config import addpath
-from jhbuild.errors import UsageError, FatalError, CommandError
+from jhbuild.errors import FatalError
-try:
- import buildbot
-except ImportError:
- buildbot = None
class cmd_bot(Command):
doc = N_('Control buildbot')
@@ -100,719 +79,6 @@ class cmd_bot(Command):
])
def run(self, config, options, args, help=None):
- if options.setup:
- return self.setup(config)
-
- global buildbot
- if buildbot is None:
- import site
- pythonversion = 'python' + str(sys.version_info[0]) + '.' + str(sys.version_info[1])
- pythonpath = os.path.join(config.prefix, 'lib', pythonversion, 'site-packages')
- site.addsitedir(pythonpath)
- try:
- import buildbot
- except ImportError:
- raise FatalError(_('buildbot and twisted not found, run jhbuild bot --setup'))
-
- # make jhbuild config file accessible to buildbot files
- # (master.cfg , steps.py, etc.)
- __builtin__.__dict__['jhbuild_config'] = config
-
- daemonize = False
- pidfile = None
- logfile = None
- slaves_dir = config.jhbuildbot_slaves_dir
- mastercfgfile = config.jhbuildbot_mastercfg
- buildbot_dir = config.jhbuildbot_dir
-
- if options.daemon:
- daemonize = True
- if options.pidfile:
- pidfile = options.pidfile
- if options.logfile:
- logfile = options.logfile
- if options.slaves_dir:
- slaves_dir = options.slaves_dir
- if options.mastercfgfile:
- mastercfgfile = options.mastercfgfile
- if options.buildbot_dir:
- buildbot_dir = os.path.abspath(options.buildbot_dir)
-
- if options.start:
- return self.start(config, daemonize, pidfile, logfile)
-
- if options.step:
- os.environ['JHBUILDRC'] = config.filename
- os.environ['LC_ALL'] = 'C'
- os.environ['LANGUAGE'] = 'C'
- os.environ['LANG'] = 'C'
- __builtin__.__dict__['_'] = lambda x: x
- config.interact = False
- config.nonetwork = True
- os.environ['TERM'] = 'dumb'
- if args[0] in ('update', 'build', 'check', 'clean'):
- module_set = jhbuild.moduleset.load(config)
- buildscript = jhbuild.frontends.get_buildscript(config,
- [module_set.get_module(x, ignore_case=True) for x in args[1:]],
- module_set=module_set)
- phases = None
- if args[0] == 'update':
- config.nonetwork = False
- phases = ['checkout']
- elif args[0] == 'build':
- config.alwaysautogen = True
- # make check will be run in another step
- config.makecheck = False
- config.build_targets = ['install']
- elif args[0] == 'check':
- config.makecheck = True
- config.build_targets = ['check']
- phases = ['check']
- elif args[0] == 'clean':
- phases = ['clean']
- rc = buildscript.build(phases=phases)
- else:
- command = args[0]
- rc = jhbuild.commands.run(command, config, args[1:], help=None)
- sys.exit(rc)
-
- if options.start_server:
- return self.start_server(config, daemonize, pidfile, logfile,
- slaves_dir, mastercfgfile, buildbot_dir)
-
- if options.stop or options.stop_server:
- return self.stop(config, pidfile)
-
- if options.reload_server_config:
- return self.reload_server_config(config, pidfile)
-
- def setup(self, config):
- module_set = jhbuild.moduleset.load(config, 'buildbot')
- module_list = module_set.get_module_list('all', config.skip)
- build = jhbuild.frontends.get_buildscript(config, module_list, module_set=module_set)
- return build.build()
-
- def start(self, config, daemonize, pidfile, logfile):
- from twisted.application import service
- application = service.Application('buildslave')
- if ':' in config.jhbuildbot_master:
- master_host, master_port = config.jhbuildbot_master.split(':')
- master_port = int(master_port)
- else:
- master_host, master_port = config.jhbuildbot_master, 9070
-
- slave_name = config.jhbuildbot_slavename or socket.gethostname()
-
- keepalive = 600
- usepty = 0
- umask = None
- basedir = os.path.join(config.checkoutroot, 'jhbuildbot')
- if not os.path.exists(os.path.join(basedir, 'builddir')):
- os.makedirs(os.path.join(basedir, 'builddir'))
- os.chdir(basedir)
-
- from buildbot.slave.bot import BuildSlave
- s = BuildSlave(master_host, master_port,
- slave_name, config.jhbuildbot_password, basedir,
- keepalive, usepty, umask=umask)
- s.setServiceParent(application)
-
-
- from twisted.scripts._twistd_unix import UnixApplicationRunner, ServerOptions
-
- opts = ['--no_save']
- if not daemonize:
- opts.append('--nodaemon')
- if pidfile:
- opts.extend(['--pidfile', pidfile])
- if logfile:
- opts.extend(['--logfile', logfile])
- options = ServerOptions()
- options.parseOptions(opts)
-
- class JhBuildbotApplicationRunner(UnixApplicationRunner):
- application = None
-
- def createOrGetApplication(self):
- return self.application
-
- JhBuildbotApplicationRunner.application = application
- JhBuildbotApplicationRunner(options).run()
-
- def start_server(self, config, daemonize, pidfile, logfile, slaves_dir,
- mastercfgfile, buildbot_dir):
-
- from twisted.scripts._twistd_unix import UnixApplicationRunner, ServerOptions
-
- opts = ['--no_save']
- if not daemonize:
- opts.append('--nodaemon')
- if pidfile:
- opts.extend(['--pidfile', pidfile])
- if pidfile:
- opts.extend(['--logfile', logfile])
- options = ServerOptions()
- options.parseOptions(opts)
-
- class JhBuildbotApplicationRunner(UnixApplicationRunner):
- application = None
-
- def createOrGetApplication(self):
- return self.application
-
- from twisted.application import service, strports
- from buildbot.master import BuildMaster
- application = service.Application('buildmaster')
- from buildbot.buildslave import BuildSlave
-
- from twisted.python import log
- from twisted.internet import defer
- from buildbot import interfaces
- from buildbot.process.properties import Properties
-
- class JhBuildSlave(BuildSlave):
- contact_name = None
- contact_email = None
- url = None
- distribution = None
- architecture = None
- version = None
-
- max_builds = 2
- scheduler = None
-
- run_checks = True
- run_coverage_report = False
- run_clean_afterwards = False
-
- def load_extra_configuration(self, slaves_dir):
- from twisted.python import log
- slave_xml_file = os.path.join(slaves_dir, self.slavename + '.xml')
- if not os.path.exists(slave_xml_file):
- log.msg(_('No description for slave %s.') % self.slavename)
- return
- try:
- cfg = ET.parse(slave_xml_file)
- except: # parse error
- log.msg(_('Failed to parse slave config for %s.') % self.slavename)
- return
-
- for attribute in ('config/max_builds', 'config/missing_timeout',
- 'config/run_checks', 'config/run_coverage_report',
- 'config/run_clean_afterwards',
- 'config/scheduler',
- 'nightly_scheduler/minute',
- 'nightly_scheduler/hour',
- 'nightly_scheduler/dayOfMonth',
- 'nightly_scheduler/month',
- 'nightly_scheduler/dayOfWeek',
- 'info/contact_name', 'info/contact_email',
- 'info/url', 'info/distribution', 'info/architecture',
- 'info/version'):
- attr_name = attribute.split('/')[-1]
- try:
- value = cfg.find(attribute).text
- except AttributeError:
- continue
-
- if attr_name in ('max_builds', 'missing_timeout'): # int value
- try:
- value = int(value)
- except ValueError:
- continue
-
- if attr_name in ('run_checks', 'run_coverage_report', 'run_clean_afterwards'):
- value = (value == 'yes')
-
- if attr_name in ('minute', 'hour', 'dayOfMonth', 'month', 'dayOfWeek'):
- try:
- value = int(value)
- except ValueError:
- value = '*'
-
- setattr(self, attr_name, value)
-
- if self.scheduler == 'nightly':
- self.nightly_kwargs = {}
- for attr_name in ('minute', 'hour', 'dayOfMonth', 'month', 'dayOfWeek'):
- if hasattr(self, attr_name):
- self.nightly_kwargs[attr_name] = getattr(self, attr_name)
-
- class JhBuildMaster(BuildMaster):
- jhbuild_config = config
- def loadConfig(self, f):
- # modified from parent method to get slaves, projects, change
- # sources, schedulers, builders and web status ouf of
- # master.cfg [it would have been cleaner if jhbuild didn't
- # have to copy all that code.]
- localDict = {'basedir': os.path.expanduser(self.basedir)}
- try:
- exec f in localDict
- except:
- log.msg("error while parsing config file")
- raise
-
- jhbuild_config.load()
-
- try:
- config = localDict['BuildmasterConfig']
- except KeyError:
- log.err("missing config dictionary")
- log.err("config file must define BuildmasterConfig")
- raise
-
- known_keys = ("bots", "slaves",
- "sources", "change_source",
- "schedulers", "builders", "mergeRequests",
- "slavePortnum", "debugPassword", "logCompressionLimit",
- "manhole", "status", "projectName", "projectURL",
- "buildbotURL", "properties", "prioritizeBuilders",
- "eventHorizon", "buildCacheSize", "logHorizon", "buildHorizon",
- "changeHorizon", "logMaxSize", "logMaxTailSize",
- "logCompressionMethod",
- )
- for k in config.keys():
- if k not in known_keys:
- log.msg("unknown key '%s' defined in config dictionary" % k)
-
- # the 'slaves' list is read from the 'slaves.csv' file in the
- # current directory (unless instructed different from command line)
- # it is a CSV file structured like this:
- # slavename,password
- config['slaves'] = []
- slaves_csv_file = os.path.join(slaves_dir, 'slaves.csv')
- if os.path.exists(slaves_csv_file):
- for x in csv.reader(file(slaves_csv_file)):
- if not x or x[0].startswith('#'):
- continue
- kw = {}
- build_slave = JhBuildSlave(x[0], x[1])
- build_slave.load_extra_configuration(slaves_dir)
- config['slaves'].append(build_slave)
-
- if len(config['slaves']) == 0:
- log.msg('you must fill slaves.csv with slaves')
-
- module_set = jhbuild.moduleset.load(self.jhbuild_config)
- module_list = module_set.get_module_list(
- self.jhbuild_config.modules,
- self.jhbuild_config.skip,
- include_afters=True)
- config['projects'] = [x.name for x in module_list \
- if not x.name.startswith('meta-')]
-
- if self.jhbuild_config.jhbuildbot_svn_commits_box:
- # trigger builds from mails to svn-commit-list
- # (note Maildir must be correct, or everything will fail)
- from jhbuild.buildbot.changes import GnomeMaildirSource
- config['change_source'] = GnomeMaildirSource(
- self.jhbuild_config.jhbuildbot_svn_commits_box,
- modules=module_list,
- prefix=None)
- else:
- # support injection (use 'buildbot sendchange')
- from buildbot.changes.pb import PBChangeSource
- config['change_source'] = PBChangeSource()
-
- # Schedulers
- from jhbuild.buildbot.scheduler import SerialScheduler, NightlySerialScheduler,
OnCommitScheduler
- config['schedulers'] = []
- for slave in config['slaves']:
- s = None
- for project in config['projects']:
- buildername = str('%s-%s' % (project, slave.slavename))
- scheduler_kwargs = {}
- if slave.scheduler == 'nightly':
- scheduler_class = NightlySerialScheduler
- scheduler_kwargs = slave.nightly_kwargs
- else:
- scheduler_class = SerialScheduler
- s = scheduler_class(buildername, project, upstream=s,
- builderNames=[buildername],
- **scheduler_kwargs)
- config['schedulers'].append(s)
- if self.jhbuild_config.jhbuildbot_svn_commits_box:
- # schedulers that will launch job when receiving
- # change notifications
- s2 = OnCommitScheduler('oc-' + buildername,
- project, builderNames=[buildername])
- config['schedulers'].append(s2)
-
- # Builders
- from jhbuild.buildbot.factory import JHBuildFactory
- config['builders'] = []
- for project in config['projects']:
- for slave in config['slaves']:
- f = JHBuildFactory(project, slave)
- config['builders'].append({
- 'name' : "%s-%s" % (project, slave.slavename),
- 'slavename' : slave.slavename,
- 'builddir' : 'builddir/%s.%s' % (project, slave.slavename),
- 'factory' : f,
- 'category' : project
- })
-
- # Status targets
- if not config.has_key('status'):
- # let it be possible to define additional status in
- # master.cfg
- config['status'] = []
-
- from jhbuild.buildbot.status.web import JHBuildWebStatus
- config['status'].append(
- JHBuildWebStatus(
- self.jhbuild_config.moduleset,
- config['projects'],
- [x.slavename for x in config['slaves']],
- http_port=8080, allowForce=True)
- )
-
- # remaining of the method is a straight copy from buildbot
- # ...
- try:
- # required
- schedulers = config['schedulers']
- builders = config['builders']
- slavePortnum = config['slavePortnum']
- #slaves = config['slaves']
- #change_source = config['change_source']
-
- # optional
- debugPassword = config.get('debugPassword')
- manhole = config.get('manhole')
- status = config.get('status', [])
- projectName = config.get('projectName')
- projectURL = config.get('projectURL')
- buildbotURL = config.get('buildbotURL')
- properties = config.get('properties', {})
- buildCacheSize = config.get('buildCacheSize', None)
- eventHorizon = config.get('eventHorizon', None)
- logHorizon = config.get('logHorizon', None)
- buildHorizon = config.get('buildHorizon', None)
- logCompressionLimit = config.get('logCompressionLimit', 4*1024)
- if logCompressionLimit is not None and not \
- isinstance(logCompressionLimit, int):
- raise ValueError("logCompressionLimit needs to be bool or int")
- logCompressionMethod = config.get('logCompressionMethod', "bz2")
- if logCompressionMethod not in ('bz2', 'gz'):
- raise ValueError("logCompressionMethod needs to be 'bz2', or 'gz'")
- logMaxSize = config.get('logMaxSize')
- if logMaxSize is not None and not \
- isinstance(logMaxSize, int):
- raise ValueError("logMaxSize needs to be None or int")
- logMaxTailSize = config.get('logMaxTailSize')
- if logMaxTailSize is not None and not \
- isinstance(logMaxTailSize, int):
- raise ValueError("logMaxTailSize needs to be None or int")
- mergeRequests = config.get('mergeRequests')
- if mergeRequests is not None and not callable(mergeRequests):
- raise ValueError("mergeRequests must be a callable")
- prioritizeBuilders = config.get('prioritizeBuilders')
- if prioritizeBuilders is not None and not callable(prioritizeBuilders):
- raise ValueError("prioritizeBuilders must be callable")
- changeHorizon = config.get("changeHorizon")
- if changeHorizon is not None and not isinstance(changeHorizon, int):
- raise ValueError("changeHorizon needs to be an int")
-
- except KeyError as e:
- log.msg("config dictionary is missing a required parameter")
- log.msg("leaving old configuration in place")
- raise
-
- #if "bots" in config:
- # raise KeyError("c['bots'] is no longer accepted")
-
- slaves = config.get('slaves', [])
- if "bots" in config:
- m = ("c['bots'] is deprecated as of 0.7.6 and will be "
- "removed by 0.8.0 . Please use c['slaves'] instead.")
- log.msg(m)
- warnings.warn(m, DeprecationWarning)
- for name, passwd in config['bots']:
- slaves.append(JhBuildSlave(name, passwd))
-
- if "bots" not in config and "slaves" not in config:
- log.msg("config dictionary must have either 'bots' or 'slaves'")
- log.msg("leaving old configuration in place")
- raise KeyError("must have either 'bots' or 'slaves'")
-
- #if "sources" in config:
- # raise KeyError("c['sources'] is no longer accepted")
-
- if changeHorizon is not None:
- self.change_svc.changeHorizon = changeHorizon
-
- change_source = config.get('change_source', [])
- if isinstance(change_source, (list, tuple)):
- change_sources = change_source
- else:
- change_sources = [change_source]
- if "sources" in config:
- m = ("c['sources'] is deprecated as of 0.7.6 and will be "
- "removed by 0.8.0 . Please use c['change_source'] instead.")
- log.msg(m)
- warnings.warn(m, DeprecationWarning)
- for s in config['sources']:
- change_sources.append(s)
-
- # do some validation first
- for s in slaves:
- assert interfaces.IBuildSlave.providedBy(s)
- if s.slavename in ("debug", "change", "status"):
- raise KeyError(
- "reserved name '%s' used for a bot" % s.slavename)
- if config.has_key('interlocks'):
- raise KeyError("c['interlocks'] is no longer accepted")
-
- assert isinstance(change_sources, (list, tuple))
- for s in change_sources:
- assert interfaces.IChangeSource(s, None)
- # this assertion catches c['schedulers'] = Scheduler(), since
- # Schedulers are service.MultiServices and thus iterable.
- errmsg = "c['schedulers'] must be a list of Scheduler instances"
- assert isinstance(schedulers, (list, tuple)), errmsg
- for s in schedulers:
- assert interfaces.IScheduler(s, None), errmsg
- assert isinstance(status, (list, tuple))
- for s in status:
- assert interfaces.IStatusReceiver(s, None)
-
- slavenames = [s.slavename for s in slaves]
- buildernames = []
- dirnames = []
-
- # convert builders from objects to config dictionaries
- builders_dicts = []
- for b in builders:
- if isinstance(b, buildbot.config.BuilderConfig):
- builders_dicts.append(b.getConfigDict())
- elif type(b) is dict:
- builders_dicts.append(b)
- else:
- raise ValueError("builder %s is not a BuilderConfig object (or a dict)" % b)
- builders = builders_dicts
-
- for b in builders:
- if b.has_key('slavename') and b['slavename'] not in slavenames:
- raise ValueError("builder %s uses undefined slave %s" \
- % (b['name'], b['slavename']))
- for n in b.get('slavenames', []):
- if n not in slavenames:
- raise ValueError("builder %s uses undefined slave %s" \
- % (b['name'], n))
- if b['name'] in buildernames:
- raise ValueError("duplicate builder name %s"
- % b['name'])
- buildernames.append(b['name'])
-
- # sanity check name (BuilderConfig does this too)
- if b['name'].startswith("_"):
- errmsg = ("builder names must not start with an "
- "underscore: " + b['name'])
- log.err(errmsg)
- raise ValueError(errmsg)
-
- # Fix the dictionnary with default values, in case this wasn't
- # specified with a BuilderConfig object (which sets the same defaults)
- b.setdefault('builddir', buildbot.util.safeTranslate(b['name']))
- b.setdefault('slavebuilddir', b['builddir'])
-
- if b['builddir'] in dirnames:
- raise ValueError("builder %s reuses builddir %s"
- % (b['name'], b['builddir']))
- dirnames.append(b['builddir'])
-
- unscheduled_buildernames = buildernames[:]
- schedulernames = []
- for s in schedulers:
- for b in s.listBuilderNames():
- assert b in buildernames, \
- "%s uses unknown builder %s" % (s, b)
- if b in unscheduled_buildernames:
- unscheduled_buildernames.remove(b)
-
- if s.name in schedulernames:
- # TODO: schedulers share a namespace with other Service
- # children of the BuildMaster node, like status plugins, the
- # Manhole, the ChangeMaster, and the BotMaster (although most
- # of these don't have names)
- msg = ("Schedulers must have unique names, but "
- "'%s' was a duplicate" % (s.name,))
- raise ValueError(msg)
- schedulernames.append(s.name)
-
- if unscheduled_buildernames:
- log.msg("Warning: some Builders have no Schedulers to drive them:"
- " %s" % (unscheduled_buildernames,))
-
- # assert that all locks used by the Builds and their Steps are
- # uniquely named.
- lock_dict = {}
- for b in builders:
- for l in b.get('locks', []):
- if isinstance(l, locks.LockAccess): # User specified access to the lock
- l = l.lockid
- if lock_dict.has_key(l.name):
- if lock_dict[l.name] is not l:
- raise ValueError("Two different locks (%s and %s) "
- "share the name %s"
- % (l, lock_dict[l.name], l.name))
- else:
- lock_dict[l.name] = l
- # TODO: this will break with any BuildFactory that doesn't use a
- # .steps list, but I think the verification step is more
- # important.
- for s in b['factory'].steps:
- for l in s[1].get('locks', []):
- if isinstance(l, locks.LockAccess): # User specified access to the lock
- l = l.lockid
- if lock_dict.has_key(l.name):
- if lock_dict[l.name] is not l:
- raise ValueError("Two different locks (%s and %s)"
- " share the name %s"
- % (l, lock_dict[l.name], l.name))
- else:
- lock_dict[l.name] = l
-
- if not isinstance(properties, dict):
- raise ValueError("c['properties'] must be a dictionary")
-
- # slavePortnum supposed to be a strports specification
- if type(slavePortnum) is int:
- slavePortnum = "tcp:%d" % slavePortnum
-
- # now we're committed to implementing the new configuration, so do
- # it atomically
- # TODO: actually, this is spread across a couple of Deferreds, so it
- # really isn't atomic.
-
- d = defer.succeed(None)
-
- self.projectName = projectName
- self.projectURL = projectURL
- self.buildbotURL = buildbotURL
-
- self.properties = Properties()
- self.properties.update(properties, self.configFileName)
-
- self.status.logCompressionLimit = logCompressionLimit
- self.status.logCompressionMethod = logCompressionMethod
- self.status.logMaxSize = logMaxSize
- self.status.logMaxTailSize = logMaxTailSize
- # Update any of our existing builders with the current log parameters.
- # This is required so that the new value is picked up after a
- # reconfig.
- for builder in self.botmaster.builders.values():
- builder.builder_status.setLogCompressionLimit(logCompressionLimit)
- builder.builder_status.setLogCompressionMethod(logCompressionMethod)
- builder.builder_status.setLogMaxSize(logMaxSize)
- builder.builder_status.setLogMaxTailSize(logMaxTailSize)
-
- if mergeRequests is not None:
- self.botmaster.mergeRequests = mergeRequests
- if prioritizeBuilders is not None:
- self.botmaster.prioritizeBuilders = prioritizeBuilders
-
- self.buildCacheSize = buildCacheSize
- self.eventHorizon = eventHorizon
- self.logHorizon = logHorizon
- self.buildHorizon = buildHorizon
-
- # self.slaves: Disconnect any that were attached and removed from the
- # list. Update self.checker with the new list of passwords, including
- # debug/change/status.
- d.addCallback(lambda res: self.loadConfig_Slaves(slaves))
-
- # self.debugPassword
- if debugPassword:
- self.checker.addUser("debug", debugPassword)
- self.debugPassword = debugPassword
-
- # self.manhole
- if manhole != self.manhole:
- # changing
- if self.manhole:
- # disownServiceParent may return a Deferred
- d.addCallback(lambda res: self.manhole.disownServiceParent())
- def _remove(res):
- self.manhole = None
- return res
- d.addCallback(_remove)
- if manhole:
- def _add(res):
- self.manhole = manhole
- manhole.setServiceParent(self)
- d.addCallback(_add)
-
- # add/remove self.botmaster.builders to match builders. The
- # botmaster will handle startup/shutdown issues.
- d.addCallback(lambda res: self.loadConfig_Builders(builders))
-
- d.addCallback(lambda res: self.loadConfig_status(status))
-
- # Schedulers are added after Builders in case they start right away
- d.addCallback(lambda res: self.loadConfig_Schedulers(schedulers))
- # and Sources go after Schedulers for the same reason
- d.addCallback(lambda res: self.loadConfig_Sources(change_sources))
-
- # self.slavePort
- if self.slavePortnum != slavePortnum:
- if self.slavePort:
- def closeSlavePort(res):
- d1 = self.slavePort.disownServiceParent()
- self.slavePort = None
- return d1
- d.addCallback(closeSlavePort)
- if slavePortnum is not None:
- def openSlavePort(res):
- self.slavePort = strports.service(slavePortnum,
- self.slaveFactory)
- self.slavePort.setServiceParent(self)
- d.addCallback(openSlavePort)
- log.msg("BuildMaster listening on port %s" % slavePortnum)
- self.slavePortnum = slavePortnum
-
- log.msg("configuration update started")
- def _done(res):
- self.readConfig = True
- log.msg("configuration update complete")
- d.addCallback(_done)
- d.addCallback(lambda res: self.botmaster.maybeStartAllBuilds())
- return d
-
- if buildbot_dir:
- basedir = buildbot_dir
- else:
- if PKGDATADIR:
- basedir = os.path.join(PKGDATADIR, 'buildbot')
- else:
- basedir = os.path.join(SRCDIR, 'buildbot')
- os.chdir(basedir)
- if not os.path.exists(os.path.join(basedir, 'builddir')):
- os.makedirs(os.path.join(basedir, 'builddir'))
- master_cfg_path = mastercfgfile
-
- JhBuildMaster(basedir, master_cfg_path).setServiceParent(application)
-
- JhBuildbotApplicationRunner.application = application
- JhBuildbotApplicationRunner(options).run()
-
- def stop(self, config, pidfile):
- try:
- pid = int(file(pidfile).read())
- except:
- raise FatalError(_('failed to get buildbot PID'))
-
- os.kill(pid, signal.SIGTERM)
-
- def reload_server_config(self, config, pidfile):
- try:
- pid = int(file(pidfile).read())
- except:
- raise FatalError(_('failed to get buildbot PID'))
-
- os.kill(pid, signal.SIGHUP)
-
+ raise FatalError(_('buildbot commands are no longer supported'))
register_command(cmd_bot)
-
diff --git a/jhbuild/config.py b/jhbuild/config.py
index c4c9b513..d911c92d 100644
--- a/jhbuild/config.py
+++ b/jhbuild/config.py
@@ -55,10 +55,7 @@ _known_keys = [ 'moduleset', 'modules', 'skip', 'tags', 'prefix',
'copy_dir', 'export_dir', 'module_checkout_mode', 'build_policy',
'trycheckout', 'min_age', 'nopoison', 'module_nopoison',
'forcecheck', 'makecheck_advisory', 'quiet_mode',
- 'progress_bar', 'module_extra_env', 'jhbuildbot_master',
- 'jhbuildbot_slavename', 'jhbuildbot_password',
- 'jhbuildbot_svn_commits_box', 'jhbuildbot_slaves_dir',
- 'jhbuildbot_dir', 'jhbuildbot_mastercfg',
+ 'progress_bar', 'module_extra_env',
'use_local_modulesets', 'ignore_suggests', 'modulesets_dir',
'mirror_policy', 'module_mirror_policy', 'dvcs_mirror_dir',
'shallow_clone', 'build_targets', 'cmakeargs', 'module_cmakeargs',
@@ -246,8 +243,7 @@ class Config:
for path_key in ('checkoutroot', 'buildroot', 'top_builddir',
'tinderbox_outputdir', 'tarballdir', 'copy_dir',
- 'jhbuildbot_slaves_dir', 'jhbuildbot_dir',
- 'jhbuildbot_mastercfg', 'modulesets_dir',
+ 'modulesets_dir',
'dvcs_mirror_dir', 'static_analyzer_outputdir',
'prefix'):
if config.get(path_key):
diff --git a/jhbuild/defaults.jhbuildrc b/jhbuild/defaults.jhbuildrc
index 1bc3888c..6820d994 100644
--- a/jhbuild/defaults.jhbuildrc
+++ b/jhbuild/defaults.jhbuildrc
@@ -205,20 +205,6 @@ noxvfb = False
# arguments to pass to xvfb
xvfbargs = ''
-# options for jhbuildbot slaves
-jhbuildbot_master = 'build.gnome.org:9070'
-jhbuildbot_slavename = None
-jhbuildbot_password = None
-
-# options for jhbuildbot master
-jhbuildbot_svn_commits_box = None
-try:
- jhbuildbot_slaves_dir = os.path.abspath(".")
-except OSError:
- jhbuildbot_slaves_dir = '.'
-jhbuildbot_dir = None
-jhbuildbot_mastercfg = "master.cfg"
-
# whether to use a local copy of modulesets (instead of fetching them from svn)
use_local_modulesets = False
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]