-
Notifications
You must be signed in to change notification settings - Fork 698
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Shall we use head.hackage in CI for the newest GHC (or all GHCs?) #9808
Comments
One point that occurred to me after the call: periodically we bump bounds, and those PRs need to be run without an index-state if we do otherwise freeze it for CI. |
Without putting a lot of thought into it, my immediate feeling is that head.hackage is not stable enough to be used as the basis for CI. After putting a few more seconds of thought into it, I do think it is possible, if done with care. Some of the questions in the OP don't make sense to me, so I wonder if we lack a clear shared understanding of what head.hackage is. For instance, I understand that head.hackage is only suitable for use with GHC HEAD, i.e. the tip of GHC's master branch. Is that what this ticket is about? |
@chreekat: thank you for your thoughts. I think you are right head.hackage is likely to break with old GHCs, even though it often works, I think (it's an overlay, so old packages are still visible, right?). In any case, this was intended to be used for testing the GHC version that is not yet released, but that a cabal major release needs to sync with despite it not being released. Also, it would let us test against the versions of package prepared for the newest GHC, which we can't test from normal Hackage. It would also often catch problems with newest versions of package on Hackage not forced by a GHC release process, because the build plans for that pipeline will normally not exclude any packages as too new. That CI would be the high-breakage part of our CI, maybe even run overnight and not with every PR. When it's in place, we could make the rest of CI conservative, e.g., sharing the same index state pin as the release CI. Does this clarify things? |
Ok! head.hackage is not only good but necessary for this use case. But I would not recommend trying this use case until https://gitlab.haskell.org/ghc/ghc/-/issues/24000 is solved. I mean, you can try, but I don't know if the cost-benefit tradeoff would be worth it. |
Here's my GHC Nightly status dashboard: https://grafana.gitlab.haskell.org/d/ab109e66-a8a1-4ae9-b976-40e2dfe281ab/availability-of-ghc-nightlies-via-ghcup?orgId=2&refresh=1d |
I followed the above head.hackage instructions with master. The default
I can fix this by commenting out the constraint conflict on $ git diff
diff --git a/cabal.project.local b/cabal.project.local
index 576224433..9b6fb23cb 100644
--- a/cabal.project.local
+++ b/cabal.project.local
@@ -31,7 +31,7 @@ constraints:
template-haskell installed
constraints:
- Cabal ==2.4.1.0 || ==3.0.2.0 || ==3.2.1.0,
+ -- Cabal ==2.4.1.0 || ==3.0.2.0 || ==3.2.1.0,
Cabal-syntax ==3.8.1.0,
FPretty ==1.1,
JuicyPixels ==3.3.8, Try again and there's another conflict for
$ git diff
diff --git a/cabal.project.local b/cabal.project.local
index 576224433..c92471375 100644
--- a/cabal.project.local
+++ b/cabal.project.local
@@ -31,8 +31,8 @@ constraints:
template-haskell installed
constraints:
- Cabal ==2.4.1.0 || ==3.0.2.0 || ==3.2.1.0,
- Cabal-syntax ==3.8.1.0,
+ -- Cabal ==2.4.1.0 || ==3.0.2.0 || ==3.2.1.0,
+ -- Cabal-syntax ==3.8.1.0,
FPretty ==1.1,
JuicyPixels ==3.3.8,
ansi-pretty ==0.1.2.2, Now |
Who maintains https://ghc.gitlab.haskell.org/head.hackage/? It would be nice to have 4 space indenting in the project to allow more room for |
|
I'm 👎 on adding head.hackage to the CI. I admit I have been out of the loop and missed some conversations but I fail to see what problems using head.hackage will solve. |
The main one is that, if you are making a Cabal release intended for an unreleased ghc, you generally need to use head.hackage to get compatible dependencies. |
There'll be quite a lot of churn won't there if we're going to keep up? I had a stale
Aside from my manual edits for $ curl https://ghc.gitlab.haskell.org/head.hackage/cabal.project >> cabal.project.cmp
$ diff cabal.project.local cabal.project.cmp
6,7d5
< 7541f32a4ccca4f97aea3b22f5e593ba2c0267546016b992dfadcd2fe944e55d
< 26021a13b401500c8eb2761ca95c61f2d625bfef951b939a8124ed12ecf07329
8a7,8
> 26021a13b401500c8eb2761ca95c61f2d625bfef951b939a8124ed12ecf07329
> 7541f32a4ccca4f97aea3b22f5e593ba2c0267546016b992dfadcd2fe944e55d
34,35c34,35
< -- Cabal ==2.4.1.0 || ==3.0.2.0 || ==3.2.1.0,
< -- Cabal-syntax ==3.8.1.0,
---
> Cabal ==2.4.1.0 || ==3.0.2.0 || ==3.2.1.0,
> Cabal-syntax ==3.8.1.0,
67a68,71
> ghc-tcplugins-extra ==0.4.5,
> ghc-typelits-extra ==0.4.6,
> ghc-typelits-knownnat ==0.7.10,
> ghc-typelits-natnormalise ==0.7.9,
111d114
< vector-stream ==0.1.0.0, Also I am hitting #9829 after an update;
To update head.hackage, after first deleting
Using the newest head.hackage and repeating my manual edits to exclude |
Please do not even remotely consider using head.hackage. It is a wart that must stay internal to GHC. If this proliferates outside of GHC we have absolutely lost. Head.hackage exists only to paper over the fact that GHC head might be in flux in a way that is incompatible with the ecosystem. This in itself should signal strong enough that head.hackage should not be used outside of GHC. Ontop of that is head.hackage not even particularly stable. You can't pin it properly. No, just no, don't use it. It shouldn't even exist. The fact that it does is bad enough, if it now also leaves the confines of GHC only, we can just all throw our hand up in despair. |
Fair. Why would you want to do this though? (a) in preparation for a GHC release? If so head.hackage for that GHC release should already be the identity (empty!) |
We discussed
#9610 (comment)
on a cabal fortnightly chat and during the discussion @ulysses4ever proposed a somehow related idea to move our CI (at least for the newest GHC) to https://ghc.gitlab.haskell.org/head.hackage/. I think this should have a higher priority than the original proposal to fix
--index-state
in our github CI. Let's discuss (and volunteer for subtasks). E.g.,--dry-run
or some other policy, e.g., to run short tests in many configurations and long ones only in one (but we don't only worry about CI time, but also information overload, especially for new contributors that have to read CI results).In addition, let's discuss the original proposal, which included the
--index-state
proposal for the whole github CI and more. Here's are some remarks about the proposal from the cabal fortnightly chat:CC: @chreekat @philderbeast
The text was updated successfully, but these errors were encountered: