|
| 1 | +## kpt release handling process |
| 2 | + |
| 3 | +This is currently a work-in-progress, based on ongoing discussions in the kpt development team. |
| 4 | + |
| 5 | +### Semantic Versioning |
| 6 | + |
| 7 | +We follow semantic versioning. This can mean we have to reject non-backward-compatible changes until |
| 8 | +a breaking release in order to preserve backward compatibility. |
| 9 | + |
| 10 | +For kpt this means: |
| 11 | + |
| 12 | +Packages: |
| 13 | +* Package format MUST NOT change |
| 14 | +* Optional fields can be added |
| 15 | + |
| 16 | +Command line: |
| 17 | +* Subcommands MUST NOT be removed |
| 18 | +* Subcommands SHOULD NOT change in meaning |
| 19 | +* Command line flags MUST NOT be deleted |
| 20 | +* Command line flags SHOULD NOT change in meaning |
| 21 | + |
| 22 | +Code: |
| 23 | +* Existing behaviours MUST NOT change |
| 24 | + |
| 25 | +Compatibility with Kubernetes: |
| 26 | +TBD |
| 27 | + |
| 28 | +During a major release, all code is subject to revision, but package backward compatibility SHOULD be retained. |
| 29 | + |
| 30 | +### Issue Triaging |
| 31 | + |
| 32 | +Core maintainers take turns triaging the issue queue (week on, week off). The responsibilities of a triaging run are: |
| 33 | + |
| 34 | +#### Issue tagging |
| 35 | +* Bug, feature, question/support, documentation |
| 36 | +* Simple fixes tagged as “good first issue” |
| 37 | +* Good idea but not prioritised: “help wanted” |
| 38 | + |
| 39 | +#### Addressing / channeling questions/support |
| 40 | +* We expect discussion, so features, bugs can be tagged as “question” until a full understanding of the need is achieved |
| 41 | + |
| 42 | +#### Allocating bugs to releases |
| 43 | +* High severity bugs go into the next patch release |
| 44 | +* Otherwise they go into the next minor release |
| 45 | + |
| 46 | +#### Triaging feature requests: |
| 47 | +* Differentiate between core features and kpt functions |
| 48 | +* Significant features and breaking changes MUST be described in a “kpt improvement proposal” |
| 49 | + |
| 50 | +#### PR Reviews |
| 51 | +* TBD |
| 52 | + |
| 53 | +### Merging PRs |
| 54 | + |
| 55 | +A PR can only be merged only if: |
| 56 | +* All tests are passing for that PR |
| 57 | +* The PR has has approvals from two maintainers from two organizations. The GitHub Review tool is used to approve |
| 58 | +* The PR's milestone is set to the current Minor or Patch release. Ensure that in the course of Minor and Patch release work, |
| 59 | + you never merge PRs labeled with the next Major version. For example, while v1 is the current Major version, |
| 60 | + we do not merge PRs labeled with v2.x. |
| 61 | + |
| 62 | +### The release process |
| 63 | + |
| 64 | +Corresponding to SemVer, we have three different types of release: |
| 65 | +* Major: 1.0.0, 2.0.0, etc. Breaks compatibility with previous releases. |
| 66 | +* Minor: 2.1.0, 2.2.0, etc. Maintains compatibility per our SemVer rules above, but may add new features, fix bugs. |
| 67 | +* Patch: 2.1.1, 2.1.2, etc. Maintains compatibility, adds no features, but fixes bugs. |
| 68 | + |
| 69 | +Major releases and Minor releases are done by tagging *main* with the version number, and then running the release scripts (TBD). |
| 70 | + |
| 71 | +Patch versions are done by a more complex process. They start from the release-X.Y branch and cherry-pick from main. |
| 72 | +A release branch is forked from the last minor release, and is then maintained in parallel with the *main*: |
| 73 | + |
| 74 | + |
| 75 | +``` |
| 76 | +---- v1.3.0 ---- Fix #1 --- Feature #2 --- Fix #3 --- ... [main] |
| 77 | + \ \ \ |
| 78 | + release-1.3 ---- Fix #1 ------------- Fix #3 --- v1.3.1 |
| 79 | +``` |
| 80 | + |
| 81 | +Only fixes are pulled from `main` onto the `release-X.Y` branch. Features are not. |
0 commit comments