# -*- python -*-
# ex: set filetype=python:

from buildbot.plugins import *

NUM_BUILDERS = 2

c = BuildmasterConfig = {}

####### WORKERS

c['workers'] = [worker.Worker("example-worker", "pass")]
c['protocols'] = {'pb': {'port': 9989}}


####### CHANGESOURCES

c['change_source'] = []
c['change_source'].append(changes.GitPoller(
        'https://github.com/buildbot/hello-world.git',  # the buildbot clone of pyflakes
        workdir='gitpoller-workdir', branch='master',
        pollinterval=300))

####### SCHEDULERS

c['schedulers'] = []
c['schedulers'].append(schedulers.SingleBranchScheduler(
                            name="all",
                            change_filter=util.ChangeFilter(branch='master'),
                            treeStableTimer=None,
                            builderNames=["runtests" + str(i) for i in range(NUM_BUILDERS)]))

c['schedulers'].append(schedulers.ForceScheduler(
                            name="force",
                            builderNames=["runtests", "slowruntests"]))

c['schedulers'].append(schedulers.ForceScheduler(
    name="custom",
    builderNames=["runtests"],
    buttonName="Start Custom Build",
    codebases = [util.CodebaseParameter(
        codebase='', project=None, 
        branch=util.ChoiceStringParameter(
            name="branch",
            label="Branch",
            strict=False,
            choices=["master", "dev"],
            autopopulate={
              'master': {
                'build_name': 'master',
              },
              'dev': {
                'build_name': 'dev',
              }
            }
    ))],
    properties=[
        util.StringParameter(
            name="build_name",
            label="Name of the Build release.",
            default="")]))

####### BUILDERS

factory = util.BuildFactory()
factory.addStep(steps.Git(repourl='https://github.com/buildbot/hello-world.git',
                          mode='incremental'))
factory.addStep(steps.ShellCommand(command=["trial", "hello"],
                                   env={"PYTHONPATH": "."}))

slowfactory = util.BuildFactory()
slowfactory.addStep(steps.Git(repourl='https://github.com/buildbot/hello-world.git',
                              mode='incremental'))
slowfactory.addStep(steps.ShellCommand(command=["trial", "hello"],
                                       env={"PYTHONPATH": "."}))
slowfactory.addStep(steps.ShellCommand(command=["sleep", "10"]))


c['builders'] = []
c['builders'].append(
    util.BuilderConfig(name="runtests",
                       tags=['runt'],
                       workernames=["example-worker"],
                       factory=factory))
c['builders'].append(
    util.BuilderConfig(name="slowruntests",
                       tags=['slow', 'runt'],
                       workernames=["example-worker"],
                       factory=slowfactory))

for i in range(NUM_BUILDERS):
    c['builders'].append(
        util.BuilderConfig(name="runtests" + str(i),
                           tags=[str(i), 'runt'],
                           workernames=["example-worker"],
                           factory=factory))


####### PROJECT IDENTITY

c['title'] = "Pyflakes"
c['titleURL'] = "https://launchpad.net/pyflakes"
c['buildbotURL'] = "http://localhost:8011/"

# we're not using the default port so that it would not accidentally conflict
# with any development instances of buildbot on developer machines
c['www'] = dict(port=8011,
                # graphql={},
                change_hook_dialects={'base': True},
                plugins=dict(waterfall_view={}, console_view={}, grid_view={}, badges={}),
                ui_default_config={'Builders.buildFetchLimit': 201})

c['buildbotNetUsageData'] = None

####### DB URL

c['db'] = {
    'db_url': "sqlite:///state.sqlite",
}

authz = util.Authz(
  allowRules=[
  ],
  roleMatchers=[
    util.RolesFromEmails(admins=["my@email.com"])
  ]
)
auth=util.UserPasswordAuth({'my@email.com': b'mypass'})
c['www']['auth'] = auth
c['www']['authz'] = authz

# in order to share this snippet in the doc, we load mydashboard.py using exec
exec(open("mydashboard.py").read())
