Skip to content

feat(epp): Add plugin lifecycle and stability levels proposal#2684

Open
hexfusion wants to merge 1 commit intokubernetes-sigs:mainfrom
hexfusion:plugin-lifecycle-proposal
Open

feat(epp): Add plugin lifecycle and stability levels proposal#2684
hexfusion wants to merge 1 commit intokubernetes-sigs:mainfrom
hexfusion:plugin-lifecycle-proposal

Conversation

@hexfusion
Copy link
Copy Markdown
Contributor

/kind feature
/kind documentation

What this PR does / why we need it:

Proposes a plugin lifecycle model for EPP plugins. Today a plugin either exists in the registry or it doesn't -- there is no way to communicate maturity to operators. This proposal adds three stability tiers (Alpha, Beta, Stable) with defined support contracts, feature gate integration for alpha plugins, and validation tombstones for removed plugins.

Which issue(s) this PR fixes:

Fixes #2653

Does this PR introduce a user-facing change?:

  NONE

@k8s-ci-robot k8s-ci-robot added kind/feature Categorizes issue or PR as related to a new feature. kind/documentation Categorizes issue or PR as related to documentation. labels Mar 24, 2026
@netlify
Copy link
Copy Markdown

netlify bot commented Mar 24, 2026

Deploy Preview for gateway-api-inference-extension ready!

Name Link
🔨 Latest commit d1e132c
🔍 Latest deploy log https://app.netlify.com/projects/gateway-api-inference-extension/deploys/69c2dea96452690008e30a35
😎 Deploy Preview https://deploy-preview-2684--gateway-api-inference-extension.netlify.app
📱 Preview on mobile
Toggle QR Code...

QR Code

Use your smartphone camera to open QR code link.

To edit notification comments on pull requests, go to your Netlify project configuration.

@k8s-ci-robot
Copy link
Copy Markdown
Contributor

[APPROVALNOTIFIER] This PR is NOT APPROVED

This pull-request has been approved by: hexfusion
Once this PR has been reviewed and has the lgtm label, please assign danehans for approval. For more information see the Code Review Process.

The full list of commands accepted by this bot can be found here.

Details Needs approval from an approver in each of these files:

Approvers can indicate their approval by writing /approve in a comment
Approvers can cancel approval by writing /approve cancel in a comment

@k8s-ci-robot k8s-ci-robot added the needs-ok-to-test Indicates a PR that requires an org member to verify it is safe to test. label Mar 24, 2026
@k8s-ci-robot
Copy link
Copy Markdown
Contributor

Hi @hexfusion. Thanks for your PR.

I'm waiting for a kubernetes-sigs member to verify that this patch is reasonable to test. If it is, they should reply with /ok-to-test on its own line. Until that is done, I will not automatically test new commits in this PR, but the usual testing commands by org members will still work.

Regular contributors should join the org to skip this step.

Once the patch is verified, the new status will be reflected by the ok-to-test label.

I understand the commands that are listed here.

Details

Instructions for interacting with me using PR comments are available here. If you have questions or suggestions related to my behavior, please file an issue against the kubernetes-sigs/prow repository.

@k8s-ci-robot k8s-ci-robot added size/L Denotes a PR that changes 100-499 lines, ignoring generated files. cncf-cla: yes Indicates the PR's author has signed the CNCF CLA. labels Mar 24, 2026
Signed-off-by: Sam Batschelet <sbatsche@redhat.com>
func Register(pluginType string, factory FactoryFunc) {
Registry[pluginType] = RegistryEntry{
Factory: factory,
Stability: Unknown,
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

will it reject out of tree plugin until the migration?

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

tbh, I would update Register function (instead of adding a different one) and out of tree plugins should be able to adopt it very easily, using Unknown on their end.
I would prefer to make it a must rather than keep Unknown stability which as far as I can see here - its behavior is not well defined.
does it require feature gate or not? should we allow it? why would out of tree plugins move from Unknown, what is their motivation?

pluginType, entry.Stability))
}
if entry.Stability == Alpha && entry.FeatureGate == "" {
panic(fmt.Sprintf(
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

don't panic. skip register and return an error.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

panic is scary will remove but we should consider Must in this context

Comment on lines +157 to +160
Unknown StabilityLevel = "Unknown"
Alpha StabilityLevel = "Alpha"
Beta StabilityLevel = "Beta"
Stable StabilityLevel = "Stable"
Copy link
Copy Markdown
Contributor

@nirrozenbaum nirrozenbaum Mar 25, 2026

Choose a reason for hiding this comment

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

what about Deprecated?
Deprecated must come with Deprecation message.

// error with migration guidance instead of the generic "not
// registered" error from instantiatePlugins. Tombstones are
// permanent and small.
var removedPlugins = map[string]string{
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

not all plugins can be mapped 1:1 from old plugins to new.
for example - we might have an old plugin that we decide to split into two sub-plugins.

Comment on lines +318 to +321
2. Should graduation criteria be GIE-specific, or adopt Gateway
API's requirements?
3. Where does the stability policy live, `docs/plugin-lifecycle.md`,
`CONTRIBUTING.md`, or a dedicated proposal?
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

graduation criteria is a difficult question. if you ask 10 different people who know GIE well about 10 different plugins - you might hear different opinions about how graduated a plugin is.
I would document it the plugins doc in the website as well as in docs.
CONTRIBUTING.md is a general guide for contributions, not specific to plugins or anything related to their lifecycle.

@@ -0,0 +1,322 @@
# Plugin Lifecycle and Stability Levels
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

nice proposal :)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

cncf-cla: yes Indicates the PR's author has signed the CNCF CLA. kind/documentation Categorizes issue or PR as related to documentation. kind/feature Categorizes issue or PR as related to a new feature. needs-ok-to-test Indicates a PR that requires an org member to verify it is safe to test. size/L Denotes a PR that changes 100-499 lines, ignoring generated files.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Plugin Lifecycle and Stability Levels

3 participants