Re: Testing GHC against Hackage via CI

2019-03-05 Thread Ben Gamari
Richard Eisenberg  writes:

> How will this affect workflow of developers submitting patches? For
> example, suppose I write a user-facing change that breaks some of
> these packages. Am I expected to patch up the breakage? How? Will the
> CI infrastructure detect this before merging or after?
>
> To be clear, I don't have specific answers I'm looking for here. In
> particular, I think it's reasonable to ask that the developer of a
> user-facing feature make sure that head.hackage works with the
> feature. This has the distinct advantage of making sure the developer
> knows that their patch breaks code and how it must be fixed. Indeed,
> this can all be fodder to force the developer to update the GHC
> migration guide alongside their work in fixing head.hackage. I just
> want to know what the steps are. :)
>
All very good questions. Frankly, many of them are still open. I should
have made this clearer:

The short answer is that in the short term very little is changing.
head.hackage is, at the moment, merely another tool that we can use to
evaluate contributions and identify regressions in the compiler; it's
not (yet) a requirement that MRs pass the job.

The reason is that I don't think we are yet in a position to start
requiring contributors to update head.hackage. For one, the workflow for
doing so is arguably not well enough documented (something that I will
be working to fix). Moreover, it's quite unclear to me exactly how much
work maintaining this infrastructure is going to require. I'd like to
better understand this before requiring that contributors put in the
work.

Cheers,

- Ben



signature.asc
Description: PGP signature
___
ghc-devs mailing list
ghc-devs@haskell.org
http://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-devs


Re: Testing GHC against Hackage via CI

2019-03-05 Thread Richard Eisenberg
How will this affect workflow of developers submitting patches? For example, 
suppose I write a user-facing change that breaks some of these packages. Am I 
expected to patch up the breakage? How? Will the CI infrastructure detect this 
before merging or after?

To be clear, I don't have specific answers I'm looking for here. In particular, 
I think it's reasonable to ask that the developer of a user-facing feature make 
sure that head.hackage works with the feature. This has the distinct advantage 
of making sure the developer knows that their patch breaks code and how it must 
be fixed. Indeed, this can all be fodder to force the developer to update the 
GHC migration guide alongside their work in fixing head.hackage. I just want to 
know what the steps are. :)

Thanks,
Richard

PS: And thanks, generally, to all of you doing the heavy lifting to get this 
infrastructure in place. This is all quite wonderful, even if there have been 
some bumps in the road en route!

> On Mar 5, 2019, at 1:10 PM, Ben Gamari  wrote:
> 
> Hello everyone,
> 
> As many of you know, recently I have been working on bringing up
> infrastructure for using CI-produced binary distributions to build a
> subset of Hackage using the head.hackage patchset.
> 
> Happily, this effort has now converged on a usable result, embodied in
> two merge requests:
> 
> * https://gitlab.haskell.org/ghc/head.hackage/merge_requests/2
> * https://gitlab.haskell.org/ghc/ghc/merge_requests/465
> 
> ghc/head.hackage!2 adds CI support to head.hackage. In addition to the
> usual pass/fail status, this job produces (e.g. [1]) a few additional
> products:
> 
> * a JSON summary of the run, describing the dependency graph and
>   pass/fail state of each package. we can feed to an external service to
>   track newly-failing packages.
> 
> * a (rendered) graphviz graph showing the dependency structure of the
>   built packages, each node colored by its pass/fail state
> 
> * a tarball of build logs, each including statistics from
>   -ddump-timings. The hope here is that we can use this to track
>   compiler performance on real-world code
> 
> ghc/ghc!465 adds a job to GHC's own CI pipeline to trigger a
> head.hackage job using the binary distribution produced earlier in the
> pipeline. This job will run automatically under a variety of
> circumstances:
> 
> * via the scheduled nightly pipeline
> 
> * on merge requests labelled with the `user-facing` label
> 
> * when manually started using a button on the MR's Pipelines tab
> 
> Currently the head.hackage MR tests only a small number of Hackage
> packages (and their dependencies). Specifically, we currently build
> `aeson`, `criterion`, `singletons`, `servant`, and `scotty`. This pulls
> in 127 packages in total.
> 
> There are a few things that remain to be done:
> 
> * Better document the existence of the job and how it is triggered
> 
> * Document how to update the list of tested packages
> 
> * Work out how to handle tracking of persistent breakage (e.g. we want
>   a notification when a package initially breaks but not in later
>   builds)
> 
> * Automatically push patched packages to a Hackage repository (e.g.
>   head.hackage.org) as a result of CI.
> 
> Cheers,
> 
> - Ben
> 
> 
> [1] https://gitlab.haskell.org/ghc/head.hackage/-/jobs/38022
> ___
> ghc-devs mailing list
> ghc-devs@haskell.org
> http://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-devs

___
ghc-devs mailing list
ghc-devs@haskell.org
http://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-devs


Re: Testing GHC against Hackage via CI

2019-03-05 Thread Ben Gamari
Ryan Scott  writes:

> This is fantastic work! I'm looking forward to using this.
>
> Are there plans to merge GitLab's fork of head.hackage back into the
> upstream repo [1]? I ask since I regularly submit patches to upstream, but
> if the GitLab CI is using the fork, then it may take some time for upstream
> changes to make their way back to the fork.
>
Yes, if it's okay with Herbert I think this branch should be merged
upstream.

We might also consider going even further: making
gitlab.haskell.org/ghc/head.hackage the upstream repository. If we don't
do this I would likely need to maintain a "stable" branch alongside
`master` to ensure that the head.hackage build doesn't break due to bad
patches landing in `master`. Moving the upstream to GitLab would avoid
this since all patches landed would go through CI.

Cheers,

- Ben


signature.asc
Description: PGP signature
___
ghc-devs mailing list
ghc-devs@haskell.org
http://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-devs


Re: Testing GHC against Hackage via CI

2019-03-05 Thread Ryan Scott
This is fantastic work! I'm looking forward to using this.

Are there plans to merge GitLab's fork of head.hackage back into the
upstream repo [1]? I ask since I regularly submit patches to upstream, but
if the GitLab CI is using the fork, then it may take some time for upstream
changes to make their way back to the fork.

Ryan S.
-
[1] https://github.com/hvr/head.hackage
___
ghc-devs mailing list
ghc-devs@haskell.org
http://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-devs


Testing GHC against Hackage via CI

2019-03-05 Thread Ben Gamari
Hello everyone,

As many of you know, recently I have been working on bringing up
infrastructure for using CI-produced binary distributions to build a
subset of Hackage using the head.hackage patchset.

Happily, this effort has now converged on a usable result, embodied in
two merge requests:

 * https://gitlab.haskell.org/ghc/head.hackage/merge_requests/2
 * https://gitlab.haskell.org/ghc/ghc/merge_requests/465

ghc/head.hackage!2 adds CI support to head.hackage. In addition to the
usual pass/fail status, this job produces (e.g. [1]) a few additional
products:

 * a JSON summary of the run, describing the dependency graph and
   pass/fail state of each package. we can feed to an external service to
   track newly-failing packages.

 * a (rendered) graphviz graph showing the dependency structure of the
   built packages, each node colored by its pass/fail state

 * a tarball of build logs, each including statistics from
   -ddump-timings. The hope here is that we can use this to track
   compiler performance on real-world code

ghc/ghc!465 adds a job to GHC's own CI pipeline to trigger a
head.hackage job using the binary distribution produced earlier in the
pipeline. This job will run automatically under a variety of
circumstances:

 * via the scheduled nightly pipeline

 * on merge requests labelled with the `user-facing` label

 * when manually started using a button on the MR's Pipelines tab

Currently the head.hackage MR tests only a small number of Hackage
packages (and their dependencies). Specifically, we currently build
`aeson`, `criterion`, `singletons`, `servant`, and `scotty`. This pulls
in 127 packages in total.

There are a few things that remain to be done:

 * Better document the existence of the job and how it is triggered

 * Document how to update the list of tested packages

 * Work out how to handle tracking of persistent breakage (e.g. we want
   a notification when a package initially breaks but not in later
   builds)

 * Automatically push patched packages to a Hackage repository (e.g.
   head.hackage.org) as a result of CI.

Cheers,

- Ben


[1] https://gitlab.haskell.org/ghc/head.hackage/-/jobs/38022


signature.asc
Description: PGP signature
___
ghc-devs mailing list
ghc-devs@haskell.org
http://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-devs