def prolong_scheduler(): default_project = "%s/%s" % (util.env.GIT_OWNER, util.env.GIT_SLUG) return schedulers.EveForceScheduler( name=util.env.PROLONG_SCHEDULER_NAME, builderNames=[util.env.BOOTSTRAP_BUILDER_NAME], reason=util.StringParameter(name='reason', label='Reason', default='start temporary promotion', size=20), properties=[ util.FixedParameter(name='force_stage', default='eve-prolong'), util.StringParameter(name='eve_prolongation_artifacts', label='artifacts source', default='', size=20) ], codebases=[ util.CodebaseParameter( '', branch=util.FixedParameter(name='branch', default='HEAD'), revision=util.FixedParameter(name='revision', default=''), repository=util.FixedParameter(name='repository', default=util.env.GIT_REPO), project=util.FixedParameter(name='project', default=default_project), ) ])
def __init__(self, *args, project, repository, button_name=None, label=None, **kwargs): """Improves the default form of ForceScheduler""" codebase = util.CodebaseParameter( codebase='', label='', project=util.FixedParameter(name='project', default=project), repository=util.FixedParameter(name='repository', default=repository), branch=util.StringParameter(name='branch', default='master', required=True), # required, otherwise status push reporter fails with a # non-descriptive exception revision=util.StringParameter(name='revision', default='HEAD', required=True)) kwargs['buttonName'] = button_name or f'Build {project}' kwargs['label'] = label or f'Manual {project} build' super().__init__(*args, codebases=[codebase], **kwargs)
def codebases_to_params(codebases): codebases_params = [] for name, defaults in codebases.items(): codebases_params.append( util.CodebaseParameter( codebase=name, repository=util.StringParameter( name='repository', default=defaults['repository']), branch=util.StringParameter(name='branch', default=defaults['branch']), revision=util.StringParameter(name='revision', default=defaults['revision']), project=None)) return codebases_params
def maxscaleDockerCodebase(): return util.CodebaseParameter( "", label="Main repository", branch=util.StringParameter( name="branch", default=constants.MAXSCALE_DOCKER_CODEBASE["branch"]), revision=util.FixedParameter( name="revision", default=constants.MAXSCALE_DOCKER_CODEBASE["revision"]), project=util.FixedParameter(name="project", default=""), repository=util.StringParameter( name="repository", default=constants.MAXSCALE_DOCKER_CODEBASE["repository"]), )
def add_all_schedulers(cfg): for s_name in SERVICES: for branch in get_all_possible_branch_names(): realm = BRANCH_TO_REALM_MAPPING[branch] buildername = f"{s_name}_{realm}" cfg['schedulers'].append( schedulers.ForceScheduler( name=f"force-{s_name}-{realm}", codebases=[ util.CodebaseParameter( "", label="Repository", branch=util.FixedParameter(name="branch", default=branch), revision=util.StringParameter(name="revision", default=""), repository=util.FixedParameter( name="repository", default=SERVICES[s_name]['giturl']), project=util.FixedParameter(name="project", default=s_name), ) ], builderNames=[buildername], )) cfg['schedulers'].append( schedulers.SingleBranchScheduler( name=f"commit-{s_name}-{realm}", builderNames=[buildername], treeStableTimer=0, change_filter=util.ChangeFilter(branch=branch, project=s_name), ))
def scheduler_force_stable(name, builders, template_dfl, codebases_stable): return schedulers.ForceScheduler( name=name, buttonName="Stable build", label="Trigger stable build", reason=util.StringParameter(name="reason", label="Reason:", required=False, size=140), builderNames=builders, codebases=codebases_to_params(codebases_stable), properties=[ util.StringParameter(name="template", label="Configuration Template:", default=template_dfl) ])
def schedule(c): force_sched = s_force( name="force-build-" + PROJECT_NAME, cb=FORCE_CODEBASE, builders=[PROJECT_NAME], properties=[ util.NestedParameter(name="options", label="Build Options", layout="vertical", fields=[ util.StringParameter(name="force_feature", label="feature-branch to build:", default="", size=80), util.BooleanParameter(name="force_build_clean", label="force a make clean", default=False), util.BooleanParameter(name="force_complete_rebuild", label="force complete rebuild and fresh git clone", default=False), ]) ] ) c['schedulers'].extend([ s_abranch(PROJECT_NAME + '-sched', CODEBASE, [PROJECT_NAME], change_filter=util.ChangeFilter(branch_fn=trigger_branch_match), treeStableTimer=5 * 60), force_sched, s_trigger('trigger-' + PROJECT_NAME, CODEBASE, [PROJECT_NAME]), ])
def getPropertyes(): return [ util.BooleanParameter(name='Windows', label='Windows version project', default=True), util.BooleanParameter(name='Linux', label='Linux version project', default=True), util.BooleanParameter(name='Android', label='Android version project', default=True), util.BooleanParameter(name='clean', label='clean old build ', default=True), util.BooleanParameter(name='deploy', label='deploy project', default=True), util.BooleanParameter(name='test', label='test project ', default=True), util.BooleanParameter(name='release', label='release project', default=False), util.StringParameter(name='copyFolder', label='Folder with buildet data', default="Distro"), ]
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
def codebaseMdbciParameter(): return [ util.CodebaseParameter( "", label="Main repository", branch=util.StringParameter( name="branch", default=constants.MDBCI_CODEBASE[""]["branch"]), revision=util.FixedParameter( name="revision", default=constants.MDBCI_CODEBASE[""]["revision"]), project=util.FixedParameter(name="project", default=""), repository=util.StringParameter( name="repository", default=constants.MDBCI_CODEBASE[""]["repository"]), ) ]
def add_schedulers(cfg): for branch in config['branch_deployment_configs']: realm = config['branch_deployment_configs'][branch]['namespace'] buildername = 'vs-' + realm cfg['schedulers'].append( schedulers.ForceScheduler( name="force-vs" + realm, codebases=[ util.CodebaseParameter( "", label="Repository", branch=util.FixedParameter(name="branch", default=branch), revision=util.StringParameter(name="revision", default=""), repository=util.FixedParameter( name="repository", default= "https://github.com/klaital/volunteer-savvy-backend" ), project=util.FixedParameter( name="project", default='volunteer-savvy-backend'), ) ], builderNames=[buildername]))
def force_scheduler(): default_project = "%s/%s" % (util.env.GIT_OWNER, util.env.GIT_SLUG) yaml_options = util.NestedParameter( name=None, label='Eve', fields=[ util.StringParameter(name='force_stage', label='Override stage (optional)') ]) extra_props = util.NestedParameter( name=None, label='Extra properties', fields=[ util.AnyPropertyParameter(name='prop%02d' % i) for i in range(util.env.FORCE_BUILD_PARAM_COUNT) ]) # Hack to remove ugly ':' from extra properties for prop in extra_props.fields: prop.fields[0].label = 'Name' prop.fields[1].label = 'Value' return schedulers.EveForceScheduler( name=util.env.FORCE_SCHEDULER_NAME, builderNames=[util.env.BOOTSTRAP_BUILDER_NAME], reason=util.StringParameter(name='reason', label='Reason', default='force build', size=20), properties=[yaml_options] + [extra_props], codebases=[ util.CodebaseParameter( '', label='Repository', branch=util.StringParameter(name='branch', label='Branch', required=True), revision=util.FixedParameter(name='revision', default=''), repository=util.FixedParameter(name='repository', default=util.env.GIT_REPO), project=util.FixedParameter(name='project', default=default_project), ) ])
def getPropertyes(): return [ util.StringParameter( name = 'Branch', label = 'Branch of project', default = 'master', ) ]
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 createCodebaseParamsForDeploy(self, codebases): codebases_params = [] for name, codebase in codebases.items(): codebases_params.append( CodebaseParameter(name, project="", repository=codebase['repository'], branch=codebase.get('branch'), revision=util.StringParameter( name='revision', hide=False, size=50))) return codebases_params
def scheduler_force_repo(name, builders, manifest_dfl, template_dfl, codebases_repo): return schedulers.ForceScheduler( name=name, buttonName="Repo build", label="Manual Repo build", reason=util.StringParameter(name="reason", label="Reason:", required=False, size=140), builderNames=builders, codebases=codebases_to_params(codebases_repo), properties=[ util.StringParameter(name="manifest", label="Manifest File:", default=manifest_dfl), util.StringParameter(name="template", label="Configuration Template:", default=template_dfl) ])
def scheduler_force_wintools(name, builders, codebases_wintools): return schedulers.ForceScheduler( name=name, buttonName="Wintools build", label="Manual Windows Tools build", reason=util.StringParameter(name="reason", label="Reason:", required=False, size=140), builderNames=builders, codebases=codebases_to_params(codebases_wintools))
def getLntSchedulers(): project = "lnt" lnt_builders = [ "publish-lnt-sphinx-docs", ] return [ schedulers.SingleBranchScheduler( name="lnt-scheduler", treeStableTimer=kwargs.get('treeStableTimer', None), reason="Merge to LNT github {} branch".format(filter_branch), builderNames=lnt_builders, change_filter=util.ChangeFilter(project_fn=project, branch=filter_branch)), schedulers.ForceScheduler( name="force-build-scheduler", label="Force Build", buttonName="Force Build", reason=util.ChoiceStringParameter( name="reason", label="reason:", required=True, choices=[ "Build a particular revision", "Force clean build", "Narrow down blamelist", ], default="Build a particular revision"), builderNames=lnt_builders, codebases=[ util.CodebaseParameter( codebase="", branch=util.FixedParameter(name="branch", default=_branch), revision=util.StringParameter(name="revision", label="revision:", size=45, default=''), repository=util.FixedParameter(name="repository", default=_repourl), project=util.FixedParameter(name="project", default=project)) ], properties=[ util.BooleanParameter( name="clean", label="Clean source code and build directory", default=False), util.BooleanParameter(name="clean_obj", label="Clean build directory", default=False) ]), ]
def getForceSchedulers(builders): # Walk over all builders and collect their names. scheduler_builders = [builder.name for builder in builders] # Create the force schedulers. return [ schedulers.ForceScheduler( name="force-build-scheduler", label="Force Build", buttonName="Force Build", reason=util.ChoiceStringParameter( name="reason", label="reason:", required=True, choices=[ "Build a particular revision", "Force clean build", "Narrow down blamelist", ], default="Build a particular revision"), builderNames=scheduler_builders, codebases=[ util.CodebaseParameter( codebase="", branch=util.FixedParameter(name="branch", default=_branch), revision=util.StringParameter(name="revision", label="revision:", size=45, default=''), repository=util.FixedParameter(name="repository", default=_repourl), project=util.FixedParameter( name="project", default="llvm" # All projects depend on llvm )) ], properties=[ util.BooleanParameter( name="clean", label="Clean source code and build directory", default=False), util.BooleanParameter(name="clean_obj", label="Clean build directory", default=False) ]) ]
def _getForceScheduler(props, prefix, builderNames): pretty_branch_name = props['branch_pretty'] forceParams = [ util.CodebaseParameter( "", label="Main repository", # will generate a combo box branch=util.FixedParameter( name="branch", default=props['git_branch_name'], ), # will generate nothing in the form, but revision, repository, # and project are needed by buildbot scheduling system so we # need to pass a value ("") revision=util.FixedParameter(name="revision", default="HEAD"), repository=util.FixedParameter(name="repository", default="{{ source_repo_url }}"), project=util.FixedParameter(name="project", default=""), ), ] # Note: This is a hack, but we need a unique name for the force schedulers, and it can't have special characters in it... return schedulers.ForceScheduler( name=prefix + pretty_branch_name[0:2].replace('.', 'x'), buttonName="Force Build", label="Force Build Settings", builderNames=builderNames, codebases=forceParams, # will generate a text input reason=util.StringParameter(name="reason", label="Reason:", required=False, size=80, default=""), # in case you don't require authentication this will display # input for user to type his name username=util.UserNameParameter(label="your name:", size=80))
def add_schedulers(cfg): for branch in config['branch_to_namespace_mapping']: realm = config['branch_to_namespace_mapping'][branch] buildername = 'wwdicebot-' + realm cfg['schedulers'].append( schedulers.ForceScheduler( name="force-wwdicebot" + realm, codebases=[ util.CodebaseParameter( "", label="Repository", branch=util.FixedParameter(name="branch", default=branch), revision=util.StringParameter(name="revision", default=""), repository=util.FixedParameter( name="repository", default="https://github.com/klaital/wwdice"), project=util.FixedParameter(name="project", default='wwdicebot'), ) ], builderNames=[buildername]))
def get(builders): scheds = [] # pull request scheduler scheds.append( schedulers.AnyBranchScheduler( name="gr_pull_request_handler", change_filter=util.ChangeFilter(category='pull', project="gnuradio/gnuradio"), treeStableTimer=None, builderNames=[ b.name for b in builders if "control" in b.tags and "gnuradio" in b.tags and "pull" in b.tags ])) scheds.append( schedulers.AnyBranchScheduler( name="volk_pull_request_handler", change_filter=util.ChangeFilter(category='pull', project="gnuradio/volk"), treeStableTimer=None, builderNames=[ b.name for b in builders if "control" in b.tags and "volk" in b.tags and "pull" in b.tags ])) # push event scheduler def filter_for_push(change): event = change.properties.getProperty("event") project = change.properties.getProperty("project") if event == "push": return True return False scheds.append( schedulers.AnyBranchScheduler( name="commit_push_handler", change_filter=util.ChangeFilter(filter_fn=filter_for_push, project="gnuradio/gnuradio"), treeStableTimer=60, builderNames=[ b.name for b in builders if "control" in b.tags and "push" in b.tags ])) scheds.append( schedulers.ForceScheduler( name="force_pullrequest", builderNames=["pull_request_runner"], properties=[ util.StringParameter(name="github.number", label="GitHub pull request number", default="", size=80), util.StringParameter(name="github.base.ref", label="pull request base branch", default="master", size=80) ], codebases=[ util.CodebaseParameter( "", project=util.FixedParameter(name="project", default="gnuradio/gnuradio"), repository=util.FixedParameter( name="repository", default="https://github.com/gnuradio/gnuradio.git"), branch=util.StringParameter( name="branch", label="pull request branch", default="refs/pull/<PR#>/merge", size=80), revision=util.FixedParameter(name="revision", default="")) ])) scheds.append( schedulers.ForceScheduler( name="force_build", builderNames=["repo_push_runner"], codebases=[ util.CodebaseParameter( "", project=util.FixedParameter(name="project", default="gnuradio/gnuradio"), repository=util.FixedParameter( name="repository", default="https://github.com/gnuradio/gnuradio.git"), ) ])) scheds.append( schedulers.ForceScheduler( name="force_weekly", builderNames=["weekly_runner"], codebases=[ util.CodebaseParameter( "", project=util.FixedParameter(name="project", default="gnuradio/gnuradio"), repository=util.FixedParameter( name="repository", default="https://github.com/gnuradio/gnuradio.git"), branch=util.StringParameter(name="branch", label="test branch", default="master", size=80), revision=util.FixedParameter(name="revision", default="")) ])) scheds.append( schedulers.Nightly(name="timed_weekly", builderNames=["weekly_runner"], codebases={ "": { "repository": "https://github.com/gnuradio/gnuradio.git", "branch": "master", "revision": "None" } }, dayOfWeek=[0, 4], hour=4, minute=0)) scheds.extend([ schedulers.Triggerable(name="trigger_" + b.name.lstrip("build_"), builderNames=[b.name]) for b in builders if "build" in b.tags ]) scheds.extend([ schedulers.Triggerable(name="trigger_" + b.name.lstrip("test_"), builderNames=[b.name]) for b in builders if "test" in b.tags ]) return scheds
def getGlobalSchedulers(self, platforms): ret = list() change_filter = util.ChangeFilter( repository=[self.baseurl, self.giturl], branch=self.branch) # Fetch scheduler (triggered by event source) ret.append( schedulers.SingleBranchScheduler( name=self.names['sch-sb'], change_filter=change_filter, # Wait for 5 minutes before starting build treeStableTimer=300, builderNames=[self.names['bld-fetch']])) # 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 # We cleanup after it because we just generated a new package if self.nightly is not None: ret.append( schedulers.NightlyTriggerable(name=self.names['sch-nightly'], branch=self.branch, builderNames=[ self.names['bld-nightly'], self.names['bld-clean'] ], hour=self.nightly[0], minute=self.nightly[1], onlyIfChanged=True)) # All compiling builders comp_builders = list(self.names['bld-platform'](p for p in platforms if p.canBuild(self))) # Global build scheduler (triggered by fetch build and nightly build) ret.append( schedulers.Triggerable(name=self.names['sch-build'], builderNames=comp_builders)) # Force schedulers if self.enable_force: ret.append( schedulers.ForceScheduler( name=self.names['sch-force-id-fetch'], buttonName=self.names['sch-force-name-fetch'], label=self.names['sch-force-name-fetch'], reason=util.StringParameter(name="reason", label="Reason:", required=True, size=80), builderNames=[self.names['bld-fetch']], codebases=[util.CodebaseParameter(codebase='', hide=True)], properties=[ util.BooleanParameter(name="clean", label="Clean", default=False), util.BooleanParameter(name="package", label="Package", default=False), ])) ret.append( schedulers.ForceScheduler( name=self.names['sch-force-id-build'], buttonName=self.names['sch-force-name-build'], label=self.names['sch-force-name-build'], reason=util.StringParameter(name="reason", label="Reason:", required=True, size=80), builderNames=comp_builders, codebases=[util.CodebaseParameter(codebase='', hide=True)], properties=[ util.BooleanParameter(name="clean", label="Clean", default=False), util.BooleanParameter(name="package", label="Package", default=False), ])) ret.append( schedulers.ForceScheduler( name=self.names['sch-force-id-clean'], buttonName=self.names['sch-force-name-clean'], label=self.names['sch-force-name-clean'], reason=util.StringParameter(name="reason", hide=True), builderNames=[self.names['bld-clean']], codebases=[util.CodebaseParameter(codebase='', hide=True)], properties=[ util.BooleanParameter(name="dry_run", label="Dry run", default=False), ])) return ret
def old_target(): return util.StringParameter(name="old_target", label="Old target", size=50, default="2.1.9")
def cmake_flags(default=constants.DEFAULT_CMAKE_FLAGS): return util.StringParameter(name="cmake_flags", label="CMake flags", size=50, default=default)
def upload_server(): return util.StringParameter(name="upload_server", label="Server for binaries and logs", default=constants.UPLOAD_SERVERS["bb-host"])
def mdbciProductName(default="maxscale_ci"): return util.StringParameter( name="mdbciProductName", label="MDBCI Product name", default=default, )
properties={ "github_repo_owner": "rsyslog", "github_repo_name": "rsyslog-pkg-rhel-centos", }, )) lc['schedulers'].append( ForceScheduler(name="pull_rsyslog_rsyslogrpm", label="1. Pull Requests-rsyslog-rsyslogrpm", builderNames=["rsyslogrpm rpmbuild"], codebases=[ util.CodebaseParameter( "", branch=util.StringParameter( name="branch", label="Pull Request Number:", required=True, default="refs/pull/<NUMBER>/head", size=80), ), ])) lc['schedulers'].append( ForceScheduler(name="forceall_rsyslog_rsyslogrpm", label="2. Force All-rsyslog-rsyslogrpm", builderNames=["rsyslogrpm rpmbuild"])) lc['schedulers'].append( SingleBranchScheduler(name="github_rsyslog-rsyslogrpm", change_filter=filter.ChangeFilter( category="pull", project="rsyslog/rsyslog-pkg-rhel-centos"),
def dockerRegistryURL(): return util.StringParameter(name="dockerRegistryUrl", label="Docker registry to put images to", default=constants.DOCKER_REGISTRY)
def ci_url(): return util.StringParameter(name="ci_url", label="MaxScale CI Server URL", size=50, default=constants.CI_SERVER_URL)