blob: 328531cb7c44585a358c690f5330acc5a99ffedd [file] [log] [blame] [view]
David Brownc3370252017-09-12 10:36:19 -06001# Release Process
2
3The following documents the release process used with mcuboot.
4
5## Version numbering
6
7MCUboot uses [semantic versioning][semver], where version numbers
8follow a MAJOR.MINOR.PATCH format with the following guidelines on
9incremeting the numbers:
10
111. MAJOR version when you make incompatible API changes,
122. MINOR version when you add functionality in a backwards-compatible
13 manner, and
143. PATCH version when you make backwards-compatible bug fixes.
15
16We add pre-release tags of the format MAJOR.MINOR.PATCH-rc1.
17
David Browna3032912017-09-12 12:07:45 -060018## Release Notes
19
20Before making a release, be sure to update the `docs/release-notes.md`
21to describe the release. This should be a high-level description of
22the changes, not a list of the git commits.
23
David Brownc3370252017-09-12 10:36:19 -060024## Release Candidates
25
26Prior to each release, tags are made (see below) for at least one
27release candidate (a.b.c-rc1, followed by a.b.c-rc2, etc, followed by
28the official a.b.c release). The intent is to freeze the code for a
29time, and allow testing to happen.
30
31During the time between rc1 and the final release, the only changes
32that should be merged into master are those to fix bugs found in the
Fabio Utzige1727d92019-04-18 17:33:16 -030033rc and Mynewt metadata as described in the next section.
34
Fabio Utzigc7fe3b02019-10-10 07:35:40 -030035## imgtool release
36
37imgtool is released through pypi.org (The Python package index) and
38requires that its version to be updated by editing
39`scripts/imgtool/__init__.py` and modifying the exported version:
40
41`imgtool_version = "X.Y.ZrcN"`
42
43where `rcX`, `aX` and `bX` are accepted pre-release versions (just
44numbers for final releases). For more info see:
45
46https://www.python.org/dev/peps/pep-0440/#pre-releases
47
Fabio Utzige1727d92019-04-18 17:33:16 -030048## Mynewt release information
49
50On Mynewt, `newt` always fetches a versioned MCUBoot release, so after
51the rc step is finished, the release needs to be exported by modifying
52`repository.yml` in the root directory; it must be updated with the
53new release version, including updates to the pseudo keys
54(`*-(latest|dev)`). Similarly `version.yml` must have its `repo.version`
55key updated with the version number being released.
David Brownc3370252017-09-12 10:36:19 -060056
57## Tagging and Release
58
59To make a release, make sure your local repo is on the tip version by
60fetching from origin. Typically, the releaser should create a branch
61named after the particular release.
62
63Create a commit on top of the branch that modifies the version number
64in the top-level `README.md`, and create a commit, with just this
65change, with a commit text similar to “Bump to version
66a.b.c”. Having the version bump helps to make the releases
67easier to find, as each release has a commit associated with it, and
68not just a tag pointing to another commit.
69
70Once this is done, the release should create a signed tag:
71``` bash
72git tag -s va.b.c-rcn
73```
74with the appropriate tag name. The releaser will need to make sure
75that git is configured to use the proper signing key, and that the
76public key is signed by enough parties to be trusted.
77
78At this point, the tag can be pushed to github to make the actual
79release happen:
80``` bash
David Browna3032912017-09-12 12:07:45 -060081git push origin HEAD:refs/heads/master
David Brownc3370252017-09-12 10:36:19 -060082git push origin va.b.c-rcn
83```
84
Fabio Utzige1727d92019-04-18 17:33:16 -030085## Update Mynewt version.yml
86
87On master `version.yml` must always have its `repo.version`
88key set to "0.0.0" to this must be done now that the release
89is finished.
90
David Brownc3370252017-09-12 10:36:19 -060091[semver]: http://semver.org/