def __init__(self, eventtype=None, eventtype_re=None, eventtype_fn=None, **kw):
        ChangeFilter.__init__(self, **kw)

        self.checks.update(self.createChecks((eventtype, eventtype_re, eventtype_fn, "prop:event.type")))
        # for branch change filter, we take the real gerrit branch
        # instead of the change's branch, which is also used as a grouping key
        if "branch" in self.checks:
            self.checks["prop:event.change.branch"] = self.checks["branch"]
            del self.checks["branch"]
Example #2
0
def _ComputeSchedulers(builders):
    scheduler_to_builders = {}
    for builder_name, builder_data in builders['builders'].items():
        scheduler_names = builder_data.get('schedulers', [])
        if 'scheduler' in builder_data:
            scheduler_names.append(builder_data['scheduler'])
        for scheduler_name in scheduler_names:
            if scheduler_name:
                if scheduler_name not in builders['schedulers']:
                    raise ValueError('unknown scheduler "%s"' % scheduler_name)
                scheduler_to_builders.setdefault(scheduler_name,
                                                 []).append(builder_name)

    schedulers = []
    for scheduler_name, scheduler_values in builders['schedulers'].items():
        scheduler_type = scheduler_values['type']
        builder_names = scheduler_to_builders[scheduler_name]

        if scheduler_type == 'git_poller':
            # git_poller pollers group changes, so we match on our specific repository
            # to ensure that we only pick up changes from our poller.
            schedulers.append(
                SingleBranchScheduler(
                    name=scheduler_name,
                    change_filter=ChangeFilter(
                        repository=scheduler_values['git_repo_url'],
                        branch=scheduler_values.get('branch', 'master'),
                    ),
                    treeStableTimer=scheduler_values.get(
                        'treeStableTimer', 60),
                    builderNames=builder_names))

        elif scheduler_type == 'repo_poller':
            # repo_poller pollers punt changes that use the scheduler name as their
            # category (see _ComputeChangeSourceAndTagComparator). Matching on this
            # ensures that we only match changes from our poller.
            schedulers.append(
                SingleBranchScheduler(name=scheduler_name,
                                      change_filter=ChangeFilter(
                                          category=str(scheduler_name), ),
                                      treeStableTimer=scheduler_values.get(
                                          'treeStableTimer', 60),
                                      builderNames=builder_names))

        elif scheduler_type == 'cron':
            schedulers.append(
                Nightly(name=scheduler_name,
                        branch='master',
                        minute=scheduler_values['minute'],
                        hour=scheduler_values['hour'],
                        builderNames=builder_names))

        else:
            raise ValueError('unsupported scheduler type "%s"' %
                             scheduler_type)

    return schedulers
Example #3
0
    def __init__(self,
                 eventtype=None, eventtype_re=None, eventtype_fn=None, **kw):
        ChangeFilter.__init__(self, **kw)

        self.checks.update(
            self.createChecks(
                (eventtype, eventtype_re, eventtype_fn, "prop:event.type"),
            ))
        # for branch change filter, we take the real gerrit branch
        # instead of the change's branch, which is also used as a grouping key
        if "branch" in self.checks:
            self.checks["prop:event.change.branch"] = self.checks["branch"]
            del self.checks["branch"]
def get_schedulers():
    first_phase = phases[0]
    last_phase = phases[-1]

    # The VC scheduler initiates the first phase.
    # Each phase, in turn, triggers the next phase,
    # until the final phase.

    for phase in phases:
        my_filter = ChangeFilter(filter_fn=_tracked_projects)
        phase_name = 'phase%d' % phase['number']
        if phase == first_phase:
            delay=120
        else:
            delay=15
            my_filter = ChangeFilter(category = phase_name)
        
        yield basic.AnyBranchScheduler(
            name = phase_name, treeStableTimer=delay,
            change_filter = my_filter,
            builderNames = ['phase%d - %s' % (phase['number'], phase['name'])],
            )

    # Add triggers for initiating the builds in each phase.
    for phase in phases:

        # Split the phase builders into separate stages.
        split_stages = get_phase_stages(phase)
        for i, (normal, experimental) in enumerate(split_stages):
            # Add the normal trigger, if used.
            if normal:
                yield triggerable.Triggerable(
                    name = 'phase%d-stage%d' % (phase['number'], i),
                    builderNames = [b['name'] for b in normal])

            # Add the experimental trigger, if used.
            if experimental:
                yield triggerable.Triggerable(
                    name = 'phase%d-stage%d-experimental' % (phase['number'],
                                                             i),
                    builderNames = [b['name'] for b in experimental])

    # Add a final trigger to trigger the validated build scheduler.
    phase_name = 'GoodBuild'
    my_filter = ChangeFilter(category = phase_name)
    yield basic.AnyBranchScheduler(
            name = phase_name, treeStableTimer=5,
            builderNames = ['Validated Build',],
            change_filter = my_filter,
            )
Example #5
0
def get_schedulers(builders):
    platforms = ["linux", "osx", "win"]
    schedulers = []

    for platform in platforms:
        platform_builders = [b for b in builders if platform in b.name]

        # Unit tests for this platform
        unit_builders = [b.name for b in platform_builders if "unit" in b.name]
        master_unit = SingleBranchScheduler(
            name="%s-master-unit" % platform,
            change_filter=ChangeFilter(branch="master"),
            treeStableTimer=60,
            builderNames=unit_builders)

        acceptance_builders = [
            b.name for b in platform_builders if "acceptance" in b.name
        ]
        master_acceptance = Dependent(name="%s-master-acceptance" % platform,
                                      upstream=master_unit,
                                      builderNames=acceptance_builders)

        schedulers.extend([master_unit, master_acceptance])

    return schedulers
Example #6
0
    def __init__(self, name, builderNames, properties={}, reason='',
                 createAbsoluteSourceStamps=False, onlyIfChanged=False,
                 branch=NoBranch, change_filter=None, fileIsImportant=None,
                 onlyImportant=False, **kwargs):
        base.BaseScheduler.__init__(self, name, builderNames, properties,
                                    **kwargs)

        # tracking for when to start the next build
        self.lastActuated = None

        # A lock to make sure that each actuation occurs without interruption.
        # This lock governs actuateAt, actuateAtTimer, and actuateOk
        self.actuationLock = defer.DeferredLock()
        self.actuateOk = False
        self.actuateAt = None
        self.actuateAtTimer = None

        self.reason = util.ascii2unicode(reason % {'name': name})
        self.branch = branch
        self.change_filter = ChangeFilter.fromSchedulerConstructorArgs(change_filter=change_filter)
        self.createAbsoluteSourceStamps = createAbsoluteSourceStamps
        self.onlyIfChanged = onlyIfChanged
        if fileIsImportant and not callable(fileIsImportant):
            config.error(
                "fileIsImportant must be a callable")
        self.fileIsImportant = fileIsImportant
        # If True, only important changes will be added to the buildset.
        self.onlyImportant = onlyImportant
        self._reactor = reactor  # patched by tests
Example #7
0
def getSchedulers():
    return [
        AnyBranchScheduler(
            name="flocker",
            treeStableTimer=5,
            builderNames=BUILDERS,
            # Only build certain branches because problems arise when we build
            # many branches such as queues and request limits.
            change_filter=ChangeFilter(branch_fn=build_automatically),
            codebases={
                "flocker": {
                    "repository": GITHUB + b"/flocker"
                },
            },
        ),
        ForceScheduler(
            name="force-flocker",
            codebases=[
                CodebaseParameter(
                    "flocker",
                    branch=StringParameter("branch", default="master",
                                           size=80),
                    repository=FixedParameter("repository",
                                              default=GITHUB + b"/flocker"),
                ),
            ],
            properties=[
                report_expected_failures_parameter,
            ],
            builderNames=BUILDERS,
        ),
    ]
Example #8
0
    def __init__(self, name, builderNames, reason='',
                 createAbsoluteSourceStamps=False, onlyIfChanged=False,
                 branch=NoBranch, change_filter=None, fileIsImportant=None,
                 onlyImportant=False, **kwargs):
        super().__init__(name, builderNames, **kwargs)

        # tracking for when to start the next build
        self.lastActuated = None

        # A lock to make sure that each actuation occurs without interruption.
        # This lock governs actuateAt, actuateAtTimer, and actuateOk
        self.actuationLock = defer.DeferredLock()
        self.actuateOk = False
        self.actuateAt = None
        self.actuateAtTimer = None

        self.reason = util.bytes2unicode(reason % {'name': name})
        self.branch = branch
        self.change_filter = ChangeFilter.fromSchedulerConstructorArgs(
            change_filter=change_filter)
        self.createAbsoluteSourceStamps = createAbsoluteSourceStamps
        self.onlyIfChanged = onlyIfChanged
        if fileIsImportant and not callable(fileIsImportant):
            config.error(
                "fileIsImportant must be a callable")
        self.fileIsImportant = fileIsImportant
        # If True, only important changes will be added to the buildset.
        self.onlyImportant = onlyImportant
        self._reactor = reactor  # patched by tests
Example #9
0
def any_branch_scheduler():
    return AnyBranchScheduler(
        name=util.env.BOOTSTRAP_SCHEDULER_NAME,
        treeStableTimer=5,
        change_filter=ChangeFilter(branch_re='.+'),  # build only branches
        builderNames=[util.env.BOOTSTRAP_BUILDER_NAME],
        reason='branch updated',
        properties={'reason': 'branch updated'})
Example #10
0
    def getChangeFilter(self, branch, branches, change_filter, categories):
        if branch is NotABranch and not change_filter:
            config.error("the 'branch' argument to SingleBranchScheduler is " +
                         "mandatory unless change_filter is provided")
        elif branches is not NotABranch:
            config.error("the 'branches' argument is not allowed for " +
                         "SingleBranchScheduler")

        return ChangeFilter.fromSchedulerConstructorArgs(
            change_filter=change_filter, branch=branch, categories=categories)
Example #11
0
def FilterNewSpec(repo, builder, branch='master'):
    """Create a new ChangeFilter that monitors the creation of new spec files.

  Args:
    repo: The repository to watch.
    builder: The name of the cbuildbot config to watch.
    branch: The branch that the specified builder is building on.
  """
    prefix = 'Automatic: Start %s %s ' % (builder, branch)
    return ChangeFilter(lambda change: change.comments.startswith(prefix),
                        repository=repo)
Example #12
0
    def watch_paths(self, paths):
        """
        Start the build if an incoming change-set contains files that begin with the given
        directory names.

        """
        BuildmasterConfig['schedulers'].append(SingleBranchScheduler(
            builderNames=[self.name],
            change_filter=ChangeFilter(filter_fn=partial(is_dir_in_change, paths)),
            name=scheduler_name(self, 'filter-' + hashify(''.join(paths))),
            treeStableTimer=60))
def Update(c):
    c['schedulers'].append(
        SingleBranchScheduler(name='chromium_scheduler',
                              change_filter=ChangeFilter(project='chromium',
                                                         branch='master'),
                              treeStableTimer=60,
                              builderNames=[
                                  'Win Builder',
                                  'Mac Builder',
                                  'Linux Builder',
                              ]), )
    specs = [
        {
            'name': 'Win Builder',
            'category': 'win'
        },
        {
            'name': 'Win7 Tester',
            'category': 'win'
        },
        {
            'name': 'Win8 Tester',
            'category': 'win'
        },
        {
            'name': 'Win10 Tester',
            'category': 'win'
        },
        {
            'name': 'Mac Builder',
            'category': 'mac'
        },
        {
            'name': 'Mac Tester',
            'category': 'mac'
        },
        {
            'name': 'Linux Builder',
            'category': 'linux'
        },
        {
            'name': 'Linux Tester',
            'category': 'linux'
        },
    ]

    c['builders'].extend([{
        'name': spec['name'],
        'factory': m_remote_run('chromium'),
        'category': spec['category'],
        'notify_on_missing': True,
    } for spec in specs])
Example #14
0
    def getChangeFilter(self, branch, branches, change_filter, categories):
        if branch is NotABranch and not change_filter:
            config.error(
                "the 'branch' argument to SingleBranchScheduler is " +
                "mandatory unless change_filter is provided")
        elif branches is not NotABranch:
            config.error(
                "the 'branches' argument is not allowed for " +
                "SingleBranchScheduler")

        return ChangeFilter.fromSchedulerConstructorArgs(
            change_filter=change_filter, branch=branch,
            categories=categories)
Example #15
0
    def watch(self, url, branch):
        repo_url = '%s/%s' % (url, branch)

        if not has_svn_change_source(repo_url):
            BuildmasterConfig['change_source'].append(SVNPoller(
                svnurl=repo_url,
                pollInterval=300 + randrange(0, 60),
                histmax=5))

        BuildmasterConfig['schedulers'].append(SingleBranchScheduler(
            name=scheduler_name(self, 'svn-' + hashify(repo_url)),
            treeStableTimer=60,
            builderNames=[self.name],
            change_filter=ChangeFilter(repository=repo_url)))
Example #16
0
def FilterNewSpec(repo, builder, branch='master'):
  """Create a new ChangeFilter that monitors the creation of new spec files.

  Args:
    repo: The repository to watch.
    builder: The name of the cbuildbot config to watch.
    branch: The branch that the specified builder is building on.
  """
  def checkChange(change):
    for line in change.comments.splitlines():
      if line.startswith('Automatic: Start %s %s ' % (builder, branch)):
        return True
    return False
  return ChangeFilter(checkChange, repository=repo)
Example #17
0
lan_buildslaves.append("anerist-slave")

all_publican_builders = [] 
all_translation_builders = {}
c['schedulers'] = []
c['change_source'] = []
c['builders'] = []
defined_factories = {}

pp = {
    'name': 'Placeholder Project',
    'uri': 'https://gitlab.randomuser.org/pete/placeholder.git',
    'command': all
    'branches' = ChangeFilter(
        branch_fn = [
            'master'
            ]
        )

   }
defined_factories['pp_maker_factory'] = BuildFactory(
        _make_factory_step_generator(pp['name'], pp['uri'], pp['command'] )
    )
c['change_source'].append(GitPoller(
        pp['uri'], 
        workdir='/srv/buildbot',
        branches=pp['branches'],
        pollinterval=random.randint(300,600)
        ))
c['builders'].append(
    BuilderConfig(
Example #18
0
def ros_testbuild(c,
                  job_name,
                  url,
                  branch,
                  distro,
                  arch,
                  rosdistro,
                  machines,
                  othermirror,
                  keys,
                  token=None):

    # Change source is either GitPoller or GitPRPoller
    # TODO: make this configurable for svn/etc
    project_name = ''
    if token:
        project_name = '_'.join([job_name, rosdistro, 'prtestbuild'])
        c['change_source'].append(
            GitPRPoller(
                name=rosdistro + "_pr_poller",
                repourl=url,  # this may pose some problems
                project=project_name,
                token=token,
                pollInterval=15))
        # parse repo_url git@github:author/repo.git to repoOwner, repoName
        r_owner, r_name = (url.split(':')[1])[:-4].split('/')
        c['status'].append(
            status.GitHubStatus(token=token,
                                repoOwner=r_owner,
                                repoName=r_name))
    else:
        project_name = '_'.join([job_name, rosdistro, 'testbuild'])
        c['change_source'].append(
            NamedGitPoller(repourl=url,
                           name=rosdistro,
                           branch=branch,
                           project=project_name))

    c['schedulers'].append(
        basic.SingleBranchScheduler(
            name=project_name,
            builderNames=[
                project_name,
            ],
            change_filter=ChangeFilter(project=project_name)))

    # Directory which will be bind-mounted
    binddir = '/tmp/' + project_name

    f = BuildFactory()
    # Remove any old crud in /tmp folder
    f.addStep(ShellCommand(command=['rm', '-rf', binddir], hideStepIf=success))
    # Check out repository (to /tmp)
    f.addStep(
        Git(repourl=util.Property('repository', default=url),
            branch=util.Property('branch', default=branch),
            alwaysUseLatest=True,
            mode='full',
            workdir=binddir + '/src/' + job_name))
    # Download testbuild.py script from master
    f.addStep(
        FileDownload(name=job_name + '-grab-script',
                     mastersrc='scripts/testbuild.py',
                     slavedest=Interpolate('%(prop:workdir)s/testbuild.py'),
                     hideStepIf=success))
    # Update the cowbuilder
    f.addStep(
        ShellCommand(command=['cowbuilder-update.py', distro, arch] + keys,
                     hideStepIf=success))
    # Make and run tests in a cowbuilder
    f.addStep(
        TestBuild(name=job_name + '-build',
                  command=[
                      'sudo', 'cowbuilder', '--execute',
                      Interpolate('%(prop:workdir)s/testbuild.py'),
                      '--distribution', distro, '--architecture', arch,
                      '--bindmounts', binddir, '--basepath',
                      '/var/cache/pbuilder/base-' + distro + '-' + arch +
                      '.cow', '--override-config', '--othermirror',
                      othermirror, '--', binddir, rosdistro
                  ],
                  logfiles={'tests': binddir + '/testresults'},
                  descriptionDone=['make and test', job_name]))
    c['builders'].append(
        BuilderConfig(name=project_name, slavenames=machines, factory=f))
    # return the name of the job created
    return project_name
def Update(c):
    hourly_builders = [
        'Android Builder',
        'Android Builder (dbg)',
        'Android Builder ARM64 (dbg)',
        'Linux Builder',
        'Mac Builder',
    ]
    win_builders = [
        'Win Builder',
    ]
    all_builders = hourly_builders + win_builders

    c['schedulers'].extend([
        SingleBranchScheduler(name='webrtc_scheduler',
                              change_filter=ChangeFilter(project='webrtc',
                                                         branch='master'),
                              treeStableTimer=0,
                              builderNames=all_builders),
        Periodic(name='hourly_periodic_scheduler',
                 periodicBuildTimer=60 * 60,
                 builderNames=hourly_builders),
        Periodic(name='4hours_periodic_scheduler',
                 periodicBuildTimer=4 * 60 * 60,
                 builderNames=win_builders),
    ])

    specs = [
        {
            'name': 'Win Builder',
            'category': 'win'
        },
        {
            'name': 'Win7 Tester',
            'category': 'win'
        },
        {
            'name': 'Win8 Tester',
            'category': 'win'
        },
        {
            'name': 'Win10 Tester',
            'category': 'win'
        },
        {
            'name': 'Mac Builder',
            'category': 'mac'
        },
        {
            'name': 'Mac Tester',
            'category': 'mac'
        },
        {
            'name': 'Linux Builder',
            'category': 'linux'
        },
        {
            'name': 'Linux Tester',
            'category': 'linux'
        },
        {
            'name': 'Android Builder',
            'category': 'android'
        },
        {
            'name': 'Android Builder (dbg)',
            'category': 'android'
        },
        {
            'name': 'Android Builder ARM64 (dbg)',
            'category': 'android',
            'slavebuilddir': 'android_arm64',
        },
        {
            'name': 'Android Tests (dbg) (K Nexus5)',
            'category': 'android'
        },
        {
            'name': 'Android Tests (dbg) (L Nexus5)',
            'category': 'android'
        },
        {
            'name': 'Android Tests (dbg) (L Nexus6)',
            'category': 'android'
        },
        {
            'name': 'Android Tests (dbg) (L Nexus7.2)',
            'category': 'android'
        },
        {
            'name': 'Android Tests (dbg) (L Nexus9)',
            'category': 'android'
        },
    ]

    for spec in specs:
        builder_dict = {
            'name': spec['name'],
            'factory': m_remote_run('chromium'),
            'category': spec['category'],
            'notify_on_missing': True,
        }
        if 'slavebuilddir' in spec:
            builder_dict['slavebuilddir'] = spec['slavebuilddir']

        c['builders'].append(builder_dict)
Example #20
0
  def Update(self, c):
    global_schedulers = dict((s.name, s) for s in c['schedulers']
                             if s.name.startswith('global_'))
    assert not (set(global_schedulers) & set(self._schedulers))

    for builder in self._builders:
      # Update the schedulers with the builder.
      schedulers = builder['schedulers']
      if schedulers:
        for scheduler in schedulers:
          if scheduler in global_schedulers:
            global_schedulers[scheduler].builderNames.append(builder['name'])
          else:
            self._schedulers[scheduler]['builders'].append(builder['name'])

      # Construct the category.
      categories = []
      if builder.get('category', None):
        categories.append(builder['category'])
      if builder.get('gatekeeper', None):
        categories.extend(builder['gatekeeper'].split('|'))
      category = '|'.join(categories)

      # Append the builder to the list.
      new_builder = {'name': builder['name'],
                     'factory': self._factories[builder['factory']],
                     'category': category,
                     'auto_reboot': builder['auto_reboot']}
      if builder['builddir']:
        new_builder['builddir'] = builder['builddir']
      if builder['slavebuilddir']:
        new_builder['slavebuilddir'] = builder['slavebuilddir']
      c['builders'].append(new_builder)

    # Process the main schedulers.
    for s_name in self._schedulers:
      scheduler = self._schedulers[s_name]
      if scheduler['type'] == 'Scheduler':
        instance = Scheduler(name=s_name,
                             branch=scheduler['branch'],
                             treeStableTimer=scheduler['treeStableTimer'],
                             builderNames=scheduler['builders'],
                             categories=scheduler['categories'])
        scheduler['instance'] = instance
        c['schedulers'].append(instance)
      elif scheduler['type'] == 'URLScheduler':
        ident = str(uuid.uuid4())
        c['change_source'].append(
          URLPoller(changeurl=scheduler['url'],
                    pollInterval=scheduler['pollInterval'],
                    category=ident,
                    include_revision=scheduler['include_revision']))
        instance = Scheduler(name=s_name,
                             change_filter=ChangeFilter(category=ident),
                             builderNames=scheduler['builders'])
        scheduler['instance'] = instance
        c['schedulers'].append(instance)

    # Process the dependent schedulers.
    for s_name in self._schedulers:
      scheduler = self._schedulers[s_name]
      if scheduler['type'] == 'Dependent':
        c['schedulers'].append(
            Dependent(s_name,
                      self._schedulers[scheduler['parent']]['instance'],
                      scheduler['builders']))

    # Process the triggerable schedulers.
    for s_name in self._schedulers:
      scheduler = self._schedulers[s_name]
      if scheduler['type'] == 'Triggerable':
        c['schedulers'].append(Triggerable(s_name,
                                           scheduler['builders']))

    # Process the periodic schedulers.
    for s_name in self._schedulers:
      scheduler = self._schedulers[s_name]
      if scheduler['type'] == 'Periodic':
        c['schedulers'].append(
            Periodic(s_name,
                     periodicBuildTimer=scheduler['periodicBuildTimer'],
                     builderNames=scheduler['builders']))

    # Process the nightly schedulers.
    for s_name in self._schedulers:
      scheduler = self._schedulers[s_name]
      if scheduler['type'] == 'Nightly':
        c['schedulers'].append(Nightly(s_name,
                                       branch=scheduler['branch'],
                                       hour=scheduler['hour'],
                                       builderNames=scheduler['builders']))
  Args:
      change: a buildbot Change object.
  """
  if change.branch != 'trunk':
    return False
  for path in change.files:
    if path.startswith('syzygy/binaries/'):
      return True
  return False


# Binaries scheduler for Syzygy.
binaries_scheduler = SingleBranchScheduler('syzygy_binaries',
                                           treeStableTimer=0,
                                           change_filter=ChangeFilter(
                                               filter_fn=_BinariesFilter),
                                           builderNames=['Syzygy Smoke Test'])


# Windows binaries smoke-test builder for Syzygy.
smoke_test_factory = win().SyzygySmokeTestFactory()


smoke_test_builder = {
  'name': 'Syzygy Smoke Test',
  'factory': smoke_test_factory,
  'schedulers': 'syzygy_binaries',
  'auto_reboot': False,
  'category': 'official',
}
Example #22
0
def isImportantWin_Server_BusinessWindows(change):
    is_important = False
    for each_file in change.files:
        each_file = each_file.replace("\\","/")
        if each_file.startswith("/"):
            each_file = each_file[1:]
        if each_file.endswith("/"):
            each_file = each_file[:-1]
        #if each_file.startswith("DVDFab/test.txt"):
        if each_file.startswith("monitor_file_path"):
            is_important = True
            break
    return is_important
	
scheduler_win_Server_Business_build = SingleBranchScheduler(name = "win_Server_Business",
                                               change_filter = ChangeFilter(branch_fn=dev_branch_fn_git),
                                               treeStableTimer = 5,
                                               builderNames = ["win_Server_Business"],
                                               fileIsImportant = isImportantWin_Server_BusinessWindows,
                                               onlyImportant = True,
                                               properties={'owner':['*****@*****.**']})	

			
Win_Server_Business_time = timed.Nightly(
					name = 'Win_Server_Business',
					builderNames = ["win_Server_Business"],
					branch = "trunk/goland",
					hour = [200],
					minute = 200,
					dayOfWeek = [0, 1, 2, 3, 4])		
					
Example #23
0
from buildbot.schedulers.basic import AnyBranchScheduler
from buildbot.schedulers.triggerable import Triggerable
from buildbot.changes.filter import ChangeFilter
from buildbot.process.factory import BuildFactory
from buildbot.steps.master import MasterShellCommand
from buildscripts import steps as buildsteps

project = __opts__['project']

c['schedulers'].append(
    AnyBranchScheduler(name=project,
                       change_filter=ChangeFilter(project=project,
                                                  category='default'),
                       builderNames=['{0} source'.format(project)]))

c["schedulers"].append(
    Triggerable(name="{0} packaging".format(project),
                builderNames=["deb_packaging", "rpm_packaging"]))


def push_to_github(__opts__):
    cwd = 'sandboxes/{0}/svn2git'.format(project)
    return [
        MasterShellCommand(command="""
                    cd sandboxes/{0}/svn2git
                    svn2git --rebase --verbose
                    git push origin master""".format(project),
                           description='Pushing commit to GitHub',
                           descriptionDone='Push commit to GitHub (trunk)'),
    ]
Example #24
0
c['properties'] = {
    'version': SCHAT_VERSION,
    'version_legacy': SCHAT_VERSION_LEGACY,
    'suffix': '-dev',
}

c['schedulers'] = [
    ForceScheduler(name='force',
                   builderNames=[
                       'lucid', 'lucid64', 'win32', 'win32-legacy', 'macosx',
                       'macosx-legacy', 'source', 'ppa', 'ppa-dev', 'obs',
                       'obs-dev', 'precise', 'precise64', 'release', 'beta'
                   ]),
    SingleBranchScheduler(name='trunk',
                          change_filter=ChangeFilter(branch=None),
                          treeStableTimer=60,
                          builderNames=[
                              'lucid', 'lucid64', 'win32', 'source', 'precise',
                              'precise64'
                          ])
]

svn_co = [
    SVN(mode='full',
        method='clobber',
        repourl='https://schat.googlecode.com/svn/trunk/'),
]

svn_co_legacy = [
    SVN(mode='full',
Example #25
0
def ros_testbuild(c, job_name, url, branch, distro, arch, rosdistro, machines, othermirror, keys):

    # Change source is simply a GitPoller
    # TODO: make this configurable for svn/etc
    c['change_source'].append(
        NamedGitPoller(
            repourl = url,
            name = rosdistro,
            branch = branch,
            project = job_name+'_'+rosdistro+'_testbuild'
        )
    )
    c['schedulers'].append(
        basic.SingleBranchScheduler(
            name = job_name+'_'+rosdistro+'_testbuild',
            builderNames = [job_name+'_'+rosdistro+'_testbuild',],
            change_filter = ChangeFilter(project = job_name+'_'+rosdistro+'_testbuild')
        )
    )

    # Directory which will be bind-mounted
    binddir = '/tmp/'+job_name+'_'+rosdistro+'_testbuild'

    f = BuildFactory()
    # Remove any old crud in /tmp folder
    f.addStep(
        ShellCommand(
            command = ['rm', '-rf', binddir],
            hideStepIf = success
        )
    )
    # Check out repository (to /tmp)
    f.addStep(
        Git(
            repourl = url,
            branch = branch,
            alwaysUseLatest = True,
            mode = 'full',
            workdir = binddir+'/src/'+job_name
        )
    )
    # Download testbuild.py script from master
    f.addStep(
        FileDownload(
            name = job_name+'-grab-script',
            mastersrc = 'scripts/testbuild.py',
            slavedest = Interpolate('%(prop:workdir)s/testbuild.py'),
            hideStepIf = success
        )
    )
    # Update the cowbuilder
    f.addStep(
        ShellCommand(
            command = ['cowbuilder-update.py', distro, arch] + keys,
            hideStepIf = success
        )
    )
    # Make and run tests in a cowbuilder
    f.addStep(
        TestBuild(
            name = job_name+'-build',
            command = ['cowbuilder', '--execute', Interpolate('%(prop:workdir)s/testbuild.py'),
                       '--distribution', distro, '--architecture', arch,
                       '--bindmounts', binddir,
                       '--basepath', '/var/cache/pbuilder/base-'+distro+'-'+arch+'.cow',
                       '--override-config', '--othermirror', othermirror,
                       '--', binddir, rosdistro],
            logfiles = {'tests' : binddir+'/testresults' },
            env = {'DIST': distro},
            descriptionDone = ['make and test', job_name]
        )
    )
    c['builders'].append(
        BuilderConfig(
            name = job_name+'_'+rosdistro+'_testbuild',
            slavenames = machines,
            factory = f
        )
    )
    # return the name of the job created
    return job_name+'_'+rosdistro+'_testbuild'
Example #26
0
    def getGlobalSchedulers(self, platforms):
        ret = list()
        change_filter = ChangeFilter(repository=self.baseurl,
                                     branch=self.branch)

        # Fetch scheduler (triggered by event source)
        ret.append(
            SingleBranchScheduler(name="fetch-{0}".format(self.name),
                                  change_filter=change_filter,
                                  treeStableTimer=5,
                                  builderNames=["fetch-{0}".format(self.name)
                                                ]))

        # Nightly scheduler (started by time)
        # It's triggered after regular builds to take note of the last fetched source
        # Note that build is not started by trigger
        if self.nightly is not None:
            ret.append(
                NightlyTriggerable(
                    name="nightly-{0}".format(self.name),
                    branch=self.branch,
                    builderNames=["nightly-{0}".format(self.name)],
                    hour=self.nightly[0],
                    minute=self.nightly[1],
                    onlyIfChanged=True))

        # All compiling builders
        comp_builders = [
            "{0}-{1}".format(self.name, p.name) for p in platforms
            if p.canBuild(self)
        ]

        # Global build scheduler (triggered by fetch build)
        ret.append(Triggerable(name=self.name, builderNames=comp_builders))

        # Force schedulers
        if self.enable_force:
            ret.append(
                ForceScheduler(
                    name="force-scheduler-{0}-fetch".format(self.name),
                    reason=StringParameter(name="reason",
                                           label="Reason:",
                                           required=True,
                                           size=80),
                    builderNames=["fetch-{0}".format(self.name)],
                    codebases=[CodebaseParameter(codebase='', hide=True)],
                    properties=[
                        BooleanParameter(name="clean",
                                         label="Clean",
                                         default=False),
                        BooleanParameter(name="package",
                                         label="Package",
                                         default=False),
                    ]))
            ret.append(
                ForceScheduler(
                    name="force-scheduler-{0}-build".format(self.name),
                    reason=StringParameter(name="reason",
                                           label="Reason:",
                                           required=True,
                                           size=80),
                    builderNames=comp_builders,
                    codebases=[CodebaseParameter(codebase='', hide=True)],
                    properties=[
                        BooleanParameter(name="clean",
                                         label="Clean",
                                         default=False),
                        BooleanParameter(name="package",
                                         label="Package",
                                         default=False),
                    ]))

        return ret
    def _addGateKeepers(self):
        """
        Parse configuration for gatekeepers.
        """
        poll_branches = []

        default = self._parent.getDefaultGateKeeperData()
        default.update(self._default.get('gatekeepers', {}))
        default.update(self._raw['gatekeepers'].get(DEFAULT, {}))

        for keeper, keeper_data in self._raw['gatekeepers'].items():
            if keeper == DEFAULT:
                continue
            data = default.copy()
            data.update(keeper_data)

            scheduler = data['scheduler']
            slaves = self._parent.getSlaves(data['environment'])
            steps = data['steps']
            gatekeeper_properties = {}
            builder_name = '%s-gk-%s' % (self._name, keeper)

            if isinstance(scheduler, basestring):
                poll_branches.append(scheduler)
                stable_timer = data.get('stable_timer', STABLE_TIMER)
                self._parent.addScheduler(
                    SingleBranchScheduler(
                        name=builder_name,
                        change_filter=ChangeFilter(
                            project=self._name,
                            branch=scheduler,
                        ),
                        treeStableTimer=stable_timer,
                        builderNames=[builder_name],
                    ))
            else:
                # Default to TRY scheduler.
                self._parent.addTryTarget(builder_name)

            send_github_status = data.get('github_send_status', False)
            if send_github_status:
                parts = self._github_slug.split('/', 1)
                gatekeeper_properties.update({
                    "github_repo_owner": parts[0],
                    "github_repo_name": parts[1],
                })

            step_environment = self._parent.getStepEnvironment(
                data['environment'])

            self._parent.addBuilder(
                BuilderConfig(
                    name=builder_name,
                    slavenames=slaves,
                    nextSlave=self._nextSlave,
                    factory=RunStepsFactory(
                        project=self,
                        steps=data['steps'],
                        environment=step_environment,
                    ),
                    category=self._name,
                    properties=gatekeeper_properties,
                ))

            self._parent.addNotifications(builder=builder_name,
                                          configuration=data.get(
                                              'notifications',
                                              {},
                                          ))

        self._addChangeSource(
            project=self._name,
            repo=self._repo,
            branches=poll_branches,
        )
Example #28
0
from buildbot.changes.pb import PBChangeSource
from buildbot.config import BuilderConfig
from buildbot.process.factory import BuildFactory
from buildbot.schedulers.basic import AnyBranchScheduler
from buildbot.schedulers.forcesched import ForceScheduler
from buildbot.steps.shell import ShellCommand
from buildbot.worker import Worker

c['workers'] = [Worker("local1", "localpw")]
c['protocols'] = {'pb': {'port': 'tcp:0'}}
c['change_source'] = []
c['change_source'] = PBChangeSource()
c['schedulers'] = []
c['schedulers'].append(
    AnyBranchScheduler(name="all",
                       change_filter=ChangeFilter(project_re='^testy/'),
                       treeStableTimer=1 * 60,
                       builderNames=[
                           'testy',
                       ]))
c['schedulers'].append(ForceScheduler(name="force", builderNames=["testy"]))
f1 = BuildFactory()
f1.addStep(ShellCommand(command='echo hi'))
c['builders'] = []
c['builders'].append(
    BuilderConfig(name="testy", workernames=["local1"], factory=f1))
c['status'] = []
c['title'] = "test"
c['titleURL'] = "test"
c['buildbotURL'] = "http://localhost:8010/"
c['db'] = {'db_url': "sqlite:///state.sqlite"}
 def GetChangeFilter(self):
     """Returns (ChangeFilter): A BuildBot ChangeFilter for matching changes."""
     return ChangeFilter(lambda change: self._CheckCommitLines(
         *change.comments.splitlines()),
                         repository=self._repo)
Example #30
0
def loadConfig(config):

    ####### CHANGESOURCES
    # the 'change_source' setting tells the buildmaster how it should find out
    # about source code changes.  Here we point to the buildbot clone of pyflakes.
    from buildbot.changes.gitpoller import GitPoller
    from buildbot.changes.filter import ChangeFilter
    config['change_source'].append( GitPoller( 
      repourl = '[email protected]:ORNL/xdd.git',
      workdir='gitpoller-workdir-xdd-master', 
      pollinterval=120, 
      branch='master',
      project='xdd'))

    xdd_filter = ChangeFilter(
      project = 'xdd',
      branch = 'testing')

    ####### BUILDERS
    # The 'builders' list defines the Builders, which tell Buildbot how to perform a build:
    # what steps, and which slaves can execute them.  Note that any particular build will
    # only take place on one slave.
    from buildbot.process.factory import BuildFactory, GNUAutoconf
    from buildbot.steps.source import Git
    from buildbot.steps.shell import ShellCommand, Configure, Compile, Test

    xdd_factory = BuildFactory()

    # Check out the source
    xdd_factory.addStep(Git(repourl='[email protected]:ORNL/xdd.git', mode='copy', branch='master'))

    # Generate the test configuration
    xdd_factory.addStep(ShellCommand(command=['./contrib/buildbot_gen_test_config.sh'], name="configuring"))

    # Compile the code
    xdd_factory.addStep(Compile(description=["compiling"]))

    # Install the code
    xdd_factory.addStep(ShellCommand(command=['make', 'install'], name="make install"))

    # Perform make check
    xdd_factory.addStep(ShellCommand(command=['make', 'check'], name="make check", maxTime=600))

    # Perform make test
    xdd_factory.addStep(Test(description=["make test"], maxTime=600))

    # Perform cleanup
    xdd_factory.addStep(ShellCommand(command=['pkill', '-f', 'xdd', '||', 'echo ""'], name='process cleanup', maxTime=60))

    # Add the XDD Build factory to each of the available builders described in the master.cfg
    from buildbot.config import BuilderConfig
#    config['builders'].append(BuilderConfig(name="xdd-rhel5-x86_64", slavenames=["pod7"], factory=xdd_factory, env={"XDDTEST_TIMEOUT": "900"}, category='xdd'))
#    config['builders'].append(BuilderConfig(name="xdd-rhel6-x86_64", slavenames=["pod9"], factory=xdd_factory,  env={"XDDTEST_TIMEOUT": "900"},category='xdd'))
#    config['builders'].append(BuilderConfig(name="xdd-sles10-x86_64", slavenames=["pod10"], factory=xdd_factory, env={"XDDTEST_TIMEOUT": "900"}, category='xdd'))
    config['builders'].append(BuilderConfig(name="xdd-sles11-x86_64", slavenames=["pod11"], factory=xdd_factory, env={"XDDTEST_TIMEOUT": "900"}, category='xdd'))
    config['builders'].append(BuilderConfig(name="xdd-osx-10-8", slavenames=["natureboy"], factory=xdd_factory, env={"XDDTEST_TIMEOUT": "900"}, category='xdd'))
#    config['builders'].append(BuilderConfig(name="xdd-rhel6-ppc64", slavenames=["spry02"], factory=xdd_factory, env={"XDDTEST_TIMEOUT": "900"}, category='xdd'))

    ####### SCHEDULERS
    # Configure the Schedulers, which decide how to react to incoming changes.  In this
    # case, just kick off a 'runtests' build

    # Configure the nightly testing so that every test lives in the same buildset
    from buildbot.schedulers.basic import SingleBranchScheduler
    from buildbot.schedulers.timed import Periodic,Nightly
    build_nightly_xdd=Nightly(name="xdd-nightly1", 
                              branch = "master",
                              properties={'owner' : ['*****@*****.**']}, 
                              builderNames=["xdd-sles11-x86_64", "xdd-osx-10-8"],
                              hour = 2,
                              minute = 3)
    config['schedulers'].append(build_nightly_xdd)

    # Configure each force build seperately so that they live in differing buildsets
    from buildbot.schedulers.forcesched import ForceScheduler
#    config['schedulers'].append(ForceScheduler(name="xdd-force1", builderNames=["xdd-rhel5-x86_64"]))
#    config['schedulers'].append(ForceScheduler(name="xdd-force2", builderNames=["xdd-rhel6-x86_64"]))
#    config['schedulers'].append(ForceScheduler(name="xdd-force3", builderNames=["xdd-sles10-x86_64"]))
    config['schedulers'].append(ForceScheduler(name="xdd-force4", builderNames=["xdd-sles11-x86_64"]))
    config['schedulers'].append(ForceScheduler(name="xdd-force6", builderNames=["xdd-osx-10-8"]))
#    config['schedulers'].append(ForceScheduler(name="xdd-force7", builderNames=["xdd-rhel6-ppc64"]))

    ####### STATUS TARGETS
    # 'status' is a list of Status Targets. The results of each build will be
    # pushed to these targets. buildbot/status/*.py has a variety to choose from,
    # including web pages, email senders, and IRC bots.
    from buildbot.status.mail import MailNotifier
    xddMN = MailNotifier(fromaddr="*****@*****.**", 
                         extraRecipients=['*****@*****.**'],
                         categories='xdd', 
                         buildSetSummary=True, 
                         messageFormatter=xddSummaryMail)
    config['status'].append(xddMN)
Example #31
0
 def getChangeFilter(self, branch, branches, change_filter, categories):
     assert branch is NotABranch
     return ChangeFilter.fromSchedulerConstructorArgs(
         change_filter=change_filter, branch=branches,
         categories=categories)
def _VersionFileFilter(change):
    """A change filter function that disregards all changes that don't
  touch src/syzygy/SYZYGY_VERSION.

  Args:
      change: a buildbot Change object.
  """
    return change.branch == 'master' and 'syzygy/SYZYGY_VERSION' in change.files


# Official build scheduler for Syzygy
official_scheduler = SingleBranchScheduler(
    'syzygy_version',
    treeStableTimer=0,
    change_filter=ChangeFilter(filter_fn=_VersionFileFilter),
    builderNames=['Syzygy Official'])

# Windows official Release builder
official_builder = {
    'name': 'Syzygy Official',
    'factory': AF.BaseFactory(recipe='syzygy/continuous'),
    'schedulers': 'syzygy_version',
    'auto_reboot': False,
    'category': 'official',
}


def Update(config, active_master, c):
    c['schedulers'].append(official_scheduler)
    c['builders'].append(official_builder)
Example #33
0
 def getChangeFilter(self, branch, branches, change_filter, categories):
     assert branch is NotABranch
     return ChangeFilter.fromSchedulerConstructorArgs(
         change_filter=change_filter,
         branch=branches,
         categories=categories)
Example #34
0
from buildbot.schedulers.basic import SingleBranchScheduler
from buildbot.schedulers.forcesched import ForceScheduler, FixedParameter, StringParameter
from buildbot.schedulers.timed import Periodic
from buildbot.schedulers.trysched import Try_Userpass

from buildbot.changes.filter import ChangeFilter

from config.builders import builder_names, polled_builder_names

all_builder_names = builder_names + polled_builder_names

schedulers = []

manual_builder = ChangeFilter(project=builder_names, branch='master')
schedulers.append(
    SingleBranchScheduler(name="all",
                          treeStableTimer=15,
                          change_filter=manual_builder,
                          builderNames=builder_names))

polled_builder = ChangeFilter(project=polled_builder_names, branch='master')
schedulers.append(
    SingleBranchScheduler(name="mongodb",
                          treeStableTimer=15,
                          change_filter=polled_builder,
                          builderNames=polled_builder_names))

schedulers.append(
    ForceScheduler(name="force",
                   repository=FixedParameter(name="repository"),
                   branch=StringParameter(name="branch", default="master"),