- Draft a new release on GitHub
- "Tag version":
vx.y.z
@ Target:main
- "Release title":
x.y.z Two Word Summary
(e.g. biggest change / reason for release) - "Describe this release": use the template from Releases on GitHub
- "Tag version":
- Do the release (see project specific docs/release.md file)
- Publish drafted release on GitHub
Note: this will create a tag onmain
, equivalent to:git checkout main git tag vx.y git push origin vx.y # or --tags
- Close
x.y.z
milestone- "Due date": release date
- "Description": link to Release on GitHub
- Merge everything to
main
that needs to be in the release.- Current active milestone might help to see what's missing.
- Review
version.properties
is right for the target release, if not, PR.
- Run
gradlew releaseRelease
to produce an APK and mapping file while on latestmain
.
Latestmain
is important, because the commit counter will influence the version name/version code. - Create a new Release in the Alpha track.
- Upload the APK and the mapping file either to App Bundle Explorer or inline.
- Action any potential warnings or errors.
- Replace pre-populated release name (
<versionCode> (<versionName>)
) with just<versionName>
. - Copy Release Notes from previous alpha or production release.
- Review and publish.
- Smoke test on a real device installed from Google Play Store.
- Promote to Production with 100% or staged rollout.
- Commits since last release in Git repository
- Milestones in GitHub
- Pull requests in GitHub associated with Milestones
- Issues resolved in GitHub associated with Milestones
Under https://www.twisterrob.net/project/ each project has a "History" section.
Target audience: end users, tech savvy end users
Contents:
- Release version: the name of the release, usually in
v0.0.0#x
format - Release date: the date the release was first publicly available.
- Bullet point list of all user-facing changes.
- Link to Release on GitHub
Template (Jekyll GFM):
### [0.0.0#x](https://github.com/TWiStErRob/net.twisterrob.?/releases/tag/v0.0.0) (yyyy-mm-dd)
{: #v00000000}
* Feature: ...
* Enhancement: ...
* Fix: ...
* Experimental: ...
* ...
* Feature: ...
* Enhancement: ...
* Fix: ...
* Experimental: ...
Published release notes (Google Play Store, Gradle Plugin Portal, etc.)
Target audience: end users
Contents:
- Very short bullet point summary of features, relevant fixes
- Limited to 500 characters.
- Link to website
Template (plain text):
<versionName.latest> (<release date:YYYY-MM-DD>)
* <Major change.>
* <Feature: description.>
* <Fix: description.>
<versionName.older> (<release date:YYYY-MM-DD>)
* <even shorter list>
Full listing: http://www.twisterrob.net/project/<project>/#history
This target was obsoleted by GitHub Releases' description.
Contents:
- Release version
- Release date
- Changes with links to PRs/Issues.
Target audience: tech-savvy end users, contributors
Contents:
- Link to website
- Development time range
- Link to milestone
- Full list of features with issue/PR links
Template (GFM):
## Release
<!-- TODO the day the release is published. -->
*Date*: yyyy-mm-dd
*Version*: 0.0.0
* **New**: ...major change...
* **Breaking**: ...major change...
See also the [public release notes on my website][3].
## Changes
For the full list of changes see [release milestone][1] and [diff][2].
<!-- TODO Each bullet point: `component: Title (#issue/#pr)`. -->
### Breaking
* TODO ...
### New
* TODO ...
### Fixes
* TODO ...
### Internal
* TODO ...
<!-- TODO Update these links. -->
[1]: https://github.com/TWiStErRob/net.twisterrob.?/milestone/0?closed=1
[2]: https://github.com/TWiStErRob/net.twisterrob.?/compare/v0.0.0...v0.0.0
[3]: https://www.twisterrob.net/project/?/#v00000000
Steps after pasting:
- Fix TODOs
- remove empty sections
Target audience: contributors
Contents:
- Name of milestone:
vx.y.z
- Date of milestone: release date
- Description of milestone:
- Link to Release on GitHub