Pre-Master checks (Was: Nightlies)

Richard Eisenberg eir at cis.upenn.edu
Tue Feb 4 14:42:32 UTC 2014


Yay!

I, for one, would probably submit more bugfix patches with this structure in place. I take validating seriously, but my daily schedule often involves switching machines and tasks, and once I press "validate", it's often hours before I actually look at the results... by which time, some other commit may have come through. My need (real or perceived) for an uninterrupted chunk of time to make a patch stops me from doing them, sometimes.

With Joachim's structure, I could spend a half hour doing a quick patch (especially comments!) and push and move on.

Please do it! :)

Thanks!
Richard

PS: Transparency in the git redirects would be nice, of course, but is in no way necessary. We could I suppose add a "push" script to the repo that handles some of the overhead.

On Feb 4, 2014, at 4:41 AM, Joachim Breitner <mail at joachim-breitner.de> wrote:

> Hi,
> 
> Am Dienstag, den 04.02.2014, 08:04 +0000 schrieb Simon Peyton Jones:
>> I want just to say thank you for thinking about this.  We badly need better nightly-builds for GHC, on a variety of platforms
>> a) to identify regressions, preferably to the actually commit that
>>   caused it, so Austin's big red message can go to the right person
> 
> I believe we can do better, so that Austin’s big red message does not
> have to be written in the first place.
> 
> Here is what I have in mind, and I’ll volunteer to implement it if
> people think it is a good idea and I get the resources/permissions:
> 
> Proposal
> ~~~~~~~~
> 
> Nobody gets to push to master directly. Instead, every push to master is
> diverted¹ to a temporary branch "validating/<some id>". One of our
> servers detects the appearance of such a branch and will
> * check it out,
> * validate it,
> * if ok: check if master can still be fast-forward’ed to it,
> * if yes: push to master.
> 
> If it does not validate, or if master has changed in between, the branch
> will be moved to failed/<some id>, and a message is sent to the pushing
> developer², including a tail of the log and a link to the full log.
> 
> Systems can fail, and maybe nothing validates anymore for reasons not
> easily fixable. For that case, a backdoor is available: Pushes to the
> branch "master-unchecked" will be moved to master, well, unchecked.
> 
> Benefits:
> * It is guaranteed that master has validated at least once somewhere.
>   I.e. no need to ask on the mailing list “does master validate for you
>   right now?”
> * It is now ok to do changes that are “obviously correct” (comment
>   changes, removing dead code, code reformatting) without having
>   to validate manually, which _saves developer time_ (our most precious
>   resource).
> 
> Downsides:
> * When two commits are racing for master, one will be rejected for
>   being a non-fast-forward commit. The user will then have to merge
>   or rebase and try again.
>   But: The same would be true if he was validating locally (unless he
>   does not validate the merge/rebase, in which case we are again where 
>   we don’t want to be: Unvalidated versions in master.)
> 
> 
> Is this something you would what, or could live with?
> 
> If it is technically feasible (given our hardware constraints,
> repository structure and git’s feature) is a different question, which
> needs to be discussed afterwards.
> 
> Greetings,
> Joachim
> 
> 
> 
> ¹ Might not be possible transparently
> (http://stackoverflow.com/questions/21362833), but for the sake of
> argument and workflow design, assume it was.
> ² As an approximation: The committer of the latest patch.
> 
> PS: I’m also considering (but not pushing hard) for a stronger variant
> as follows. We do not need to discuss that now and should, if at all,
> start the with the proposal above. I’m just adding it to show where this
> is going ...
> 
> Stronger proposal
> ~~~~~~~~~~~~~~~~~
> 
>        Every commit in master needs to be validated! 
> I tend to make sure that all patches on my branch validate individually
> (git rebase -i -x "./validate" is a great tool here, you should use it!
> ). Contributors who do not want to go through that trouble should then
> use "git merge --squash" to produce a single commit from their branch.
> 
> This would make the git history more useful for things like bitsecting.
> 
> 
> 
> -- 
> Joachim Breitner
>  e-Mail: mail at joachim-breitner.de
>  Homepage: http://www.joachim-breitner.de
>  Jabber-ID: nomeata at joachim-breitner.de
> 
> _______________________________________________
> ghc-devs mailing list
> ghc-devs at haskell.org
> http://www.haskell.org/mailman/listinfo/ghc-devs



More information about the ghc-devs mailing list