[Buildbot-devel] required fields forcing a build

Dustin J. Mitchell dustin at v.igoro.us
Sun Sep 4 15:59:22 UTC 2011


On Sun, Sep 4, 2011 at 5:12 AM, Todd Cooper <todd_cooper at yahoo.com> wrote:
> Sounds a bit elaborate.  I like kiss, keep it stupid simple.

In this case, what we have is KISS, and it's inadequate.  I'm
particularly sad about the force-all-builds screen, which would make
any UI designer throw their macbook across the room :)

> I was think more just being felxible enough to make each parameter flexible.
> I do think the force build needs to be more flexible, but should not not be
> more with a template?

Yes, you're right -- a template makes a lot more sense than
dynamically creating a form.

> I so see the need for multiple schedulers with artibrary slaves.  I even see
> a build forced on a particular slave.

This is where I'd "overrule" you with my experience as maintainer --
folks use forced builds for an wide array of purposes, and have had to
hack around its limitations.  There's some benefit to forcing a build
on a particular slave as a debugging tool, but I think that should be
separate from the web status (since it's not compatible with the
current buildset/buildrequest system).

> The way the GUI is now seems somewhat sufficient in that you click on the
> column head.

So let me lay out what I'm envisioning here:

The ForceScheduler specifies a set of builders, and a set of
buildrequest parameters.  Each of these can either be hard-wired
(e.g., always build the 'beta' branch) or input from the web in
various ways (e.g., text field with optional regexp validation, or
select box).  Optionally, you can specify a template for the page.
So:

  s = ForceScheduler(
    name='smoketest',
    parameters=dict(
        branch=TextParameter(),
        revision='HEAD',
        properties=dict(
            run_db_tests=SelectParameter({ 'Yes' : 1, 'No' : 0 },
default='Yes'),
        ),
        repository='git://...')
    builderNames=[ 'smoke_linux', 'smoke_osx', 'smoke_win' ])

The WebStatus would grow a more advanced /schedulers URI, listing all
schedulers.  /schedulers/smoketest would contain general info about
the scheduler, while /schedulers/smoketest/force would render the
force-build page for that scheduler -- either dynamically generated
from the given parameters, or rendered from a Jinja2 template
specified in the scheduler.

A few future-oriented thoughts, before I go:
 - The above leaves open the option of adding a slave "hint" to
BuildRequests at some point in the future, and hinting in the
ForceScheduler.  I don't want to do that yet, though.
 - WebStatus is increasingly becoming a built-in part of Buildbot.  At
some point it will move out of c['status'].  So don't worry about
tying it down further.

Dustin




More information about the devel mailing list