|
| 1 | +--- |
| 2 | +slug: 3 |
| 3 | +title: | |
| 4 | + 3. Release process and versioning |
| 5 | +authors: [Jean-Philippe Raynaud, Denis Jouenne, Grégoire Hubert] |
| 6 | +tags: [Draft] |
| 7 | +--- |
| 8 | + |
| 9 | +## Status |
| 10 | + |
| 11 | +**draft** |
| 12 | + |
| 13 | +## Context |
| 14 | + |
| 15 | +In order to deliver regularly the software to our users, we should implement a release process based on a predictable versioning scheme. |
| 16 | + |
| 17 | +### Versioning |
| 18 | + |
| 19 | +A Release Version determines a distribution of determined node versions and underlying libraries. |
| 20 | + |
| 21 | + * our softwares must be able to interact seamlessly with other Mithril software |
| 22 | + * our softwares must be able to be hosted on crates.io |
| 23 | + * must clearly indicate compatibility with other Mithril components to end users |
| 24 | + |
| 25 | + |
| 26 | +### Release process |
| 27 | + |
| 28 | +A Release is a software package that is built once and then promoted from the testing environment to the production environment. It can be signed. |
| 29 | + |
| 30 | + * Keep it simple |
| 31 | + * Automated as much as possible: all points not requiring human decision shall be automated |
| 32 | + * Minimize the mean time to release |
| 33 | + |
| 34 | +## Decision |
| 35 | + |
| 36 | +There are 3 versioned layers in the Mithril stack: |
| 37 | + |
| 38 | + * HTTP API protocol to ensure compatibility in the communication between nodes (use Semver) |
| 39 | + * Crate version: each node & library has its own version (use Semver) the commit digest is automatically added to the version by the CI pipeline. |
| 40 | + * Release Version: the distribution version (use version scheme YYWW.patch|YYWW.patch-name). The VERSION file is computed by the pipeline from the tag release. |
| 41 | + |
| 42 | +The documentation is tied to a Release Version. |
| 43 | + |
| 44 | +### Release Process |
| 45 | + |
| 46 | +Starting just after a new release has been made: |
| 47 | + |
| 48 | +1. Develop on a dedicated development branch |
| 49 | +1. When merging PR on main: update the `Cargo.toml` files with version of the updated nodes |
| 50 | +1. Once merged, the CI creates an `unstable` tag & release which is deployed on testing environment |
| 51 | +1. Push a tag using the distribution version format on this commit with a `-pre_release` suffix. |
| 52 | +1. The CI gets the built artifacts associated with this commit and generates a named pre-release which is deployed on `pre-release` for testing. |
| 53 | +1. Push a tag using the distribution version format on this commit without the `-pre_release` suffix. |
| 54 | +1. The CI gets the built artifacts associated with this commit and generates a named release which is deployed on `pre-release` for testing. |
| 55 | +1. In the release GitHub interface, edit the newly generated release, uncheck the `This is a pre-release` tick box. |
| 56 | +1. The CI gets the built artifacts associated with this commit and generates a named release which is deployed on `release`. |
| 57 | +1. Update the documentation website from future to current. |
| 58 | + |
0 commit comments