Skip to content

Commit d837b9e

Browse files
alice-i-cecileJondolfbushrat011899
authored
Establish structure and process for in-repo release notes (#18427)
# Objective As discussed in ##16431, our release process is a major bottleneck, difficult to collaborate on and a serious source of burnout (hi!). Writing all of the release notes and migration guides at the end of the cycle is miserable, and makes it harder to coalesce them across multiple PRs doing related work. ## Solution This PR largely implements the solution designed and discussed in the [Better release notes](https://discord.com/channels/691052431525675048/1331412459432710247) working group, unofficially led by @NthTensor. The [plan](https://hackmd.io/NBKkrGbbS5CaU7PsQUFGJQ) laid out in the linked HackMD has largely been folllowed, although I've also added Migration Guides too: they suffer much the same problem. I've also moved away from using the PR number as the title for the file: if we're hand-authoring the files we can do much better than that! The READMEs for each folder describe the process in more detail: please read (and comment on them!). ## Questions for reviewers / fellow implementers - I've moved away from the current "store metadata in a mega-file" approach, and moved it towards a "put the metadata in the file you're editing" design. I much prefer the locality, but it may be harder to get to play nice with our website generation. Do you want me to revert that? See [this folder](https://github.com/bevyengine/bevy-website/tree/main/release-content/0.15) for the current format. - does the "how to write release notes / migration guides" sections make sense to you here? Normally I would toss this in the Contributor's Guide, but I do like it being right beside the spot you're making changes ## Follow-up work - [ ] add a job which checks for the labels and blocks the PR if no file in the correct folder is merged - [ ] add a CI job to do basic format validation on the files inside of these folders - [ ] generate the release notes and migration guides using a modified version of [the tooling](https://github.com/bevyengine/bevy-website/tree/main/generate-release) one last time for 0.16 - [ ] remove the release notes and migration guide generating tools - [ ] build a new pipeline to turn the copy-pasted release notes here into actual website content - [ ] rethink how we're doing release notes to provide better punchy summaries for casual readers - [ ] create a CI job that checks for new or edited migration guides and automatically labels the PR --------- Co-authored-by: Joona Aalto <jondolf.dev@gmail.com> Co-authored-by: Zachary Harrold <zac@harrold.com.au>
1 parent 90ce1ee commit d837b9e

File tree

4 files changed

+116
-0
lines changed

4 files changed

+116
-0
lines changed

working-migration-guides/README.md

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
# Bevy's Migration Guide Process
2+
3+
Hi! Did someone add `M-Needs-Migration-Guide` to your PR? If so, you're in the right place.
4+
Let's talk about how this process works.
5+
6+
When we make breaking changes to Bevy, we need to communicate them to users so their libraries and applications can be moved to the new Bevy version.
7+
To do this, we write and ship a [migration guide](https://bevyengine.org/learn/migration-guides/introduction/) for every major Bevy version.
8+
To avoid a crunch at the end of the cycle as we *write* all of these,
9+
Bevy asks authors (and reviewers) to write a draft migration guide as part of the pull requests that make breaking changes.
10+
11+
## Where to put your migration guides
12+
13+
Each major Bevy version (e.g. 0.12, or 2.0) will get its own migration guide.
14+
The draft migration guides are organized into a folder of the same name inside of `bevyengine/bevy/working-migration-guides`.
15+
16+
When we publish our first release candidate for a cycle, these notes are moved from `bevyengine/bevy`, and into `bevyengine/bevy-website`,
17+
where they will receive a final editing pass.
18+
19+
## What to put in your draft migration guide
20+
21+
A `template.md` file is provided in `bevyengine/bevy/working-migration-guides`: copy-paste that to get started!
22+
23+
Migration guides are intended to briefly communicate:
24+
25+
- what has been changed since the last release?
26+
- why did we make this breaking change?
27+
- how can users migrate their existing code?
28+
29+
Draft migration guides *do not need to be polished*: it's okay if you're not a native English speaker or aren't a wordsmith.
30+
Editing is easy; we just want to have an expert's view on the questions above.
31+
32+
When writing migration guides, prefer terse, technical language, and be sure to include terms that users might search for.
33+
Migration guides are not read end-to-end: instead, they are navigated via Ctrl+F as the reader follows the compiler errors and bugs.
34+
35+
## Grouping changes into migration guides
36+
37+
Migration guides should reflect the complete experience of migrating from the last major Bevy version to the next one.
38+
If there are *multiple* breaking changes layered on top of each other,
39+
you should edit the existing migration guide, rather than write a new one.
40+
41+
While some brave users live on Bevy's `main` branch, we can trust them to use the draft migration guides and read the PRs in question if needed.
42+
43+
As a result, each draft migration should be given a clear name matching the section title.
44+
These titles should reflect the name of the old feature that was broken or changed.
45+
46+
## Note on the `#[deprecated]` attribute
47+
48+
Rust provides a very helpful [`#[deprecated]` attribute](https://doc.rust-lang.org/reference/attributes/diagnostics.html#the-deprecated-attribute), which is a compiler-aware way to mark a piece of Rust code as obsolete and slated for removal.
49+
This can be a nice a tool to ease migrations, because it downgrades errors to warnings and makes the migration information available right in the user's IDE.
50+
51+
However, it's not always possible to use this attribute, and Bevy does not consider it to be a substitute to a migration guide entry.

working-migration-guides/template.md

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
# Feature that broke (remember to update the file name)
2+
3+
prs = [14791, 15458, 15269]
4+
5+
Add migration guide content here. Use bullet points, make sure it's searchable. Briefly communicate:
6+
7+
- what has changed since the last release?
8+
- why did we make this breaking change?
9+
- how can users migrate their existing code?

working-release-notes/README.md

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
# Bevy's Release Notes Process
2+
3+
Hi! Did someone add `M-Needs-Release-Note` to your PR? If so, you're in the right place.
4+
Let's talk about how this process works.
5+
6+
When we make high-impact changes to Bevy, we need to communicate them to users (and potential users!).
7+
For the most part, this is done via our [famously in-depth release notes](https://bevyengine.org/news/).
8+
To avoid a crunch at the end of the cycle as we *write* all of these,
9+
Bevy asks authors (and reviewers) to write draft release notes as part of the pull requests to add high-impact features.
10+
11+
## Where to put your release notes
12+
13+
Each major Bevy version (e.g. 0.12, or 2.0) will get its own set of release notes.
14+
The draft release notes are organized into a folder of the same name inside of `bevyengine/bevy/working-release-notes`.
15+
16+
When we publish our first release candidate for a cycle, these notes are moved from `bevyengine/bevy`, and into `bevyengine/bevy-website`,
17+
where they will receive a final editing pass and any multimedia.
18+
19+
## What to put in your draft release notes
20+
21+
A `template.md` file is provided in `bevyengine/bevy/working-release-notes`: copy-paste that to get started!
22+
23+
Release notes are intended to capture the essence of:
24+
25+
- what has been changed or added?
26+
- why is this a big deal for users?
27+
- how can they use it?
28+
29+
Draft release notes *do not need to be polished*: it's okay if you're not a native English speaker or aren't a wordsmith.
30+
Editing is easy: as someone with the expertise needed to implement an awesome feature we want a rough expert's perspective that we can shape into something that reads smoothly and has a consistent voice.
31+
32+
Images and videos are lovely: shiny screenshots of rendering features, diagrams, performance metrics, and cool examples are all a great choice.
33+
However, **do not put multimedia content in this folder**.
34+
We want to avoid bloating the git repo for `bevyengine/bevy`, which can cause problems for contributors (and GitHub).
35+
Instead, drop them in your PR description and we'll collect them as we're finalizing the release notes.
36+
37+
## Grouping content into release notes
38+
39+
Release notes should be organized by "rough feature", not "per PR".
40+
Bevy users don't care if the work was done in 17 PRs, or a single 10k line PR.
41+
42+
As a result, each draft release note should be given a clear name matching the section title,
43+
and related PRs (and their authors!) should be collected into the metadata listed in those markdown files.
44+
45+
If you make changes or extensions to an upcoming major feature, you should probably revise the release note for that feature.

working-release-notes/template.md

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
# Feature Name (remember to update the file name to match)
2+
3+
authors = ["@FerrisTheCrab", "@BirdObsessed"]
4+
contributors = ["@HelpfulHelper"]
5+
prs = [14791, 15458, 15269]
6+
7+
Add release note content here. Answer:
8+
9+
- what has been changed or added?
10+
- why is this a big deal for users?
11+
- how can they use it?

0 commit comments

Comments
 (0)