Another proposal for modernization of our infrastructure

Jan Kundrát jkt at kde.org
Sat Jan 31 12:16:05 GMT 2015


On Saturday, 31 January 2015 11:14:01 CEST, Ben Cooksley wrote:
> Fixing a usability glitch and accepting a radical redesign of your
> interface are completely different.

Your mail suggested that they apparently do not care about improving their 
UI, because if they did, they would have solved everything already. I 
disagree with that, and provide evidence which supports the idea that 
Gerrit upstream in fact also cares about users, including those who are not 
already experienced with its UI.

> We're not the first ones to complain about it's interface but they've
> not done anything to remedy this despite a complete redesign (which
> reduced the level of functionality interestingly).

How does the ChangeScreen2 reduce the level of functionality?

> I see the following in that section:
>
> 1) A note that Jenkins is a "glorified job launcher" as we don't use
> any of it's advanced functionality (which I refuted - it is much more
> than that).

You reiterated that it is cool to have graphs tracking number of failed 
tests. I proposed to fix the tests instead, and offered a solution which 
eliminates this problem for tests that are inherently unstable (see 
3.3.2.). I also explained how running cppcheck and code coverage fits into 
this.

The way I understand this reasoning is: "we have failing tests" -> "we got 
to have graphs so that people know whether any more tests start failing". 
That sounds rather suboptimal to me. I would much prefer to fix the actual 
cause of pain rather than to provide tools which plot the pain level and 
frequency of patient's seizures. Defect tracking is a tool, not a goal. If 
there is another tool which ensures that no additional defects can enter a 
repository, why not simply use that? (Please see the report for dealing 
with non-deterministic tests; this *is* covered.)

> 2) Some notes that a proposed patch may be based against a week old
> revision. This is making assumptions about how a Jenkins setup would
> be made - as we're in control of what it does there is nothing to stop
> us trying to apply the patch on top of the latest code in Git.

You have to somehow account for the delay between a human reviews a patch 
and the time it gets merged. Any patch could have landed in the meanwhile. 
What builds a patch queue so that you have this covered?

> In terms of checking dependency buildability, once again - this is
> possible but we don't do anything like this at the moment to preserve
> resources.

Given enough CPUs, how would you do this with our current Jenkins setup? 
This is absolutely not just a resource problem; you need something to build 
these projects against appropriate refs, and do this in an atomic manner. 
Zuul does it, and internally it's a ton of work. Jenkins does not do it. 
KDE's CI scripts do not do it, either.

> As for it not having a declarative configuration, we're in the process
> of refining the Groovy based Job DSL script Scarlett wrote. This will
> shift the configuration of Jenkins jobs entirely into Git, and
> depending on how things work out - jobs could be automatically setup
> when new repositories come into existence or when branch metadata is
> revised.

The report said that there are automated tools which provide workarounds 
for this aspect of Jenkins. It's good to see KDE adopting one now.

However, you are investing resources in making a tool with horrible 
configuration more usable. More power to you, it's your time, but this is 
exactly what the report says -- you are working around the tool's 
limitations here.

> About the only point left standing is that it doesn't check individual
> subcommits, but we've yet to see whether the KDE project as a whole
> sees this as necessary

The fact that most of KDE's projects have no use of pre-merge CI does not 
imply that projects who want to opt-in should be punished. This is 
absolutely *not* about pushing an advanced workflow to everybody. It is 
about being *able* to accomodate such an advanced workflow at all.

This is possible today with Gerrit+Zuul, and it was easy to configure that 
way. Our Zuul builds the dependencies (=projects "outside of Gerrit") on a 
per-push basis, exactly how KDE's Jenkins does it. There is no time wasted 
on doing per-commit builds for these, because nobody could react on 
failures anymore -- a change is already in master by that point.

What this is all about is enforcing that each commit which goes through 
code review is regression free.

Cheers,
Jan

-- 
Trojitá, a fast Qt IMAP e-mail client -- http://trojita.flaska.net/




More information about the kde-core-devel mailing list