2017-09-13 00:36:19 +08:00
|
|
|
# Release Process
|
|
|
|
|
|
|
|
The following documents the release process used with mcuboot.
|
|
|
|
|
|
|
|
## Version numbering
|
|
|
|
|
|
|
|
MCUboot uses [semantic versioning][semver], where version numbers
|
|
|
|
follow a MAJOR.MINOR.PATCH format with the following guidelines on
|
|
|
|
incremeting the numbers:
|
|
|
|
|
|
|
|
1. MAJOR version when you make incompatible API changes,
|
|
|
|
2. MINOR version when you add functionality in a backwards-compatible
|
|
|
|
manner, and
|
|
|
|
3. PATCH version when you make backwards-compatible bug fixes.
|
|
|
|
|
|
|
|
We add pre-release tags of the format MAJOR.MINOR.PATCH-rc1.
|
|
|
|
|
2017-09-13 02:07:45 +08:00
|
|
|
## Release Notes
|
|
|
|
|
|
|
|
Before making a release, be sure to update the `docs/release-notes.md`
|
|
|
|
to describe the release. This should be a high-level description of
|
|
|
|
the changes, not a list of the git commits.
|
|
|
|
|
2017-09-13 00:36:19 +08:00
|
|
|
## Release Candidates
|
|
|
|
|
|
|
|
Prior to each release, tags are made (see below) for at least one
|
|
|
|
release candidate (a.b.c-rc1, followed by a.b.c-rc2, etc, followed by
|
|
|
|
the official a.b.c release). The intent is to freeze the code for a
|
|
|
|
time, and allow testing to happen.
|
|
|
|
|
|
|
|
During the time between rc1 and the final release, the only changes
|
|
|
|
that should be merged into master are those to fix bugs found in the
|
2019-04-19 04:33:16 +08:00
|
|
|
rc and Mynewt metadata as described in the next section.
|
|
|
|
|
|
|
|
## Mynewt release information
|
|
|
|
|
|
|
|
On Mynewt, `newt` always fetches a versioned MCUBoot release, so after
|
|
|
|
the rc step is finished, the release needs to be exported by modifying
|
|
|
|
`repository.yml` in the root directory; it must be updated with the
|
|
|
|
new release version, including updates to the pseudo keys
|
|
|
|
(`*-(latest|dev)`). Similarly `version.yml` must have its `repo.version`
|
|
|
|
key updated with the version number being released.
|
2017-09-13 00:36:19 +08:00
|
|
|
|
|
|
|
## Tagging and Release
|
|
|
|
|
|
|
|
To make a release, make sure your local repo is on the tip version by
|
|
|
|
fetching from origin. Typically, the releaser should create a branch
|
|
|
|
named after the particular release.
|
|
|
|
|
|
|
|
Create a commit on top of the branch that modifies the version number
|
|
|
|
in the top-level `README.md`, and create a commit, with just this
|
|
|
|
change, with a commit text similar to “Bump to version
|
|
|
|
a.b.c”. Having the version bump helps to make the releases
|
|
|
|
easier to find, as each release has a commit associated with it, and
|
|
|
|
not just a tag pointing to another commit.
|
|
|
|
|
|
|
|
Once this is done, the release should create a signed tag:
|
|
|
|
``` bash
|
|
|
|
git tag -s va.b.c-rcn
|
|
|
|
```
|
|
|
|
with the appropriate tag name. The releaser will need to make sure
|
|
|
|
that git is configured to use the proper signing key, and that the
|
|
|
|
public key is signed by enough parties to be trusted.
|
|
|
|
|
|
|
|
At this point, the tag can be pushed to github to make the actual
|
|
|
|
release happen:
|
|
|
|
``` bash
|
2017-09-13 02:07:45 +08:00
|
|
|
git push origin HEAD:refs/heads/master
|
2017-09-13 00:36:19 +08:00
|
|
|
git push origin va.b.c-rcn
|
|
|
|
```
|
|
|
|
|
2019-04-19 04:33:16 +08:00
|
|
|
## Update Mynewt version.yml
|
|
|
|
|
|
|
|
On master `version.yml` must always have its `repo.version`
|
|
|
|
key set to "0.0.0" to this must be done now that the release
|
|
|
|
is finished.
|
|
|
|
|
2017-09-13 00:36:19 +08:00
|
|
|
[semver]: http://semver.org/
|