-
Notifications
You must be signed in to change notification settings - Fork 1.8k
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
Decoupling API versioning and Feature versioning for features turned on by default #6592
Comments
I am not sure I follow entirely 🤔 especially as there is not really such thing as feature versionning. The only "version" we have are the API version and the "code/release" version. Reading the use case, my understanding is that, at least in the example, you can have something that is "usable" in both API versions, but by default on one (v1beta1) but not on the other (v1) ? If that's the case, then, this goes back to the choice of the I do still believe, aside from naming, the current behavior is indeed a bit confusing. The feature flag should be independent from the API version used. A feature is experimental or stable (or in between if we consider alpha->beta->stable flow), no matter what the API version is. Enabling by default the resolvers on |
You are correct!
Agreed. For features that are currently in beta, we have a couple of options when we move to v1 as the storage version
To me, 2. seems like the least bad option right now. Open to other ideas and feedback! /cc @lbernick |
I'm confused what it would mean for resolvers to be both on by default (i.e. on even when It seems like to satisfy both requirements we'd need to make the default value of |
You are right, the naming of the flags makes this confusing. The intention would be to decouple the stability level of the feature from whether it is enabled by default in a particular API version or not. |
An example to illustrate this issue: In #5938 we switch the reconcilers to use v1 types. Now, this should be not be a breaking change for the user at all but what we see is that some existing v1beta1 pipelineruns are now failing e.g.
(see full logs) |
I think the issue Dibyo is pointing out here is a separate but related issue; I've created #6616 to track this. |
Let's assume instead of "stable, beta and alpha", the value for enable-api-fields would be "one,two,three". If we consider resolvers to be behind "two", they would be enabled only when The "beta" status of the API is different from the "beta" status of a given feature. A very good example of how confusing this behavior is :
This is so confusing and counter-intuitive for users.
What wouldn't be backward compatible ? We are in a situation where the only "way forward to be backward compatible" (what a weird sentence 😂) is to mark resolvers as stable, as well as everything that is behind I also think we need to rethink the |
+1. @jerop and I were just discussing the Kuberentes style feature flag support where each feature has a flag, and the stability level is tracked in code in a struct (vs via docs like we have today) @vdemeester making sure I understand what you are saying - are you saying the only way forward is moving resolvers and current beta features to "stable" or can we set enable-api-fields to "beta" once we move the reconciler and storage versions to v1 (to match the current reconciler behavior)? |
Yes, that's what I am saying from "on top of my head" 😝 |
@vdemeester and I chatted on slack, we think:
@tektoncd/core-maintainers I'd like to get consensus on a short-term solution that will help us move forward with moving to a v1 api. Please comment here re: whether changing "enable-api-fields" to "beta" seems like an OK short term strategy, or whether you have concerns or alternative suggestions. (Feel free to also message me directly.) |
+1 to everything @lbernick said. My 2 cents, as it pertains to resolvers is that avoiding breakages should be the short-term priority because it is unpleasant to users who may have specific expectations based on the current versioning constructs. The longer term fix for "beta" features and how they are exposed can be had separately. Long-term, I do think that other than just not releasing any features until they are fully stable and then having to update the Tekton API versions very often (ie So, what if, long-term, every per-feature feature-flag is always default off? We don't ship a version of Tekton's config with anything on. A user always has to make the determination for themselves what to turn on. With each release, we can indicate the "feature stability" (resolvers is now beta meaning we have confidence in it but may still change the contract) without having to update the config. Perhaps at some point, a feature can become "absorbed" and it is now permanent functionality that is absorbed and thus is a breaking change. Just some thoughts 😄 |
Chatted with @skaegi, he is also fine with changing the default value to "beta" and moving to per-feature flags. |
Chatted with @lbernick and @JeromeJu about this this week. My summary is:
|
This commit adds the feature graduation process documentation to the API compatibility policy. It aims to mitigate the confusions of API versioning that was coupled with feature versioning as in tektoncd#6592. related: TEP0138
This commit decouples the existing beta feature validation in v1beta1. Prior to this change, beta features are regarded as stable in v1beta1 apiVersion and they are validated only in v1 api behind beta enable-api-fields but not in v1beta1. This PR removes the gap between the validations of the stable features in v1 and v1beta1. It also updates the api compatibility policy to clarify that feature stability levels are independent on CRD apiVersions. Fixes: tektoncd#6592
This commit decouples the existing beta feature validation in v1beta1. Prior to this change, beta features are regarded as stable in v1beta1 apiVersion and they are validated only in v1 api behind beta enable-api-fields but not in v1beta1. This PR removes the gap between the validations of the stable features in v1 and v1beta1. It also updates the api compatibility policy to clarify that feature stability levels are independent on CRD apiVersions. Fixes: tektoncd#6592
This commit decouples the existing beta feature validation in v1beta1. Prior to this change, beta features are regarded as stable in v1beta1 apiVersion and they are validated only in v1 api behind beta enable-api-fields but not in v1beta1. This PR removes the gap between the validations of the stable features in v1 and v1beta1. It also updates the api compatibility policy to clarify that feature stability levels are independent on CRD apiVersions. Fixes: tektoncd#6592
This commit decouples the existing beta feature validation in v1beta1. Prior to this change, beta features are regarded as stable in v1beta1 apiVersion and they only require enable-api-fields to be set to beta in v1 apiVersion but not in v1beta1. This PR removes the gap between the validations of the stable features in v1 and v1beta1 by syncing up the validations in v1beta1. Fixes: tektoncd#6592
This commit decouples the existing beta feature validation in v1beta1. Prior to this change, beta features are regarded as stable in v1beta1 apiVersion and they only require enable-api-fields to be set to beta in v1 apiVersion but not in v1beta1. This PR removes the gap between the validations of the stable features in v1 and v1beta1 by syncing up the validations in v1beta1. Fixes: tektoncd#6592
This commit decouples the existing beta feature validation in v1beta1. Prior to this change, beta features are regarded as stable in v1beta1 apiVersion and they only require enable-api-fields to be set to beta in v1 apiVersion but not in v1beta1. This PR removes the gap between the validations of the stable features in v1 and v1beta1 by syncing up the validations in v1beta1. Fixes: tektoncd#6592
This commit decouples the existing beta feature validation in v1beta1. Prior to this change, beta features are regarded as stable in v1beta1 apiVersion and they only require enable-api-fields to be set to beta in v1 apiVersion but not in v1beta1. This PR removes the gap between the validations of the stable features in v1 and v1beta1 by syncing up the validations in v1beta1. Fixes: tektoncd#6592
This commit decouples the existing beta feature validation in v1beta1. Prior to this change, beta features are regarded as stable in v1beta1 apiVersion and they only require enable-api-fields to be set to beta in v1 apiVersion but not in v1beta1. This PR removes the gap between the validations of the stable features in v1 and v1beta1 by syncing up the validations in v1beta1. Fixes: tektoncd#6592
This commit decouples the existing beta feature validation in v1beta1. Prior to this change, beta features are regarded as stable in v1beta1 apiVersion and they only require enable-api-fields to be set to beta in v1 apiVersion but not in v1beta1. This PR removes the gap between the validations of the stable features in v1 and v1beta1 by syncing up the validations in v1beta1. Fixes: tektoncd#6592
Issues go stale after 90d of inactivity. /lifecycle stale Send feedback to tektoncd/plumbing. |
This commit decouples the existing beta feature validation in v1beta1. Prior to this change, beta features are regarded as stable in v1beta1 apiVersion and they only require enable-api-fields to be set to beta in v1 apiVersion but not in v1beta1. This PR removes the gap between the validations of the stable features in v1 and v1beta1 by syncing up the validations in v1beta1. Fixes: tektoncd#6592
This commit adds the feature graduation process documentation to the API compatibility policy. It aims to mitigate the confusions of API versioning that was coupled with feature versioning as in tektoncd#6592. part of: tektoncd#7177 related: TEP0138 /kind documentation
This commit adds the feature graduation process documentation to the API compatibility policy. It aims to mitigate the confusions of API versioning that was coupled with feature versioning as in tektoncd#6592. The graduation process clarifies the independence of feature versions from API versions. part of: tektoncd#7177 related: TEP0138 /kind documentation
This commit adds the feature graduation process documentation to the API compatibility policy. It aims to mitigate the confusions of API versioning that was coupled with feature versioning as in tektoncd#6592. The graduation process clarifies the independence of feature versions from API versions. part of: tektoncd#7177 related: TEP0138 /kind documentation
This commit adds the feature graduation process documentation to the API compatibility policy. It aims to mitigate the confusions of API versioning that was coupled with feature versioning as in tektoncd#6592. The graduation process clarifies the independence of feature versions from API versions. part of: tektoncd#7177 related: TEP0138 /kind documentation
This commit adds the feature graduation process documentation to the API compatibility policy. It aims to mitigate the confusions of API versioning that was coupled with feature versioning as in #6592. The graduation process clarifies the independence of feature versions from API versions. part of: #7177 related: TEP0138 /kind documentation
This commit decouples the existing beta feature validation in v1beta1. Prior to this change, beta features are regarded as stable in v1beta1 apiVersion and they only require enable-api-fields to be set to beta in v1 apiVersion but not in v1beta1. This PR removes the gap between the validations of the stable features in v1 and v1beta1 by syncing up the validations in v1beta1. Fixes: tektoncd#6592
This commit decouples the existing beta feature validation in v1beta1. Prior to this change, beta features are regarded as stable in v1beta1 apiVersion and they only require enable-api-fields to be set to beta in v1 apiVersion but not in v1beta1. This PR removes the gap between the validations of the stable features in v1 and v1beta1 by syncing up the validations in v1beta1. Fixes: tektoncd#6592
This commit decouples the existing beta feature validation in v1beta1. Prior to this change, beta features are regarded as stable in v1beta1 apiVersion and they only require enable-api-fields to be set to beta in v1 apiVersion but not in v1beta1. This PR removes the gap between the validations of the stable features in v1 and v1beta1 by syncing up the validations in v1beta1. Fixes: tektoncd#6592
This commit decouples the existing beta feature validation in v1beta1. Prior to this change, beta features are regarded as stable in v1beta1 apiVersion and they only require enable-api-fields to be set to beta in v1 apiVersion but not in v1beta1. This PR removes the gap between the validations of the stable features in v1 and v1beta1 by syncing up the validations in v1beta1. Fixes: tektoncd#6592
This commit decouples the existing beta feature validation in v1beta1. Prior to this change, beta features are regarded as stable in v1beta1 apiVersion and they only require enable-api-fields to be set to beta in v1 apiVersion but not in v1beta1. This PR removes the gap between the validations of the stable features in v1 and v1beta1 by syncing up the validations in v1beta1. Fixes: tektoncd#6592
This commit decouples the existing beta feature validation in v1beta1. Prior to this change, beta features are regarded as stable in v1beta1 apiVersion and they only require enable-api-fields to be set to beta in v1 apiVersion but not in v1beta1. This PR removes the gap between the validations of the stable features in v1 and v1beta1 by syncing up the validations in v1beta1. Fixes: tektoncd#6592
This commit decouples the existing beta feature validation in v1beta1. Prior to this change, beta features are regarded as stable in v1beta1 apiVersion and they only require enable-api-fields to be set to beta in v1 apiVersion but not in v1beta1. This PR removes the gap between the validations of the stable features in v1 and v1beta1 by syncing up the validations in v1beta1. Fixes: tektoncd#6592
This commit decouples the existing beta feature validation in v1beta1. Prior to this change, beta features are regarded as stable in v1beta1 apiVersion and they only require enable-api-fields to be set to beta in v1 apiVersion but not in v1beta1. This PR removes the gap between the validations of the stable features in v1 and v1beta1 by syncing up the validations in v1beta1. Fixes: tektoncd#6592
This commit decouples the existing beta feature validation in v1beta1. Prior to this change, beta features are regarded as stable in v1beta1 apiVersion and they only require enable-api-fields to be set to beta in v1 apiVersion but not in v1beta1. This PR removes the gap between the validations of the stable features in v1 and v1beta1 by syncing up the validations in v1beta1. Fixes: #6592
This issue tracks progress on the API/feature versioning decoupling as the existing v1 migration blocker. It aims to initiate the discussion on the impact of this towards stakeholders and reach consensus on the approach moving forward.
Context
Currently, the behavior of
enable-api-fields
depends on the CRD API version being used. Inv1beta1
CRDs,beta
features can be enabled by settingenable-api-fields
tobeta
or tostable
, but inv1
CRDs,beta
features can only be enabled by settingenable-api-fields
tobeta
. The coupling of API versioning and feature versioning has been a blocker to thev1
migration.As discussed in the API WG, we would want to decouple API versioning and feature versioning for features
that are turned on by default. If a feature flag was enabled by default but not enabled later on, it would
be considered a breaking change. And it could cause confusion for end users when we are moving to future
stable versions with unstable features. An approach needs to be carried out for avoiding such breaking
changes.
Use case
i.e. resolver is turned on by default in
v1beta1
but cannot be migrated tov1
directly since it is not abeta
feature in thev1
API, which could potentially cause breaking changes for users.Proposed Options
There are some ways that we could use for moving forward:
See decouple API and feature versioning problem statement and adopting per-feature flag proposal for more details.
related: #6579
The text was updated successfully, but these errors were encountered: