yocto-autobuilder2/schedulers.py
Joshua Lock 4fd189ab38 Initial prototype of using yocto-autobuilder-helper scripts
Initial prototype of using yocto-autobuilder-helper scripts from vanilla
buildbot to replicate yocto-autobuilder configuration.

* README.md is updated to describe goals and approach
* TODO contains known issues and work items, TODO: comments in the code
  point to specific locations of work

Signed-off-by: Joshua Lock <joshua.g.lock@intel.com>
2018-02-22 10:38:19 +00:00

146 lines
5.0 KiB
Python

from buildbot.plugins import schedulers as sched
from buildbot.plugins import util
from yoctoab import config
schedulers = []
def create_repo_inputs(reponame):
"""
Given the name of a repository in yoctoab.config's repo dict creates
StringParameter inputs to allow specification of alternative uri, branch
and commit/hash values
"""
# TODO: formatting? Typically had branch & commit on same line?
repo = util.StringParameter("repo_{}".format(reponame),
label="{} repository".format(reponame),
default=config.repos[reponame][0])
branch = util.StringParameter("branch_{}".format(reponame),
label="Branch",
default=config.repos[reponame][1])
commit = util.StringParameter("commit_{}".format(reponame),
label="Tag/Commit hash",
default="HEAD")
return [repo, branch, commit]
def repos_for_builder(buildername):
"""
Returns a list of additional properties for a scheduler, a list of
StringParameter allowing all of the repositories used by the
builder/scheduler to be customised
"""
parameters = []
repos = config.buildertorepos.get(buildername)
if not repos:
repos = config.buildertorepos["default"]
for repo in repos:
inputs = create_repo_inputs(repo)
parameters = parameters + inputs
return parameters
def props_for_builder(builder):
"""
Generate an appropriate list of properties to use on a builder-specific
scheduler
"""
props = []
if builder == 'build-appliance':
props.append(util.StringParameter(
name="buildappsrcrev",
# TODO: is this statement still true?
label="""Build appliance src revision. Use DEFAULT to take the
srcrev currently in the recipe:""",
default="None",
))
if builder in ['build-appliance', 'buildtools']:
props.append(util.ChoiceStringParameter(
name="deploy_artifacts",
label="Do we want to deploy artifacts? ",
choices=["False", "True"],
default="False"
))
props = props + repos_for_builder(builder)
return props
for builder in config.triggered_builders:
schedulers.append(sched.ForceScheduler(
name=builder,
builderNames=[builder],
reason=util.StringParameter(
name="reason",
label="""Reason (please note the reason for triggering the
build and any expectations for the build's outcome:""",
required=False),
properties=props_for_builder(builder),
buttonName="Force Build"))
# nightly builder triggers various other builders
wait = sched.Triggerable(name="wait",
builderNames=config.trigger_builders_wait)
schedulers.append(wait)
nowait = sched.Triggerable(name="nowait",
builderNames=config.trigger_builders_nowait)
schedulers.append(nowait)
schedulers.append(sched.ForceScheduler(
name="nightly",
builderNames=["nightly"],
buttonName="Start Nightly Build",
reason=util.StringParameter(
name="reason",
label="""Reason (please note the reason for triggering the build and
any expectations for the build's outcome:""",
required=False),
properties=[
util.ChoiceStringParameter(
name="is_release",
label="Generate a release?",
choices=["False", "True"],
default="False"),
util.ChoiceStringParameter(
name="poky_name",
label="Name of the Poky release.",
choices=config.releases,
default=""),
util.ChoiceStringParameter(
name="is_milestone",
label="Is the release a milestone release?",
choices=["False", "True"],
default="False"),
util.StringParameter(
name="poky_number",
label="Poky Release Number (10.0.0, 11.0.1 etc.)"),
util.StringParameter(
name="yocto_number",
label="Yocto Project Release Number (1.5, 1.6 etc.)"),
util.ChoiceStringParameter(
name="milestone_number",
label="Milestone number",
choices=["", "M1", "M2", "M3", "M4"],
default=""
),
util.ChoiceStringParameter(
name="rc_number",
label="Release candidate number",
choices=["", "rc1", "rc2", "rc3", "rc4", "rc5", "rc6", "rc7",
"rc8", "rc9"],
default=""),
util.ChoiceStringParameter(
name="send_email",
label="Send QA alert emails?",
choices=["False", "True"],
default="False"),
util.ChoiceStringParameter(
name="deploy_artifacts",
label="Do we want to deploy artifacts? ",
choices=["False", "True"],
default="False")
]+repos_for_builder("nightly")))