-
Notifications
You must be signed in to change notification settings - Fork 704
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
Hackage revision policy #9531
Comments
Thank you @hasufell. That's as a good opportunity as any to actually forge our policy on revisions. To clarify, let me copy what I said on Matrix:
|
I’d expect Cabal to rely on revisions even more than an average Haskell package, because of sparse release cycles and ripples they cause. In the context of #9523 a revision seems a no-brainer to me, I don’t see who is to win from postponing it and forcing a new Cabal release instead. |
I don't recall any policy about avoiding hackage revisions for cabal.There's no considerations I can think of that would affect cabal different than any other hackage package regarding this. We just should try to also ensure that the bounds are changed in-repo as well, but this also holds for packages on hackage in general. |
I feel like revisions unblock more people than they trouble, so I'm in support of revisions in the Cabal project. |
If a build plan works (for some definition of works) it should be allowed by the version bounds. GitHub can be updated to reflect what is on Hackage (like everybody does). |
Can I expect cabal developers to take care of this or should this be redirected to hackage trustees now and in the future? |
Thank you for the discussion. It seems we have a concrete policy emerging. Let's also mention this on Thursday's cabal dev's meeting. Can we try to make the policy more precise? What are the pre-conditions for a revision?
edit: |
To clarify, both cabal 3.10.3 and cabal 3.12.1 releases are imminent, from what I understand. This reminds me, we also need to clarify if revising many subsequent versions of cabal (as is proposed by @hasufell in this case) is something routine or exceptional. And if we expect CI test runs for all the versions or only major ones. Let me add a point above. |
If a bug pops up becuase of a bound change, there is the possibility that no commit in the repository matches what users downloaded from Hackage, making bug-fixing a potential nightmare. edit: as a simple example, take this git history
Now, if we revise So if we introduced a bug, it might be a pain to debug, especially so if the snapshot at If |
Yes, at least a warning in our docs somewhere could be beneficial, perhaps recommending I'm sure this has been discussed to death for other projects and in flamewars on the internets and trustees are dead tired of this. Dear trustees, is there a FAQ somewhere that you distilled from such discussion? Tips and tricks, what can go wrong, how to best warn about the discrepancy, what's the answer to folks worried about signed/unsigned blobs and possible attacks, etc.? (I'm just making up problems --- I haven't participated in the flame wars and I'm generally pro-revisions, especially for packages that don't release often.) |
The typical policy for most packages is to bump upper bounds only on the most current version of a given package (or perhaps on the most current minor release among a all of a few major release series, if multiple major releases are being supported). In the unfortunate event that bounds need to be restricted, that needs to happen on all affected packages, not just the most current. In conjunction with bounds bumps or restrictions, typically only the head of the repository (or the branch for each major release) has its cabal file edited in github. I do not believe there are any common standards on what is considered "sufficient evidence" for a bounds change, since project structures are all so different. there's a faq here, but i don't know if it discusses most of what you would be asking for. as long as you just change bounds to be more accurate through revisions, there's no special tips or tricks needed, nothing particular that can go wrong, no need to warn about discrepancies, and no issue arises with signing or possible attacks: https://github.com/haskell-infra/hackage-trustees/blob/master/revisions-information.md again: we've never had a policy that i recall against revisions. hecate made some revision to 3.10.1.0 just five months ago (https://hackage.haskell.org/package/cabal-install-3.10.1.0/revisions/) i think this is memory playing tricks. |
There seems to be an underlying assumption that package builds are set in stone and it's only revisions which could get in the way of reproducibility. But usually a Hackage package can be built with a multitude of compilers and dependency versions; revisions do not really bring much added complexity to the equation.
That's my experience as well. |
@gbaz: I've never said we had a policy nor policy against. You are probably reading Julian's paraphrase instead of the transcript. I, too, revised cabal on Hackage and related tools numerous times. But we can have a policy now. Thank you for your input. That covers points from 7 upwards. How about the "pre-conditions for a revision" points? Dear trustees, when you relax bounds, what are your preconditions? Dear cabal maintainers, what is our preference? |
Fundamentally Hackage trustees can relax bounds as they see fit, following the policy. Practice varies from case to case and from trustee to trustee, depending on perceived urgency and effect, but usually the presence of relaxed bound in |
I didn't say you have a policy either if you read my post carefully. But I think following this thread, it seems clear now that there was no discussion amongst cabal developers agreeing to avoid revisions. That was your claim and that is why I got resistance from you when asking to publish revisions. Which is rather weird, because I provided a PR and asked you to backport before doing the revision. So your point about revisions and branches diverging doesn't make sense. The rest of the discussion is bikeshedding with little value to me. I'm disappointed in you that such a simple request caused this amount of resistance and bikeshedding. Look at my position: I'm not dealing with just Cabal. I'm dealing with a shitton of packages that potentially need laxer upper bounds, so that I can promote the AFPP proposal and the new OsPath API without users being locked out due to unsolvable build plans. If every upstream would react this way, I'd have no energy left. However, I'm happy that this discussion at least helped to clear up some questions for you. Next time, I'll probably approach hackage trustees first, though, and follow whatever requests they have. |
It is recommended to ask respective maintainers first by publicly raising an issue or leaving a comment under a relevant PR. If they agree, case solved, no need to spend sparse resources of Hackage trustees. If they disagree, they can probably provide a reason. If they ignore, forget or are busy, wait a week or two and file an issue at https://github.com/haskell-infra/hackage-trustees. We do not really want to supplant maintainers or interfere with their line of work out of the blue. |
Answering to the question how revisions could be tracked in the git repo (Q by @ffaf1): A workflow to create revision r of x.y.z.w would be:
Point 4. could be problematic since CI cannot really be versioned; GHA does not support any versioning of their runners. That would mean that either CI changes need to be backported (maybe unrealistic for a complex project like Cabal), or testing is only done locally, maybe be more than one individual. |
could you add me to the google calendar again? I have received any invitation in months, so I suspect that I fell out somehow. |
Hi Andreas. You are listed under your gmail address. Is it still valid? I've sent you a past invitation with your address in it. Let's sort it out via email. |
@hasufell: I don't have spare "energy" to dispute your claims, but let me state two things:
|
Dear all. I appreciate that everyone is extremely passionate about their work in this community, but please let's be patient and charitable to each other. We are in for the long haul. If I may, I'd suggest to dedicate this topic to a general policy and discuss individual cases in relevant issues / PRs. |
Edit: The new authoritative location for the document is now https://github.com/haskell/cabal/wiki/Cabal-Packages-Hackage-Revision-Policy In today's cabal devs video chat we've agreed on a policy (but we are still open to feedback and amendments (please comment below), especially from people absent in the latter part of the meeting; minor edits to this policy will be made here without versioning nor notifications). Here goes version 1.0: tl;dr
Full text:
Edit: Addendum for old cabal versions:
|
Thank you everybody for contributing to this process. Loose ends:
|
Just to be clear. I did not suggest to overrule or circumvent cabal mantainers. My opinion on keeping project boundaries is very strong. My expression was based on @Mikolaj indicating he trusts hackage trustees (conversation on matrix):
I have nothing further to add. |
I really wish to see movement in the opposite direction: a lot of distros are still on 3.8 or earlier, or just adopting it now. The ecosystem and community would be better served by maintaining more than one stable branch and ideally their minor releases too. eg I feel that probably really warrants a new 3.8 release. Also the fact that 3.8 couldn't/can't be built with ghc-9.4 (without revision) is kinda ridiculous... and this keeps happening. |
@juhp: thank you for your comment. BTW, you posted it twice; feel free to remove one of the copies. I think the topic deserves its own ticket, because not revising many releases (the intersection of your suggestions with this policy) is only a small aspect of the issue of active maintenance of many branches at once. Please open the ticket and move the discussion there, if you'd like to continue the thread. My seed input for the new ticket is the following: I think, to be able to manage many active branches, we need a better release process, for which we need more release managers to use it and simplify it (maybe even release managers responsible for a single branch until it's officially retired?), for which we need a deeper developer pool to elect the release managers from. The single biggest practical problem with many active branches is the fragility of our GHA CI, which makes it necessary to produce many hacks and patches, some of them conflicting with normal commits that are definitely not getting backported. So this is real work, for which we need volunteers. Let me ask in the next dev's meeting if anybody would like to volunteer to indefinitely release-manage an old branch (e.g., 3.10 after 3.10.3, which finally stabilizes it, I hope). |
@Mikolaj I agree with you, particularly working CI seems a prerequisite. Okay I will try to open an issue soon to continue the discussion, thanks |
This might have already been discussed but I don't see the answer explicitly articulated in this thread. How would a cabal policy relate to the work of hackage trustees? As a hackage trustee, I am mostly interested in keeping old versions of cabal-install (as uploaded on hackage) alive by making sure they still build correctly. Apologies if I bring up an old discussion; I just got back from holidays :) |
Indeed, this discussion and policy was, implicitly, only about bound bumps needed for recent cabal versions to support new versions of packages. We are just waking up to the other case, which is bumps of only old versions of cabal. Dear Hackage trustees, please do your thing as usual, while we discuss whether to reflect these bound changes on the old branches (with broken CI) or not here: #9616 |
@Mikolaj said in Matrix that cabal team decided to avoid revisions for "obvious reasons". I don't know what those are and didn't get a reference to the relevant discussion when I asked (supposedly that happened on matrix long time ago).
Can I get a clarification here?
CCing some hackage trustees: @Bodigrim @andreasabel @phadej @andreabedini
Context: #9523
The text was updated successfully, but these errors were encountered: