|
| 1 | +# Release Process |
| 2 | + |
| 3 | +## Platform support |
| 4 | + |
| 5 | +| Platform | Supported | |
| 6 | +| --------------------------- | ------------------------------------ | |
| 7 | +| Linux 64-bit | :white_check_mark: | |
| 8 | +| MacOS 64-bit | :white_check_mark: | |
| 9 | +| Windows 64-bit | :white_check_mark: | |
| 10 | +| MacOS Apple Silicon (ARM64) | _builds are provided but not tested_ | |
| 11 | +| Linux ARMv7 | _builds are provided but not tested_ | |
| 12 | +| Linux ARM64 | _builds are provided but not tested_ | |
| 13 | + |
| 14 | + |
| 15 | +## Release Schedule and Hotfixes |
| 16 | + |
| 17 | +Normal releases in this repository that add new or updated features shall be released in an ad-hoc manner. The currently staged changes for such releases |
| 18 | +are in the [develop branch](https://github.com/stacks-network/stacks-core/tree/develop). It is generally safe to run a `stacks-signer` from that branch, though it has received less rigorous testing than release branches. If bugs are found in the `develop` branch, please do [report them as issues](https://github.com/stacks-network/stacks-core/issues) on this repository. |
| 19 | + |
| 20 | +For fixes that impact the correct functioning or liveness of the signer, _hotfixes_ may be issued. These hotfixes are categorized by priority |
| 21 | +according to the following rubric: |
| 22 | + |
| 23 | +- **High Priority**. Any fix for an issue that could deny service to the network as a whole, e.g., an issue where a particular kind of invalid transaction would cause nodes to stop processing requests or shut down unintentionally. |
| 24 | +- **Medium Priority**. ny fix for an issue that could deny service to individual nodes. |
| 25 | +- **Low Priority**. Any fix for an issue that is not high or medium priority. |
| 26 | + |
| 27 | +## Versioning |
| 28 | + |
| 29 | +This project uses a 6 part version number. When there is a stacks-core release, `stacks-signer` will assume the same version as the tagged `stacks-core` release (5 part version). When there are changes in-between stacks-core releases, the signer binary will assume a 6 part version. |
| 30 | + |
| 31 | +``` |
| 32 | +X.Y.Z.A.n.x |
| 33 | +
|
| 34 | +X = 2 and does not change in practice unless there’s another Stacks 2.0 type event |
| 35 | +Y increments on consensus-breaking changes |
| 36 | +Z increments on non-consensus-breaking changes that require a fresh chainstate (akin to semantic MAJOR) |
| 37 | +A increments on non-consensus-breaking changes that do not require a fresh chainstate, but introduce new features (akin to semantic MINOR) |
| 38 | +n increments on patches and hot-fixes (akin to semantic PATCH) |
| 39 | +x increments on the current stacks-core release version |
| 40 | +``` |
| 41 | + |
| 42 | +For example, if there is a stacks-core release of 2.6.0.0.0, `stacks-signer` will also be versioned as 2.6.0.0.0. If a change is needed in the signer, it may be released apart from the stacks-core as version 2.6.0.0.0.1 and will increment until the next stacks-core release. |
| 43 | + |
| 44 | +## Release Process |
| 45 | + |
| 46 | + |
| 47 | +1. The release must be timed so that it does not interfere with a _prepare |
| 48 | + phase_. The timing of the next Stacking cycle can be found |
| 49 | + [here](https://stx.eco/dao/tools). A release should happen |
| 50 | + at least 48 hours before the start of a new cycle, to avoid interfering |
| 51 | + with the prepare phase. |
| 52 | + |
| 53 | +2. Before creating the release, the release manager must determine the _version |
| 54 | + number_ for this release, and create a release branch in the format: `release/signer-X.Y.Z.A.n.x`. |
| 55 | + The factors that determine the version number are discussed in [Versioning](#versioning). |
| 56 | + |
| 57 | +3. _Blocking_ PRs or issues are enumerated and a label should be applied to each |
| 58 | + issue/PR such as `signer-X.Y.Z.A.n.x-blocker`. The Issue/PR owners for each should be pinged |
| 59 | + for updates on whether or not those issues/PRs have any blockers or are waiting on feedback. |
| 60 | + __Note__: It may be necessary to cherry-pick these PR's into the target branch `release/signer-X.Y.Z.A.n.x` |
| 61 | + |
| 62 | +4. The [CHANGELOG.md](./CHANGELOG.md) file shall be updated with summaries of what |
| 63 | + was `Added`, `Changed`, and `Fixed` in the base branch. For example, pull requests |
| 64 | + merged into `develop` can be found [here](https://github.com/stacks-network/stacks-blockchain/pulls?q=is%3Apr+is%3Aclosed+base%3Adevelop+sort%3Aupdated-desc). |
| 65 | + Note, however, that GitHub apparently does not allow sorting by _merge time_, |
| 66 | + so, when sorting by some proxy criterion, some care should be used to understand |
| 67 | + which PR's were _merged_ after the last release. |
| 68 | + |
| 69 | +5. Once any blocker PRs have merged, a new tag will be created |
| 70 | + by manually triggering the [`CI` Github Actions workflow](https://github.com/stacks-network/stacks-core/actions/workflows/ci.yml) |
| 71 | + against the `release/signer-X.Y.Z.A.n.x` branch. |
| 72 | + |
| 73 | +6. Ecosystem participants will be notified of the release candidate in order |
| 74 | + to test the release on various staging infrastructure. |
| 75 | + |
| 76 | +7. If bugs or issues emerge from the rollout on staging infrastructure, the release |
| 77 | + will be delayed until those regressions are resolved. As regressions are resolved, |
| 78 | + additional release candidates shall be tagged. |
| 79 | + |
| 80 | +8. Once the final release candidate has rolled out successfully without issue on staging |
| 81 | + infrastructure, the tagged release shall no longer marked as Pre-Release on the [Github releases](https://github.com/stacks-network/stacks-blockchain/releases/) |
| 82 | + page. Announcements will then be shared in the `#stacks-core-devs` channel in the |
| 83 | + Stacks Discord, as well as the [mailing list](https://groups.google.com/a/stacks.org/g/announce). |
| 84 | + |
| 85 | +9. Finally, the release branch `release/signer-X.Y.Z.A.n.x` will be PR'ed into the `master` branch, and once merged, a PR for `master->develop` will be opened. |
0 commit comments