This document proposes a policy regarding making updates to the Tekton API surface in this repo. Users should be able to build on the APIs in these projects with a clear idea of what they can rely on and what should be considered in progress and therefore likely to change.
The API is considered to consist of:
spec
and status
sections, as well as:
steps
within the status
step
containers within the status
PipelineRuns
to TaskRuns
and TaskRuns
to Pods
.This policy is about changes to any of the above facets of the API.
A backwards incompatible change would be a change that requires a user to update existing instances of these CRDs in clusters where they are deployed and/or cause them to change their CRD definitions to account for changes in the above.
The apiVersion
field in a Tekton CRD determines whether the overall API (and its default behaviors) is considered to be in alpha
, beta
, or GA
. The use of alpha
, beta
and GA
(aka stable
) follows the corresponding Kubernetes API stages definition.
Within a stable CRD, certain opt-in features or API fields gated may be considered alpha
or beta
. Similarly, within a beta CRD, certain opt-in features may be considered alpha
. See the section on Feature Gates for details.
The following CRDs are considered stable, though features may be introduced that are alpha or beta:
v1.Task
v1.TaskRun
v1.Pipeline
v1.PipelineRun
v1beta1.CustomRun
is a beta CRD. Adding new fields to CustomRun
that all CustomRun
controllers are required to support is considered a backwards incompatible change,
and follows the beta policy for backwards incompatible changes.
v1beta1.ResolutionRequest
is a beta CRD. Adding new fields to ResolutionRequest
that all resolvers are required to support is considered a backwards incompatible change,
and follows the beta policy for backwards incompatible changes.
The following CRDs are deprecated. New features will not be added, but they will receive bug fixes.
v1beta1.Task
v1beta1.ClusterTask
v1beta1.TaskRun
v1beta1.Pipeline
v1beta1.PipelineRun
To migrate to the v1 versions of these APIs, see the migration guide. For more information on support windows, see the deprecations table.
For Alpha CRDs, the apiVersion
contains the alpha
(e.g. v1alpha1
)
Features may be dropped at any time, though you will be given at least one release worth of warning.
The apiVersion
field of the CRD contains contain beta
(for example, v1beta1
).
These features will not be dropped, though the details may change.
Any backwards incompatible changes must be introduced in a backwards compatible manner first, with a deprecation warning in the release notes and migration instructions.
Users will be given at least 9 months to migrate before a backward incompatible change is made. This means an older beta API version will continue to receive bug fixes in new releases for a period of at least 9 months from the time a newer version is made available.
v1beta1
CRDs will not be removed until 1 year after they are deprecated,
because no stable API was available when they were created. The 9 month policy will apply to future beta APIs.Alpha features may be present within a beta API version. However, they will not be enabled by default and must be enabled by setting enable-api-fields
to alpha
.
The apiVersion
field of the CRD is vX
where X
is an integer.
Stable API versions remain available for all future releases within a semver major version.
Stable features may be marked as deprecated but may only be removed by incrementing the api version (i.e v1 to v2).
We will not make any backwards incompatible changes to fields that are stable without incrementing the api version.
Alpha and Beta features may be present within a stable API version. Alpha features will not be enabled by default and must be enabled by setting enable-api-fields
to alpha
. To disable beta features as well, set enable-api-fields
to stable
.
Stability levels of feature gates are independent from CRD apiVersions.
TEP0138 has introduced per-feature flags for new API-driven features and the migration plan for enable-api-fields
. Please refer to the table below for the API-driven features validation transition:
Releases | Global flag enable-api-fields
|
Per-feature flag |
---|---|---|
Prior to v0.53.0 | All alpha/beta API-driven features | |
After v0.53.0 | Existing alpha/beta API-driven features prior to v0.53.0 | New alpha/beta API-driven features introduced after v0.53.0 |
All alpha/beta API-driven features in v0.53.0 become stable or are removed | Sunset enable-api-fields |
All alpha/beta API-driven features |
Note that behavioural(non-API-driven) flags will retain their original usage.
With per-feature flags, cluster operators are able to enable a single new feature with their dedicated feature flags. For instructions on how to add a per-feature flag, please check the developer feature versioning guide.
Note that the enable-api-fields
feature flag will continue to validate all features that werebeta and alpha prior to v0.53.0:
stable
- This value indicates that only fields of the highest stability level are enabled; i.e. alpha
and beta
fields are not enabled.
beta
(default) - This value indicates that only fields which are of beta
(or greater) stability are enabled, i.e. alpha
fields are not enabled.
alpha
- This value indicates that fields of all stability levels are enabled, specifically alpha
, beta
and GA
(stable
).
See the current list of alpha features and beta features.
enable-api-fields value |
stable features enabled | beta features enabled | alpha features enabled |
---|---|---|---|
stable | x | ||
beta | x | x | |
alpha | x | x | x |
Alpha features are disabled by default and must be enabled by setting enable-api-fields
to alpha
These features may be dropped or backwards incompatible changes made at any time, though one release worth of warning will be provided.
Alpha features are reviewed for promotion to beta at a regular basis. However, there is no guarantee that they will be promoted to beta.
Beta features are enabled by default and can be disabled by setting enable-api-fields
to stable
.
These features will not be dropped, though the details may change.
Beta features may be changed in a backwards incompatible way by following the same process as Beta CRDs i.e. by providing a 9 month support period.
Beta features are reviewed for promotion to GA/Stable on a regular basis. However, there is no guarantee that they will be promoted to GA/stable.
GA/Stable features are enabled by default.
enable-api-fields
flag because they cannot be disabled.GA/Stable features are features that have been promoted from beta to the highest level of stability. They cannot be disabled in any CRD version.
GA/Stable features will not be removed or changed in a backwards incompatible manner without incrementing the API Version.
Features are first released as experimental in alpha, refined in beta, and finalized in stable releases.
alpha
featurealpha
stability level and be disabled by default.beta
beta
. This stage is where features are further tested and refined.beta
. It will continue to be disabled by default.stable
stable
, it will be turned on by default.API changes must be approved by OWNERS. The policy is slightly different for additive changes vs. backwards incompatible changes.
Additive changes are changes that add to the API and do not cause problems for users of previous versions of the API.
These changes must be approved by at least 2 OWNERS.
Backwards incompatible changes change the API, e.g. by removing fields from a CRD spec. These changes will mean that folks using a previous version of the API will need to adjust their usage in order to use the new version. Adding a new field to the CustomRun API that all CustomRun controllers are expected to support is also a backwards incompatible change, as CustomRun controllers that were valid before the change would be invalid after the change. Similarly, adding a new field to the ResolutionRequest API that all resolvers are expected to support is also a backwards incompatible change.
These changes must be approved by more than half of the project OWNERS (i.e. 50% + 1).
Tekton Pipelines maintains a list of features that have been deprecated which includes the earliest date each feature will be removed.
In this context, "tombstoning" refers to retaining a field in client libraries, so that clients can continue to deserialize objects created with an older server version, while disallowing new usage of the field.
The compatibility policy for the github.com/tektoncd/pipeline Go package currently only covers
Go structs representing CRDs in pkg/apis
, the generated client libraries in pkg/client
, and the resolver interface.
Backwards compatibility for other parts of the codebase is on a best-effort basis.
Pipelines contributors are working on modularizing pkg/apis
, so that clients only need to import a minimal set of dependencies.
This work is tracked in issue #6483.
Pipelines contributors also plan to move all internal functionality in the entire github.com/tektoncd/pipeline Go package
into internal packages. This work is tracked in issue #5679.
Please follow these issues for developments in this area and any related changes to compatibility policies.
Go structs representing alpha CRDs may change in breaking ways at any time. If the change impacts the yaml/JSON API, we will provide one release of warning.
If an alpha CRD stops being served, its client library will not be removed until the last release with support for the CRD has reached its end of life.
If support for a field is dropped, the field may also be removed from the client libraries; i.e. it is not guaranteed to be tombstoned.
Go structs representing beta CRDs may change in breaking ways if the yaml/JSON API is unaffected.
If a beta CRD stops being served, its client library will not be removed until the last release with support for the CRD has reached its end of life.
If support for an alpha field is dropped, the field will be tombstoned in client libraries and will not be removed until the last release with support for the field.
Go structs representing stable fields may not change in breaking ways without a semver major version bump, even if the yaml/JSON API is unaffected.
If a GA CRD stops being served (via a semver major version bump), the client libraries for this CRD will not be removed.
If support for an alpha field is dropped, the field will be tombstoned in client libraries and will not be removed.
If an alpha or beta field is renamed, the old field name will be tombstoned in client libraries and will not be removed.
Remote resolution is currently a beta feature. Issue #6579 tracks promoting resolution to stable. Backwards compatibility for the resolver interface is currently on a best-effort basis. When remote resolution is promoted to stable, backwards incompatible changes may not be made to the resolver interface.
Are you a Tekton contributor looking to make a backwards incompatible change? Read more on additional considerations at api-changes.md.
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Опубликовать ( 0 )