|
1 | 1 | # Release Notes
|
| 2 | + |
2 | 3 | Release notes are an important part of the release process and we aim to provide high quality notes with our software, by:
|
3 | 4 | 1. _Writing the notes collaboratively_, because nobody knows how to describe a feature to the users better than the team that worked on it.
|
4 | 5 | 2. _translating them_, so that more people are able to get them.
|
5 | 6 |
|
6 | 7 |
|
7 | 8 | ## Release notes workflow
|
8 |
| -1. In the root folder of every project, we maintain a `RELEASE-NOTES.txt` file that is updated by every PR that adds a relevant feature. As a reminder to developers and reviewers, we usually add a note about this in the project GitHub PR template. |
9 |
| -2. The `get_prs_list_action` action provides a list of all the merged PRs in a range of tags. |
10 |
| -3. During the code freeze, the release manager gets the release notes from `step 1` , uses `step 2` to get the list of merged PRs to verify/integrate the notes and write down the final copy. |
11 |
| -4. The copy is used to update the `metadata/release-notes.txt` file which contains only the release notes for the current version. |
12 |
| -5. The `xx_update_release_notes` action is used to update `metadata/app_store_strings.pot` with the content in `step 4`. |
13 |
| -6. `metadata/app_store_strings.pot` is uploaded to GlotPress for translations. |
14 |
| -7. At the end of the beta testing, the `xx_update_metadata` action is used to download the translation for the release notes and the other relevant metadata from GlotPress. |
15 | 9 |
|
16 |
| -_Note:_ All these actions need some not-trivial configuration, so it’s usually best to add related lanes in the project and use them to invoke the actions. |
| 10 | +1. In the root folder of every project, we maintain a `RELEASE-NOTES.txt` file that is updated by every PR that adds a relevant feature. As a reminder to developers and reviewers, we usually add a note about this in the project GitHub PR template. |
| 11 | +2. During code freeze, the `code_freeze` lane of the project's `Fastfile` typically calls at some point: |
| 12 | + - The `extract_release_notes_for_version` action, to extract just the release notes of the version being code-frozen in a separate file (e.g. `WordPress/Resources/release_notes.txt`). |
| 13 | + - Then the `{ios|android}_update_release_notes` action is then used to add a new empty section at the top of the `RELEASE-NOTES.txt` file, ready for the next version. |
| 14 | +3. The Release Manager then shares that file with extracted notes to someone with good wordsmith skills (e.g. we use a freelance writer for WordPress and Jetpack, we have someone in the product team doing that in WooCommerce, …). That person will take that extracted bullet-point list we provide them (which might contain some technical terms and PR links, as those items were written by devs during their PRs) and write an "editorialialized" (aka user-friendly) version of the release notes based on those. |
| 15 | +4. That editorialized copy is then used to update the `metadata/release-notes.txt` file, which will contain the "nice" release notes for the current version. |
| 16 | +5. The `{ios|an}_update_metadata_source` action is then used to update the `{App|Play}StoreStrings.po` file with the content in `step 4`. That file will later be picked up by a cron job and uploaded to the appropriate GlotPress project dedicated to the release notes and metadata of each app, so that our translators can start translating the release notes. |
| 17 | +6. At the end of the beta testing, the `gp_downloadmetadata` action is used to download the translation for the release notes and the other relevant metadata from GlotPress, and update the `fastlane/metadata/{locale}/release_notes.txt` files in fastlane's dedicated folder—ready to be used by `deliver`/`supply` which will take care of using the Apple and Google APIs to upload them in App Store Connect / Play Store Console. |
17 | 18 |
|
| 19 | +_Note:_ All these actions need some not-trivial configuration, so it’s usually best to add dedicated lanes in the project and use them to invoke the actions. |
0 commit comments