-
Notifications
You must be signed in to change notification settings - Fork 1.6k
Update published modules with v0.x.y tags #1350
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
Merged
Merged
Changes from all commits
Commits
File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -10,13 +10,11 @@ participating-sigs: | |
reviewers: | ||
- "@sttts" | ||
- "@lavalamp" | ||
- "@cblecker" | ||
- "@mattfarina" | ||
approvers: | ||
- "@smarterclayton" | ||
- "@thockin" | ||
creation-date: 2019-03-19 | ||
last-updated: 2019-03-26 | ||
last-updated: 2019-11-01 | ||
status: implementable | ||
--- | ||
|
||
|
@@ -56,21 +54,15 @@ These checklist items _must_ be updated for the enhancement to be released. | |
|
||
- [x] kubernetes/enhancements issue in release milestone, which links to KEP: https://github.com/kubernetes/enhancements/issues/917 | ||
- [x] KEP approvers have set the KEP status to `implementable` | ||
- [ ] Design details are appropriately documented | ||
- [ ] Test plan is in place, giving consideration to SIG Architecture and SIG Testing input | ||
- [ ] Graduation criteria is in place | ||
- [ ] "Implementation History" section is up-to-date for milestone | ||
- [ ] User-facing documentation has been created in [kubernetes/website], for publication to [kubernetes.io] | ||
- [ ] Supporting documentation e.g., additional design documents, links to mailing list discussions/SIG meetings, relevant PRs/issues, release notes | ||
- [x] Design details are appropriately documented | ||
- [x] Test plan is in place, giving consideration to SIG Architecture and SIG Testing input | ||
- [x] Graduation criteria is in place | ||
- [x] "Implementation History" section is up-to-date for milestone | ||
- [x] Supporting documentation e.g., additional design documents, links to mailing list discussions/SIG meetings, relevant PRs/issues, release notes | ||
- [x] User-facing documentation has been created | ||
|
||
**Note:** Any PRs to move a KEP to `implementable` or significant changes once it is marked `implementable` should be approved by each of the KEP approvers. If any of those approvers is no longer appropriate than changes to that list should be approved by the remaining approvers and/or the owning SIG (or SIG-arch for cross cutting KEPs). | ||
|
||
**Note:** This checklist is iterative and should be reviewed and updated every time this enhancement is being considered for a milestone. | ||
|
||
[kubernetes.io]: https://kubernetes.io/ | ||
[kubernetes/enhancements]: https://github.com/kubernetes/enhancements/issues | ||
[kubernetes/kubernetes]: https://github.com/kubernetes/kubernetes | ||
[kubernetes/website]: https://github.com/kubernetes/website | ||
|
||
## Summary | ||
|
||
|
@@ -103,6 +95,7 @@ In addition to simply keeping up with the go ecosystem, go modules provide many | |
* Provide accurate go.mod module descriptors for kubernetes/kubernetes and published staging components | ||
* Enable use of published kubernetes components by `go module` aware consumers | ||
* Allow continued use of published kubernetes components by `go module` *unaware* consumers until go modules are enabled by default | ||
* Allow consumers of go modules to understand the versions of kubernetes libraries they are using | ||
|
||
## Proposal | ||
|
||
|
@@ -167,13 +160,29 @@ See the [alternatives](#alternatives-to-publishing-staging-component-modules) se | |
|
||
As part of transitioning to go modules, we can select a versioning strategy. | ||
|
||
Current state: | ||
* `client-go` tags a major version on every kubernetes release | ||
* other components tag a (non-semver) `kubernetes-1.x.y` version on each release | ||
* no import rewriting occurs | ||
* consumers can only make use of a single version of each component | ||
State prior to adoption of go modules: | ||
* `client-go` tagged a major version on every kubernetes release | ||
* all components tagged a (non-semver) `kubernetes-1.x.y` version on each release | ||
* no import rewriting occurred | ||
* consumers could only make use of a single version of each component in a build | ||
|
||
State after adoption of go modules: | ||
* all components tagged a (non-semver) `kubernetes-1.x.y` version on each release | ||
* no import rewriting occurred | ||
* consumers could only make use of a single version of each component in a build | ||
|
||
This proposes publishing components with the following tags: | ||
* Non-semver tags of `kubernetes-1.x.y` (corresponding to kubernetes `v1.x.y`) | ||
* Semver tags of `v0.x.y` (corresponding to kubernetes `v1.x.y`) | ||
|
||
`v0.x.y` accurately convey the current guarantees around the go APIs release-to-release. | ||
The semver tags are preserved in the go.mod files of consuming components, | ||
allowing them to see what versions of kubernetes libraries they are using. | ||
Without semver tags, downstream components see "pseudo-versions" like | ||
`v0.0.0-20181208010431-42b417875d0f` in their go.mod files, making it | ||
extremely difficult to see if there are version mismatches between the | ||
kubernetes libraries they are using. | ||
|
||
This proposes continuing to tag published components as-is (`kubernetes-1.x.y` for most components, `vX.0.0` for client-go). | ||
This results in the following usage patterns: | ||
|
||
Consumers: | ||
|
@@ -182,10 +191,10 @@ Consumers: | |
* `go get` behavior (e.g. `go get client-go`): | ||
* uses latest commits of transitive `k8s.io/...` dependencies (likely to break, as today) | ||
* uses latest commits of transitive non-module-based dependencies (likely to break, as today) | ||
* module-based consumers | ||
* reference published module versions as `v0.0.0-$date-$sha` | ||
* module-based consumers using a specific version | ||
* reference published module versions as `v0.x.y` or `kubernetes-1.x.y` | ||
* import `k8s.io/apimachinery/...` (as they do today) | ||
* `go get` behavior (e.g. `GO111MODULE=on go get client-go@v15.0.0`): | ||
* `go get` behavior (e.g. `GO111MODULE=on go get k8s.io/client-go@v0.17.0` or `GO111MODULE=on go get k8s.io/[email protected].0`): | ||
* uses `go.mod`-referenced versions of transitive `k8s.io/...` dependencies (unless overridden by top-level module, or conflicting peers referencing later versions) | ||
* uses `go.mod`-referenced versions of transitive non-module-based dependencies (unless overridden by top-level module, or conflicting peers referencing later versions) | ||
* consumers are limited to a single copy of kubernetes libraries among all dependencies (as they are today) | ||
|
@@ -197,8 +206,11 @@ Compatibility implications: | |
* breaking go changes in each release impact consumers that have not pinned to particular tags/shas (as they do today) | ||
* conflicting version requirements (direct or transitive) can result in impossible-to-build or impossible-to-update dependencies (as they do today) | ||
|
||
Allowed versioning changes: | ||
* modules published this way can transition to semantic import versioning in the future | ||
This would not limit future changes to our versioning strategy: | ||
* modules published and tagged this way could transition to semantic import versioning in the future, if desired | ||
* modules published and tagged this way could transition to v1.x.y semver tagging in the future, if desired | ||
(this would require enforcement of go API compatibility in perpetuity, and prevent removal of *any* go API element, | ||
so we are unlikely to pursue this approach, but adding v0.x.y tags now does not remove the option) | ||
|
||
See the [alternatives](#alternative-versioning-strategies) section for other possible versioning strategies considered for the initial move to modules. | ||
|
||
|
@@ -245,6 +257,8 @@ Not applicable | |
- 2019-03-19: Created | ||
- 2019-03-26: Completed proposal | ||
- 2019-03-26: Marked implementable | ||
- 2019-04-03: Implemented go module support | ||
- 2019-11-01: Added proposal for tagging published modules with v0.x.y | ||
|
||
## Alternatives | ||
|
||
|
@@ -354,3 +368,4 @@ and doesn't fully allow multiple versions of kubernetes components to coexist as | |
* https://golang.org/cmd/go/#hdr-The_go_mod_file | ||
* https://golang.org/cmd/go/#hdr-Maintaining_module_requirements | ||
* https://golang.org/cmd/go/#hdr-Module_compatibility_and_semantic_versioning | ||
* [discussion of tagging with v0.x.y](https://github.com/kubernetes/kubernetes/issues/84608) |
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Uh oh!
There was an error while loading. Please reload this page.