Skip to content

Commit

Permalink
WIP: Added sort_key for builder config (Issue buildbot#7433)
Browse files Browse the repository at this point in the history
  • Loading branch information
YngveNPettersen committed Feb 28, 2024
1 parent 15b28a6 commit b4d3e36
Show file tree
Hide file tree
Showing 6 changed files with 33 additions and 4 deletions.
14 changes: 13 additions & 1 deletion master/buildbot/config/builder.py
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,8 @@ def __init__(self, name=None, workername=None, workernames=None,
nextWorker=None, nextBuild=None, locks=None, env=None,
properties=None, collapseRequests=None, description=None,
description_format=None,
canStartBuild=None, defaultProperties=None, project=None
canStartBuild=None, defaultProperties=None, project=None,
sort_key=None
):
# name is required, and can't start with '_'
if not name or type(name) not in (bytes, str):
Expand All @@ -47,6 +48,14 @@ def __init__(self, name=None, workername=None, workernames=None,
except UnicodeDecodeError:
error("builder names must be unicode or ASCII")

if sort_key and type(sort_key) not in (bytes, str):
error("sort_key must be a string type")
sort_key = None
try:
self.sort_key = bytes2unicode(sort_key or "", encoding="ascii")
except UnicodeDecodeError:
error("sort keys must be unicode or ASCII")

if not isinstance(project, (type(None), str)):
error("builder project must be None or str")
project = None
Expand Down Expand Up @@ -181,4 +190,7 @@ def getConfigDict(self):
rv['description'] = self.description
if self.description_format:
rv['description_format'] = self.description_format
if self.sort_key:
rv['sort_key'] = self.sort_key

return rv
2 changes: 1 addition & 1 deletion master/buildbot/configurators/janitor.py
Original file line number Diff line number Diff line change
Expand Up @@ -105,7 +105,7 @@ def configure(self, config_dict):
name=JANITOR_NAME + "_force",
builderNames=[JANITOR_NAME]))

self.builders.append(BuilderConfig(
self.builders.append(BuilderConfig(sort_key=kwargs.get("sort_key", None),
name=JANITOR_NAME, workername=JANITOR_NAME, factory=BuildFactory(steps=steps)
))
self.protocols.setdefault('null', {})
Expand Down
10 changes: 9 additions & 1 deletion master/buildbot/data/builders.py
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,8 @@ def get(self, resultSpec, kwargs):
return {
"builderid": builderid,
"name": bdict['name'],
# TODO: fix
# "sort_key": bdict.get('sort_key', '')
"masterids": bdict['masterids'],
"description": bdict['description'],
"description_format": bdict["description_format"],
Expand Down Expand Up @@ -73,6 +75,8 @@ def get(self, resultSpec, kwargs):
{
"builderid": bd['id'],
"name": bd['name'],
# TODO: fix
#"sort_key": bd.get('sort_key', ''),
"masterids": bd['masterids'],
"description": bd['description'],
"description_format": bd['description_format'],
Expand Down Expand Up @@ -103,6 +107,8 @@ class Builder(base.ResourceType):
class EntityType(types.Entity):
builderid = types.Integer()
name = types.Identifier(70)
# TODO: fix
# sort_key = types.Identifier(70)
masterids = types.List(of=types.Integer())
description = types.NoneOk(types.String())
description_format = types.NoneOk(types.String())
Expand Down Expand Up @@ -148,7 +154,9 @@ def updateBuilderList(self, masterid, builderNames):
self.master.mq.produce(('builders', str(builderid), 'stopped'), {
"builderid": builderid,
"masterid": masterid,
"name": bldr['name']
"name": bldr['name'],
# TODO: fix
#"sort_key": bldr.get('sort_key', '')
})
else:
builderNames_set.remove(bldr['name'])
Expand Down
6 changes: 6 additions & 0 deletions master/docs/developer/config.rst
Original file line number Diff line number Diff line change
Expand Up @@ -266,6 +266,12 @@ Builder Configuration
The builder's description, displayed in the web status.

.. py:attribute:: sort_key
An extra key that allows the builders to be organized by category rather than alphabetically,
e.g by using sort keys like "10_foo", "20_bar", "30_baz" to group the foo, bar, and baz type
builders in the builders list.

Error Handling
--------------

Expand Down
2 changes: 1 addition & 1 deletion www/react-base/src/views/BuildersView/BuildersView.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,7 @@ export const BuildersView = observer(() => {
const filteredBuilders = builders.array.filter(builder => {
return isBuilderFiltered(builder, filterManager, masters, showOldBuilders) &&
(builderNameFilter === null || builder.name.indexOf(builderNameFilter) >= 0)
}).sort((a, b) => a.name.localeCompare(b.name));
}).sort((a, b) => (a.sort_key || "").localeCompare(b.sort_key || "") || a.name.localeCompare(b.name));

return (
<div className="bb-builders-view-container">
Expand Down
3 changes: 3 additions & 0 deletions www/react-data-module/src/data/classes/Builder.ts
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ export class Builder extends BaseClass {
@observable description_html!: string|null;
@observable masterids!: string[];
@observable name!: string;
@observable sort_key!: string | null;
@observable tags!: string[];
@observable projectid!: string|null;

Expand All @@ -39,6 +40,7 @@ export class Builder extends BaseClass {
this.description_html = object.description_html;
this.masterids = object.masterids;
this.name = object.name;
this.sort_key = object.sort_key;
this.tags = object.tags;
this.projectid = object.projectid;
}
Expand All @@ -49,6 +51,7 @@ export class Builder extends BaseClass {
description: this.description,
masterids: this.masterids,
name: this.name,
sort_key: this.sort_key,
tags: this.tags,
projectid: this.projectid,
};
Expand Down

0 comments on commit b4d3e36

Please sign in to comment.