<div dir="ltr"><br><br><div class="gmail_quote"><div dir="ltr">On Tue, Apr 25, 2017 at 11:13 PM Mojca Miklavec <<a href="mailto:mojca@macports.org">mojca@macports.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Dear Pierre,<br>
<br>
On 17 April 2017 at 20:10, Pierre Tardy wrote:<br>
> Hi Mojca,<br>
> the Nightly scheduler has a onlyIfChanged argument which is exactly meant<br>
> for that.<br>
><br>
> You need to setup properly a change source, and change filter, and then<br>
> trigger every now and then. the builder will only start if there are change<br>
> ongoing for it.<br>
><br>
> <a href="http://docs.buildbot.net/latest/manual/cfg-schedulers.html#nightly-scheduler" rel="noreferrer" target="_blank">http://docs.buildbot.net/latest/manual/cfg-schedulers.html#nightly-scheduler</a><br>
<br>
I tested it and it seems to work well, but some minor disadvantages:<br>
<br>
- If I manually trigger the build (let's say because there was a<br>
change and I want it built ASAP), the nightly scheduler will still<br>
trigger even if I have the latest source built.<br></blockquote><div><br></div><div>AFAIK, There is no built in feature for that use case. </div><div>You would need a custom step of some sort, which would look at the last build, and see if it has the same revision. In that case, the step would cancel the build</div><div><br></div><div>After the git step, you would insert a step like this (untested, but I hope this could show readers how simple it is to use new style steps)</div><div><br></div><div><div><font face="monospace">class CancelIfAlreadyBuilt(BuildStep):</font></div><div><font face="monospace">    @defer.inlineCallbacks</font></div><div><font face="monospace">    def run(self):</font></div><div><font face="monospace">        builderid = yield self.build.getBuilderId()</font></div><div><font face="monospace">        build = yield self.master.data.get(('builders', builderid, 'builds', self.build.number - 1))</font></div><div><font face="monospace">        props = yield self.master.data.get(('builds', str(build['buildid']), "properties"))</font></div><div><font face="monospace">        if props.get('got_revision', [None, None])[0] == self.getProperty('got_revision'):</font></div><div><font face="monospace">            yield self.build.stopBuild()</font></div><div><font face="monospace">        defer.returnValue(SUCCESS)</font></div></div><div><br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<br>
- There is often some minor change in the README file for which I know<br>
that there won't be any difference in the final binary file. I didn't<br>
find any way to "skip the build for that day" (other than<br>
reconfiguring the build master).<br></blockquote><div><br></div><div>There are the <span style="background-color:rgb(246,246,246);font-family:monospace;font-size:12.1875px">fileIsImportant</span> and <span style="background-color:rgb(246,246,246);font-family:monospace;font-size:12.1875px">onlyImportant</span> parameters of a scheduler that is made exactly for that</div><div><a href="http://docs.buildbot.net/latest/manual/cfg-schedulers.html#configuring-schedulers">http://docs.buildbot.net/latest/manual/cfg-schedulers.html#configuring-schedulers</a><br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><br>
</blockquote></div></div>