Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Stable Releases: Definition and Process #6394

Merged
merged 52 commits into from
Jul 14, 2020
Merged
Changes from 8 commits
Commits
Show all changes
52 commits
Select commit Hold shift + click to select a range
f5807aa
Update CONTRIBUTING.md
Jun 9, 2020
83e9f7f
Update stable release update procedure
Jun 10, 2020
5787a87
Merge branch 'master' into alessio-sru-and-procedure
Jun 10, 2020
9c02b26
refine
Jun 10, 2020
d069740
Update CONTRIBUTING.md
Jun 11, 2020
f3ddb80
Merge branch 'master' into alessio-sru-and-procedure
Jun 11, 2020
5fb8fc5
Merge branch 'master' into alessio-sru-and-procedure
Jun 11, 2020
db7d4d0
Merge branch 'master' into alessio-sru-and-procedure
Jun 11, 2020
45e2ea3
Update CONTRIBUTING.md
Jun 22, 2020
66413d3
Update CONTRIBUTING.md
Jun 22, 2020
64649f2
Update CONTRIBUTING.md
Jun 22, 2020
b7df29f
Merge branch 'master' into alessio-sru-and-procedure
Jun 24, 2020
3a42571
Merge branch 'master' into alessio-sru-and-procedure
Jun 27, 2020
952a3cd
Move Stable Release policy into a standalone file
Jun 27, 2020
13b2e7e
Merge remote-tracking branch 'origin/alessio-sru-and-procedure' into …
Jun 27, 2020
d2c33a3
Merge branch 'master' into alessio-sru-and-procedure
Jun 29, 2020
4f4bdd6
Update CONTRIBUTING.md
Jun 29, 2020
8584b1b
Update CONTRIBUTING.md
Jun 29, 2020
0da135a
Merge branch 'master' into alessio-sru-and-procedure
Jun 29, 2020
00046f5
Update STABLE_RELEASES.md
Jul 1, 2020
c29e51b
Update STABLE_RELEASES.md
Jul 1, 2020
010f09c
Update STABLE_RELEASES.md
Jul 1, 2020
1c2d1b5
Update STABLE_RELEASES.md
Jul 1, 2020
a67ff4a
Update STABLE_RELEASES.md
Jul 1, 2020
29da9a5
Update STABLE_RELEASES.md
Jul 1, 2020
0a5d503
Update STABLE_RELEASES.md
Jul 1, 2020
f72e1ef
Merge branch 'master' into alessio-sru-and-procedure
Jul 1, 2020
d693daa
Merge branch 'master' into alessio-sru-and-procedure
Jul 1, 2020
4c802e0
Update STABLE_RELEASES.md
Jul 1, 2020
fc269c2
Update STABLE_RELEASES.md
Jul 3, 2020
14b5ac5
Merge branch 'master' into alessio-sru-and-procedure
Jul 3, 2020
e6313ea
start working on 0.39 release series policy
Jul 6, 2020
358c1e5
Update STABLE_RELEASES.md
Jul 6, 2020
bc924a4
Merge branch 'master' into alessio-sru-and-procedure
Jul 6, 2020
f9ae335
add Stable Release Exception procedure
Jul 7, 2020
041751e
Merge branch 'master' into alessio-sru-and-procedure
Jul 7, 2020
9de8288
changes
Jul 7, 2020
f1122c4
receieve -> receive
Jul 7, 2020
2218fc4
verifiably -> demonstrably
Jul 7, 2020
b7d2422
bugfixes -> bug fixes (aspell's checks)
Jul 7, 2020
d88e88c
Merge branch 'master' into alessio-sru-and-procedure
Jul 7, 2020
81a8dee
Merge branch 'master' into alessio-sru-and-procedure
Jul 7, 2020
aac2fda
Add stanza re: stable release managers
Jul 13, 2020
41df3a3
Merge branch 'master' into alessio-sru-and-procedure
Jul 13, 2020
6090992
Merge branch 'master' into alessio-sru-and-procedure
Jul 13, 2020
00c3caf
move code ownership stanza to contributing.md
Jul 13, 2020
434049e
reinstante Code Owner Membership section
Jul 13, 2020
17e3e63
update stable release managers
Jul 13, 2020
7745390
Update STABLE_RELEASES.md
Jul 13, 2020
0a6d137
Update STABLE_RELEASES.md
Jul 13, 2020
e573b29
Update STABLE_RELEASES.md
Jul 13, 2020
80d8eac
Merge branch 'master' into alessio-sru-and-procedure
Jul 14, 2020
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
88 changes: 73 additions & 15 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,8 @@
- [Development Procedure](#development-procedure)
- [Pull Merge Procedure](#pull-merge-procedure)
- [Release Procedure](#release-procedure)
- [Point Release Procedure](#point-release-procedure)
- [Stable Release Update Procedure](#stable-release-update-procedure)
- [Stable Release Updates](#stable-release-updates)
alessio marked this conversation as resolved.
Show resolved Hide resolved
alessio marked this conversation as resolved.
Show resolved Hide resolved
- [Code Owner Membership](#code-owner-membership)

Thank you for considering making contributions to Cosmos-SDK and related
Expand Down Expand Up @@ -228,32 +229,40 @@ only pull requests targeted directly against master.
- Tag the release (use `git tag -a`) and create a release in Github
- Delete the `RC` branches

### Point Release Procedure
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I would really prefer to keep the nomenclature point releases because that is what they are. In fact, in very rare cases, they include breaking changes.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Introducing a breaking change when it's necessary to fix a bug is IMHO not a problem and would be a good rationale to grant an SRU exception. I'll clarify this in the What qualifies as SRU

### Stable Release Update Procedure
alessio marked this conversation as resolved.
Show resolved Hide resolved

At the moment, only a single major release will be supported, so all point releases will be based
off of that release.

In order to alleviate the burden for a single person to have to cherry-pick and handle merge conflicts
of all desired backporting PRs to a point release, we instead maintain a living backport branch, where
of all desired backporting PRs to a point release, we instead maintain a living SRU branch, where
alessio marked this conversation as resolved.
Show resolved Hide resolved
alessio marked this conversation as resolved.
Show resolved Hide resolved
all desired features and bug fixes are merged into as separate PRs.

Example:

Current release is `v0.38.4`. We then maintain a (living) branch `backport/release/v0.38.x`. As PRs
are merged into master, if they wish to be backported into the next `v0.38.x` point release, the
author must:

1. Add `backport` label
2. Pull latest changes on the desired `backport/release/v*.*.x` branch
3. Create a 2nd PR merging the respective backport PR into `backport/release/v*.*.x`

This means it is the authors responsibility to fix any merge conflicts, update changelog entries, and
ensure CI passes. If a PR originates from an external contributor, it may be a team members responsibility
to perform this process instead of the original author.
Current release is `v0.38.4`. We then maintain a (living) branch `sru/release/v0.38.N`, given N as
alessio marked this conversation as resolved.
Show resolved Hide resolved
the next patch release number (currently `0.38.5`) for the `0.38` release series. As bugs are fixed
and PRs are merged into `master`, if a contributor wishes the PR to be released as SRU into the
`v0.38.N` point release, the contributor must:

1. Add `0.38-sru` label
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

i would prefer to keep backport this is another thing that we will have to update on every major release. This increases the maintenance load and cognitive load of everything that needs to be updated in these scenarios

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Alright, so instead of backport I'd propose to use a semantic versioning-like nomenclature: MAJOR.MINOR.PATCH

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The thing is, regardless of the name (we agreed that we stick with backport), I think that such living branch should carry the next version number to 1. avoid versioning mistakes 2. make clear to users what changes are going to be in exactly which release. Wdyt? @marbar3778 @alexanderbez

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

yes agree with you. 0.38-backport works for me

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I actually meant "it should include the patch number" :) e.g. 0.38.5-backport

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The proposal of 0.38.5-backport looks fine to me. I am infavor of calling it backport and not changing historical nomenclature.

@alessio Can you update this file accordingly?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Fixed. Please check

alessio marked this conversation as resolved.
Show resolved Hide resolved
2. Pull latest changes on the desired `sru/release/vX.X.N` branch
3. Create a 2nd PR merging the respective SRU PR into `sru/release/v0.38.N`
4. Update the PR's description and ensure it contains the following information:
- **[Impact]** Explanation of how the bug affects users or developers.
- **[Test Case]** section with detailed instructions on how to reproduce the bug.
- **[Regression Potential]** section with a discussion how regressions are most likely to manifest, or might
manifest even if it's unlikely, as a result of the change. **It is assumed that any SRU candidate PR is
well-tested before it is merged in and has an overall low risk of regression**.

It is the PR's author's responsibility to fix merge conflicts, update changelog entries, and
ensure CI passes. If a PR originates from an external contributor, it may be a core team member's
responsibility to perform this process instead of the original author.
Lastly, it is core team's responsibility to ensure that the PR meets all the SRU criteria.

Finally, when a point release is ready to be made:

1. Create `release/v*.*.x` branch
1. Create `release/v0.38.N` branch
2. Ensure changelog entries are verified
2. Be sure changelog entries are added to `RELEASE_CHANGELOG.md`
3. Add release version date to the changelog
Expand All @@ -264,6 +273,55 @@ Finally, when a point release is ready to be made:
Note, although we aim to support only a single release at a time, the process stated above could be
used for multiple previous versions.

## Stable Release Updates (SRU)
alessio marked this conversation as resolved.
Show resolved Hide resolved

Once a Cosmos-SDK release has been completed and published, updates for it are released under certain circumstances
and must follow the *Stable Release Update* (or SRU) procedure.

### Rationale
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@marbar3778 @alexanderbez here is the rationale. Thoughts? Does that make sense to you?

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

thank you for the rationale. I do agree but still dont understand the naming change. Every release is a stable release or should be. We can keep the rationale because it will help but there isnt a need for a rename IMO.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What do you mean by every release? A major.minor is a major stable release (e.g. 0.38), backports/bugfixes/updates go into point releases. Am I wrong?


Unlike in-development `master` branch snapshots, **Cosmos-SDK** releases are subject to much wider adoption,
and by a significantly different demographic of users. During development, changes in the `master` branch
affect SDK users, application developers, early adopters, and other advanced users that elect to use
unstable experimental software at their own risk.

Conversely, users of a stable release expect a high degree of stability. They build their applications on it, and the
problems they experience with it could be potentially highly disruptive to their projects.

Stable release updates are recommended to the vast majority of developers, and so it is crucial to treat them
with great caution. Hence, when updates are proposed, they must be accompanied by a strong rationale and present
a low risk of regressions, i.e. even one-line changes could cause unexpected regressions due to side effects or
poorly tested code. We never assume that any change, no matter how little or non-intrusive, is completely exempt
of regression risks.

Therefore, the requirements for stable changesets are different than those that are candidate to be merged in
the `master` branch. When preparing future major releases, our aim to design the most elegant, user-friendly and
maintainable SDK possible often entails fundamental changes to the SDK's architecture design, rearranging and/or
renaming packages, reducing code duplication so that we maintain common functions and data structures in one
place rather than leaving them scattered all over the code base. However, once a release is published, the
priority is to minimise the risk caused by changes not strictly required to fix qualifying bugs; this tends to
be correlated with minimising the size of such changes. As such, the same bug may need to be fixed in different
ways in stable releases and `master` branch.

### What qualifies as SRU

* **High-impact bugs**
* Bugs that may directly cause a security vulnerability.
* *Severe regressions* from a Cosmos-SDK's previous release. This includes all sort of issues
that may cause the core packages or the `x/` modules unusable.
* Bugs that may cause **loss of user's data**.
* Other safe cases:
* Bugs which don't fit in the aforementoned categories for which an obvious safe patch is known.
* Relatively small yet strictly non-breaking changes that introduce forward-compatible client
features to smoothen the migration to successive releases.

### What does not qualify as SRU

* State machine changes.
* New features that introduces API breakages (e.g. public functions removal/renaming).
* Cosmetic fixes, such as formatting or linter warning fixes.
* Documentation fixes.

## Code Owner Membership

In the ethos of open source projects, and out of necessity to keep the code
Expand Down