release process improvements #5807
Replies: 4 comments 1 reply
-
Decided to shift this to a discussion since I feel it's more brainstorming at this point. If and when there's any concrete action items stemming from this then those can be created as respective issues |
Beta Was this translation helpful? Give feedback.
-
Thanks for the writeup. Clippy seems to be released for every Rust version, does not have its own version number (i think?), and thus writes the changelog per each rust version (I'm on mobile so did not look where the changelog is published) We should adopt a similar scheme, abolish rustfmt's own versioning, abolish the github releases, and that should help with simplifying the workflow. |
Beta Was this translation helpful? Give feedback.
This comment was marked as off-topic.
This comment was marked as off-topic.
-
@calebcartwright #6032 should help us address this point! |
Beta Was this translation helpful? Give feedback.
-
(n.b. while anyone should feel free to share perspectives, this thread is largely intended for discussion amongst the rustfmt team and recurring contributors)
Rustfmt's primary (and only supported) release model is through the official Rust distribution channels; i.e. users are expected to grab it via Rustup along with their respective toolchain. As such, Rustfmt changes are ultimately "released" by synchronizing those changes into the main rust-lang/rust repo.
However, the current process has some surprising vectors of complexity and time consuming activities, many historical in nature, that make this more painful than, IMO, it could be.
Relevant background context
rustc_parse
,rustc_ast
, etc.) which are consumed from the sysroot with dynamic linking onrustc_driver
. This adds some additional steps when building rustfmt from source, and as such if Rustfmt was also published on crates.io it would in turn would create some challenges/complexity for consumers of the crate(s)Current release process
Note that these steps are sequenced in the order I typically follow, though there's not always a strict pre/post dependency between these list items (e.g. the changelog could be updated before the incoming subtree sync)
As mentioned earlier, this can be a rather time consuming process from start to finish.
Yes it's true some of the steps are just "waiting" and there's some steps with variable duration (e.g. how long it takes for bors to start building). However, each and every step has to be performed, and there's a lot of varying factors that can complicate things at various steps (e.g. system modifications necessitating re-patching of git's subtree and having to rebuild the r-l/rust index), or even derail the process and require starting over (a different PR touching rustfmt source in r-l/rust landing)
I typically plan on needing to be able to be fully available for a minimum of 2-3 consecutive hours before I start this because any delays around any step in the process can greatly increase the odds of one of those external circumstances requiring the whole process be restarted. I've been burned several times trying to do a release in a piecemeal, spread out process, and as such strongly advise against it.
This is obviously problematic for many reasons, not the least of which being my bandwidth. Fortunately, I typically have multiple, shorter duration (e.g. 30 minute) windows of availability throughout the day which are great for triaging issues, helping users, and even working through parts of code reviews. However, those short windows scattered about are insufficient for going through the current release process, and it's increasingly uncommon for me to have a full 3 hours of consecutive availability.
We can certainly improve things a bit by incorporating more people, either another maintainer driving the entire process or a "pair release" type of exercise where we can split tasks when we have adjacent/overlapping availability. I'd like to pursue that in parallel (cc @ytmimi), though I'd also really like to focus on how we can improve the process itself.
I've been noodling on this for a while, and I think some of the lowest hanging fruit would be a couple new procedural items that could lessen the pain on existing steps:
release-notes
label to PRs/issues that we believe warrant a changelog entry, and I think we should try to get in the habit of more frequently doing this and also updating the changelog in between and independent of releasesBeyond those procedural items, I think we could also look into whether certain steps could and should be removed. As an example, if we were to stop versioning rustfmt independently of Rust, then we'd be able to dump several steps and PRs (e.g. the versioning and potential tagging too since the main Rust release process could handle that).
I think we also need to seriously talk about dropping our GitHub Releases, at least the associated binaries (which aren't really viable anymore anyway (refs #5761, #5675 (comment), #5675 (comment))
cc @rust-lang/rustfmt @CosmicHorrorDev @fee1-dead @HarrisonHemstreet
Beta Was this translation helpful? Give feedback.
All reactions