You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Graduate the VinylCache API from v1alpha1 for 1.0 #122
1.0 is meant to be the first release with a stability promise (plan: #106 (comment)). The only API version is vinyl.bluedynamics.eu/v1alpha1. A 1.0 operator that serves only an alpha API promises nothing about the API, so the version should move before the release.
Proposal
Add v1 (or v1beta1, to be decided) with the same schema as v1alpha1 and make it the storage version.
Keep serving v1alpha1 for at least the 1.x series, marked deprecated. The schemas are identical, so this needs no conversion webhook (strategy: None).
Move the in-repo consumers (generator, controller, webhook, E2E fixtures, docs) and cdk8s-plone's generated import to the new version.
Before the freeze
Changes that are breaking once the API is stable have to land first: #97 (inert xkey.softPurge), #46. Field names stay as they are: varnishParameters also fits Vinyl Cache, whose parameters are the same.
Decision: graduate to v1 directly, not v1beta1. 1.0 is the stability promise, and the 1.1 flavor field is additive, which v1 allows.
Shape
New package api/v1. It is a copy of the v1alpha1 types and becomes the storage version (+kubebuilder:storageversion).
v1alpha1 stays served for the 1.x series, marked deprecated with +kubebuilder:deprecatedversion and a warning that points at v1.
Identical schemas, conversion None. The API server only rewrites apiVersion, so no conversion webhook is needed.
The price: while v1alpha1 is served, every schema change goes into both packages. A field that only v1 had would be pruned when read or written through v1alpha1, and a v1alpha1 client would silently drop it.
A test asserts that both generated schemas are equal, so the two packages cannot drift.
Webhooks register for v1 only, with matchPolicy: Equivalent (the default), so requests for v1alpha1 are converted and validated by the same code.
The operator, generator, webhook and controller switch to the v1 types. E2E fixtures and docs move to apiVersion: vinyl.bluedynamics.eu/v1. One fixture stays on v1alpha1 to prove the old version still admits and reconciles.
Stored objects: existing objects stay encoded as v1alpha1 in etcd until their next write, and status.storedVersions keeps listing v1alpha1.
Dropping v1alpha1 later (2.0) needs a storage migration first.
The operator can make that trivial by rewriting each object once, because reconcile already writes status. I would only note this here, not build it now.
Order
This lands after#121, #124, #126 and #127, because each of them changes the API types or the CRD, and this PR duplicates both.
Outside this repo
cdk8s-plone generates its import from the CRD and keeps working against v1alpha1. Moving it to v1 is a follow-up there, not a blocker for 1.0.
Activity
jensens commentedon Oct 25, 2026
Plan
Decision: graduate to
v1directly, notv1beta1. 1.0 is the stability promise, and the 1.1 flavor field is additive, whichv1allows.Shape
api/v1. It is a copy of thev1alpha1types and becomes the storage version (+kubebuilder:storageversion).v1alpha1stays served for the 1.x series, marked deprecated with+kubebuilder:deprecatedversionand a warning that points atv1.None. The API server only rewritesapiVersion, so no conversion webhook is needed.v1alpha1is served, every schema change goes into both packages. A field that onlyv1had would be pruned when read or written throughv1alpha1, and av1alpha1client would silently drop it.v1only, withmatchPolicy: Equivalent(the default), so requests forv1alpha1are converted and validated by the same code.v1types. E2E fixtures and docs move toapiVersion: vinyl.bluedynamics.eu/v1. One fixture stays onv1alpha1to prove the old version still admits and reconciles.v1alpha1in etcd until their next write, andstatus.storedVersionskeeps listingv1alpha1.v1alpha1later (2.0) needs a storage migration first.Order
This lands after #121, #124, #126 and #127, because each of them changes the API types or the CRD, and this PR duplicates both.
Outside this repo
cdk8s-plone generates its import from the CRD and keeps working against
v1alpha1. Moving it tov1is a follow-up there, not a blocker for 1.0.Assisted-by: Claude Opus 5.5