mithril
mithril copied to clipboard
Implement Release process
Issue
We need to work on the release process in order to manage correctly the evolution of the network with our users
Here is a first definition of the Release Process
for the Mithril Network:
- We will use a common version (
semver
) for all the crates of the repository and for the GitHub release - All the nodes should be able to display the current version they are running
- In case of a version mismatch, the Aggregator should return an error so that the Signer/Client nodes are updated regularly
- We will work with GitHub environments to support deployments of versions on multiple environments
- A new version
0.1.2
will have the following life cycle:- A commit
abc123
merged onmain
branch is deployed ontesting
environment namedtesting-preview
- A commit
def456
tagged with0.1.2-prerelease1
is deployed onpreprod
environment namedpre-release-preview
- A GitHub release
0.1.2
is created and linked with the0.1.2-prerelease1
tag and marked aspre-release
- A tag
0.1.2-prerelease1
is qualified and selected for release or rejected (and replaced by a0.1.2-prerelease2
tag if necessary on aghj789
commit) - If the tag
0.1.2-prerelease1
is selected, a new tag is created and name0.1.2
on the same commitdef456
- The GitHub release is linked to the
0.1.2
tag and marked asrelease
- The commit
def456
with tag0.1.2
is deployed to theprod
environment namedrelease-preprod
- A commit
Questions
- [x] When to update
cargo.toml
crates version vs creation of the draft release on GitHub? - [x] How to handle
merge lock
during qualification of a release candidate (with onlymain
branch) (Use of feature flag?)? - [ ] How to handle
Network Protocol Versions
smoothly (backward compatibility of messages w/Avro
orProtocol Buffer
or equivalent solution?) - [x] How to simplify the update process for the SPOs (with debian package for example)?
- [ ] How to handle real SPOs on the
testing-preview
andpre-release-preprod
environments (vs key rotations, secret keys management, ...)?
Main Tasks
- [x] #541
- [ ] #543
- [ ] #542
- [ ] #555
- [ ] #563
Other Tasks
- [ ] Define template for release notes
- [ ] Add a page on the documentation website that explains the release process
- [ ] Update documentation (https://mithril.network/doc/manual/developer-docs/references#mithril-networks)
- [ ] Update the SPO guide with a section explaining how to install of pre-compiled binaries of a release
- [x] Add backup of databases of all environments
- [x] Add backup SPO keys
- [ ] Add monitoring for nodes and/or status page on documentation website
- [ ] Add a Debian package in the artifacts produced by the CI
- [x] Add a multi target build (Linux, macOS, Windows) for the Client at least
- [ ] Add signature of binaries in the artifacts released (with
GPG
signature of themd5
of the binaries for example) - [ ] Activate deployment to
crates.io
(including missing fields incargo.toml
)
Maybe Later / To be discussed Tasks
- [ ] Show version in Mithril Explorer
Perhaps a first step would be to define a release process along the lines of what we did together this afternoon and then talk with the small SPO community we have started to gather to get their feedback? I guess the testing/pre-releases will need to receive more or less attention from the SPOs so understanding how much time/effort they are ready to devote to this would help us calibrate the frequency and scope of releases?