Currently, I’m being widely involved in customization of Buildbot instances. Many questions arise, but no answers are usually available on the Web.
Recently, I designed a custom build step which by the definition needed to work with values from properties passed to it on the init time. The challenge was to make it understanding everything that can theoretically be passed – build properties (IProperty), plain values etc.
In this case, we can use ‘renderables’ list to specify mapping from variables that can contain properties to variables that are used to store rendered values.
We can use passed values without caring to handle it as property or some other renderable. Buildbot does it automatically
class MyStep(BuildStep): ... renderables = ['renderable1' , 'renderable2'] def __init__(self, passed_var1, passed_var2): self.renderable1 = passed_var1 self.renderable2 = passed_var2
Invoke the step in the build factory as:
MyStep(util.Prop(property1), util.Prop(property2))
or
MyStep('actual value 1', 'actual value 2')
Now we can use passed values simply as without caring to handle it as property or some other renderable. Buildbot does it automatically.