diff --git a/staging/src/k8s.io/code-generator/cmd/validation-gen/validation.go b/staging/src/k8s.io/code-generator/cmd/validation-gen/validation.go index 10a6c4b7a72..b4a6b51ef38 100644 --- a/staging/src/k8s.io/code-generator/cmd/validation-gen/validation.go +++ b/staging/src/k8s.io/code-generator/cmd/validation-gen/validation.go @@ -247,9 +247,9 @@ type typeNode struct { // hasValidations. These let us emit the iteration code for list and // map types, but we might not have enough information to know if we can // skip them at discovery time. - typeValIterations validators.Validations // validations on each val - typeKeyIterations validators.Validations // validations on each key - lowestStabilityLevel validators.StabilityLevel // populated to the lowest stability level of any validation in this type + typeValIterations validators.Validations // validations on each val + typeKeyIterations validators.Validations // validations on each key + lowestStabilityLevel validators.TagStabilityLevel // populated to the lowest stability level of any validation in this type } // DiscoverType walks the given type recursively, building a type-graph in this @@ -306,7 +306,7 @@ func (td *typeDiscoverer) discoverType(t *types.Type, fldPath *field.Path) (*typ // This is the type-node being assembled in the rest of this function. thisNode := &typeNode{ valueType: t, - lowestStabilityLevel: validators.Stable, + lowestStabilityLevel: validators.TagStabilityLevelStable, } td.typeNodes[t] = thisNode @@ -595,7 +595,7 @@ func (td *typeDiscoverer) verifySupportedType(t *types.Type) error { // discoverStruct walks a struct type recursively. func (td *typeDiscoverer) discoverStruct(thisNode *typeNode, fldPath *field.Path) error { var fields []*childNode - structLowestStability := validators.Stable + structLowestStability := validators.TagStabilityLevelStable klog.V(5).InfoS("discoverStruct", "type", thisNode.valueType) @@ -813,8 +813,8 @@ func (td *typeDiscoverer) discoverStruct(thisNode *typeNode, fldPath *field.Path // analyzeFieldTags processes the tags for a field, checking for declarative native // validation and stability levels. // This returns lowest stability level of tags for the field. -func (td *typeDiscoverer) analyzeFieldTags(tags []codetags.Tag, node *childNode, fldPath *field.Path) (validators.StabilityLevel, error) { - fieldLowestStabilityLevel := validators.Stable +func (td *typeDiscoverer) analyzeFieldTags(tags []codetags.Tag, node *childNode, fldPath *field.Path) (validators.TagStabilityLevel, error) { + fieldLowestStabilityLevel := validators.TagStabilityLevelStable var isDeclarativeNative bool for _, tag := range tags { if tag.Name == declarativeNativeTag { @@ -838,13 +838,13 @@ func (td *typeDiscoverer) analyzeFieldTags(tags []codetags.Tag, node *childNode, if stability, err := td.validator.Stability(tag.Name); err != nil { // This case should ideally not be hit if our tag registry is complete. return fieldLowestStabilityLevel, fmt.Errorf("field %s: error occurred while finding stability level for %s tag: %w", fldPath.String(), tag.Name, err) - } else if stability != validators.Stable { + } else if stability != validators.TagStabilityLevelStable { return fieldLowestStabilityLevel, fmt.Errorf("field %s: +k8s:declarativeValidationNative can only be used with stable validation tags, but found %q which is %s", fldPath.String(), tag.Name, stability) } } // If the type has non stable validations. - if node.node != nil && node.node.lowestStabilityLevel != validators.Stable { + if node.node != nil && node.node.lowestStabilityLevel != validators.TagStabilityLevelStable { return fieldLowestStabilityLevel, fmt.Errorf("field %s: is marked with +k8s:declarativeValidationNative but its type %q contains non-stable validation tags", fldPath.String(), node.node.valueType.Name) } } diff --git a/staging/src/k8s.io/code-generator/cmd/validation-gen/validation_test.go b/staging/src/k8s.io/code-generator/cmd/validation-gen/validation_test.go index 2d3ad2384da..2e8dc0c1e35 100644 --- a/staging/src/k8s.io/code-generator/cmd/validation-gen/validation_test.go +++ b/staging/src/k8s.io/code-generator/cmd/validation-gen/validation_test.go @@ -492,7 +492,7 @@ func TestDiscoverStruct(t *testing.T) { name string typeToTest *types.Type expectErr error - expectedStabilityLevel validators.StabilityLevel + expectedStabilityLevel validators.TagStabilityLevel }{ { name: "simple struct with stable validations", @@ -524,7 +524,7 @@ func TestDiscoverStruct(t *testing.T) { }, }, expectErr: nil, - expectedStabilityLevel: validators.Stable, + expectedStabilityLevel: validators.TagStabilityLevelStable, }, { name: "struct with non-stable validation on a field", @@ -541,7 +541,7 @@ func TestDiscoverStruct(t *testing.T) { }, }, expectErr: nil, - expectedStabilityLevel: validators.Alpha, + expectedStabilityLevel: validators.TagStabilityLevelAlpha, }, { name: "struct with declarative native fields with stable validations", @@ -571,7 +571,7 @@ func TestDiscoverStruct(t *testing.T) { }, }, expectErr: nil, - expectedStabilityLevel: validators.Stable, + expectedStabilityLevel: validators.TagStabilityLevelStable, }, { name: "struct with declarative native field string with non-stable validations", @@ -629,7 +629,7 @@ func TestDiscoverStruct(t *testing.T) { }, }, expectErr: nil, - expectedStabilityLevel: validators.Stable, + expectedStabilityLevel: validators.TagStabilityLevelStable, }, { name: "struct with a field whose type has non-stable validations", @@ -656,7 +656,7 @@ func TestDiscoverStruct(t *testing.T) { }, }, expectErr: nil, - expectedStabilityLevel: validators.Alpha, + expectedStabilityLevel: validators.TagStabilityLevelAlpha, }, } for _, tc := range testCases { diff --git a/staging/src/k8s.io/code-generator/cmd/validation-gen/validators/each.go b/staging/src/k8s.io/code-generator/cmd/validation-gen/validators/each.go index bbdc08204ca..917fd7f49d7 100644 --- a/staging/src/k8s.io/code-generator/cmd/validation-gen/validators/each.go +++ b/staging/src/k8s.io/code-generator/cmd/validation-gen/validators/each.go @@ -226,7 +226,7 @@ func (evtv eachValTagValidator) getMapValidations(t *types.Type, validations Val func (evtv eachValTagValidator) Docs() TagDoc { doc := TagDoc{ Tag: evtv.TagName(), - StabilityLevel: Alpha, + StabilityLevel: TagStabilityLevelAlpha, Scopes: evtv.ValidScopes().UnsortedList(), Description: "Declares a validation for each value in a map or list.", Payloads: []TagPayloadDoc{{ @@ -309,7 +309,7 @@ func (ektv eachKeyTagValidator) Docs() TagDoc { doc := TagDoc{ Tag: ektv.TagName(), Scopes: ektv.ValidScopes().UnsortedList(), - StabilityLevel: Alpha, + StabilityLevel: TagStabilityLevelAlpha, Description: "Declares a validation for each value in a map or list.", Payloads: []TagPayloadDoc{{ Description: "", diff --git a/staging/src/k8s.io/code-generator/cmd/validation-gen/validators/enum.go b/staging/src/k8s.io/code-generator/cmd/validation-gen/validators/enum.go index 2c109ccd753..579c5b792ec 100644 --- a/staging/src/k8s.io/code-generator/cmd/validation-gen/validators/enum.go +++ b/staging/src/k8s.io/code-generator/cmd/validation-gen/validators/enum.go @@ -62,7 +62,7 @@ func (*enumExcludeTagValidator) GetValidations(_ Context, _ codetags.Tag) (Valid func (eetv *enumExcludeTagValidator) Docs() TagDoc { return TagDoc{ Tag: eetv.TagName(), - StabilityLevel: Alpha, + StabilityLevel: TagStabilityLevelAlpha, Scopes: eetv.ValidScopes().UnsortedList(), Description: `Indicates that an constant value is not part of an enum, even if the constant's type is tagged with k8s:enum. May be conditionally excluded via +k8s:ifEnabled(Option)=+k8s:enumExclude or +k8s:ifDisabled(Option)=+k8s:enumExclude. @@ -194,7 +194,7 @@ func (etv *enumTagValidator) GetValidations(context Context, _ codetags.Tag) (Va func (etv *enumTagValidator) Docs() TagDoc { return TagDoc{ Tag: etv.TagName(), - StabilityLevel: Stable, + StabilityLevel: TagStabilityLevelStable, Scopes: etv.ValidScopes().UnsortedList(), Description: "Indicates that a string type is an enum. All constant values of this type are considered values in the enum unless excluded using +k8s:enumExclude.", } diff --git a/staging/src/k8s.io/code-generator/cmd/validation-gen/validators/equality.go b/staging/src/k8s.io/code-generator/cmd/validation-gen/validators/equality.go index 005213b4667..d676343c5c4 100644 --- a/staging/src/k8s.io/code-generator/cmd/validation-gen/validators/equality.go +++ b/staging/src/k8s.io/code-generator/cmd/validation-gen/validators/equality.go @@ -98,7 +98,7 @@ func (v neqTagValidator) GetValidations(context Context, tag codetags.Tag) (Vali func (v neqTagValidator) Docs() TagDoc { return TagDoc{ Tag: v.TagName(), - StabilityLevel: Alpha, + StabilityLevel: TagStabilityLevelAlpha, Scopes: v.ValidScopes().UnsortedList(), Description: "Verifies the field's value is not equal to a specific disallowed value. Supports string, integer, and boolean types.", PayloadsRequired: true, diff --git a/staging/src/k8s.io/code-generator/cmd/validation-gen/validators/format.go b/staging/src/k8s.io/code-generator/cmd/validation-gen/validators/format.go index 47088db2b51..aa86fc33f4c 100644 --- a/staging/src/k8s.io/code-generator/cmd/validation-gen/validators/format.go +++ b/staging/src/k8s.io/code-generator/cmd/validation-gen/validators/format.go @@ -123,7 +123,7 @@ func getFormatValidationFunction(format string) (FunctionGen, error) { func (ftv formatTagValidator) Docs() TagDoc { return TagDoc{ Tag: ftv.TagName(), - StabilityLevel: Stable, + StabilityLevel: TagStabilityLevelStable, Scopes: ftv.ValidScopes().UnsortedList(), Description: "Indicates that a string field has a particular format.", Payloads: []TagPayloadDoc{{ // Keep this list alphabetized. diff --git a/staging/src/k8s.io/code-generator/cmd/validation-gen/validators/immutable.go b/staging/src/k8s.io/code-generator/cmd/validation-gen/validators/immutable.go index 82cdf4d2df5..30c8ee63d42 100644 --- a/staging/src/k8s.io/code-generator/cmd/validation-gen/validators/immutable.go +++ b/staging/src/k8s.io/code-generator/cmd/validation-gen/validators/immutable.go @@ -59,7 +59,7 @@ func (immutableTagValidator) GetValidations(context Context, _ codetags.Tag) (Va func (itv immutableTagValidator) Docs() TagDoc { return TagDoc{ Tag: itv.TagName(), - StabilityLevel: Alpha, + StabilityLevel: TagStabilityLevelAlpha, Scopes: itv.ValidScopes().UnsortedList(), Description: "Indicates that a field may not be updated.", } diff --git a/staging/src/k8s.io/code-generator/cmd/validation-gen/validators/item.go b/staging/src/k8s.io/code-generator/cmd/validation-gen/validators/item.go index 6f570597f4c..5e3e8e37260 100644 --- a/staging/src/k8s.io/code-generator/cmd/validation-gen/validators/item.go +++ b/staging/src/k8s.io/code-generator/cmd/validation-gen/validators/item.go @@ -249,7 +249,7 @@ func parseTypedValue(value string, argType codetags.ArgType) (any, codetags.Valu func (itv itemTagValidator) Docs() TagDoc { doc := TagDoc{ Tag: itv.TagName(), - StabilityLevel: Stable, + StabilityLevel: TagStabilityLevelStable, Scopes: itv.ValidScopes().UnsortedList(), Description: "Declares a validation for an item of a slice declared as a +k8s:listType=map. " + "The item to match is declared by providing field-value pair arguments. All key fields must be specified.", diff --git a/staging/src/k8s.io/code-generator/cmd/validation-gen/validators/limits.go b/staging/src/k8s.io/code-generator/cmd/validation-gen/validators/limits.go index bab98acf943..899dadb4f8e 100644 --- a/staging/src/k8s.io/code-generator/cmd/validation-gen/validators/limits.go +++ b/staging/src/k8s.io/code-generator/cmd/validation-gen/validators/limits.go @@ -79,7 +79,7 @@ func (maxLengthTagValidator) GetValidations(context Context, tag codetags.Tag) ( func (mltv maxLengthTagValidator) Docs() TagDoc { return TagDoc{ Tag: mltv.TagName(), - StabilityLevel: Stable, + StabilityLevel: TagStabilityLevelStable, Scopes: mltv.ValidScopes().UnsortedList(), Description: "Indicates that a string field has a limit on its length.", Payloads: []TagPayloadDoc{{ @@ -137,7 +137,7 @@ func (maxItemsTagValidator) GetValidations(context Context, tag codetags.Tag) (V func (mitv maxItemsTagValidator) Docs() TagDoc { return TagDoc{ Tag: mitv.TagName(), - StabilityLevel: Stable, + StabilityLevel: TagStabilityLevelStable, Scopes: mitv.ValidScopes().UnsortedList(), Description: "Indicates that a list has a limit on its size.", Payloads: []TagPayloadDoc{{ @@ -187,7 +187,7 @@ func (minimumTagValidator) GetValidations(context Context, tag codetags.Tag) (Va func (mtv minimumTagValidator) Docs() TagDoc { return TagDoc{ Tag: mtv.TagName(), - StabilityLevel: Stable, + StabilityLevel: TagStabilityLevelStable, Scopes: mtv.ValidScopes().UnsortedList(), Description: "Indicates that a numeric field has a minimum value.", Payloads: []TagPayloadDoc{{ diff --git a/staging/src/k8s.io/code-generator/cmd/validation-gen/validators/list.go b/staging/src/k8s.io/code-generator/cmd/validation-gen/validators/list.go index d5a80b056de..7bc8f5c9909 100644 --- a/staging/src/k8s.io/code-generator/cmd/validation-gen/validators/list.go +++ b/staging/src/k8s.io/code-generator/cmd/validation-gen/validators/list.go @@ -182,7 +182,7 @@ func (lttv listTypeTagValidator) GetValidations(context Context, tag codetags.Ta func (lttv listTypeTagValidator) Docs() TagDoc { doc := TagDoc{ Tag: lttv.TagName(), - StabilityLevel: Stable, + StabilityLevel: TagStabilityLevelStable, Scopes: lttv.ValidScopes().UnsortedList(), Description: "Declares a list field's semantic type and ownership behavior. atomic: single ownership, set: shared ownership with uniqueness, map: shared ownership with key-based uniqueness.", Payloads: []TagPayloadDoc{{ @@ -250,7 +250,7 @@ func (lmktv listMapKeyTagValidator) GetValidations(context Context, tag codetags func (lmktv listMapKeyTagValidator) Docs() TagDoc { doc := TagDoc{ Tag: lmktv.TagName(), - StabilityLevel: Stable, + StabilityLevel: TagStabilityLevelStable, Scopes: lmktv.ValidScopes().UnsortedList(), Description: "Declares a named sub-field of a list's value-type to be part of the list-map key.", Payloads: []TagPayloadDoc{{ @@ -319,7 +319,7 @@ func (utv uniqueTagValidator) GetValidations(context Context, tag codetags.Tag) func (utv uniqueTagValidator) Docs() TagDoc { doc := TagDoc{ Tag: utv.TagName(), - StabilityLevel: Alpha, + StabilityLevel: TagStabilityLevelAlpha, Scopes: utv.ValidScopes().UnsortedList(), Description: "Declares that a list field's elements are unique. This tag can be used with listType=atomic to add uniqueness constraints, or independently to specify uniqueness semantics.", Payloads: []TagPayloadDoc{{ @@ -369,7 +369,7 @@ func (cutv customUniqueTagValidator) GetValidations(context Context, tag codetag func (cutv customUniqueTagValidator) Docs() TagDoc { doc := TagDoc{ Tag: cutv.TagName(), - StabilityLevel: Alpha, + StabilityLevel: TagStabilityLevelAlpha, Scopes: cutv.ValidScopes().UnsortedList(), Description: "Indicates that uniqueness validation for this list is implemented via custom, handwritten validation. This disables generation of uniqueness validation for this list.", Payloads: nil, diff --git a/staging/src/k8s.io/code-generator/cmd/validation-gen/validators/native.go b/staging/src/k8s.io/code-generator/cmd/validation-gen/validators/native.go index 341c05b8f72..5fbb7898c86 100644 --- a/staging/src/k8s.io/code-generator/cmd/validation-gen/validators/native.go +++ b/staging/src/k8s.io/code-generator/cmd/validation-gen/validators/native.go @@ -55,6 +55,6 @@ func (d *declarativeValidationNative) Docs() TagDoc { Tag: d.TagName(), Description: "Indicates that all validations for the field, including any on the field's type, are declarative and do not have a corresponding handwritten equivalent. This is only allowed for validations that are 'Stable'. When used, validation errors will be marked to show they originated from a declarative-only validation.", Scopes: d.ValidScopes().UnsortedList(), - StabilityLevel: Stable, + StabilityLevel: TagStabilityLevelStable, } } diff --git a/staging/src/k8s.io/code-generator/cmd/validation-gen/validators/opaque.go b/staging/src/k8s.io/code-generator/cmd/validation-gen/validators/opaque.go index 2b4124be68c..f8d75573b52 100644 --- a/staging/src/k8s.io/code-generator/cmd/validation-gen/validators/opaque.go +++ b/staging/src/k8s.io/code-generator/cmd/validation-gen/validators/opaque.go @@ -48,7 +48,7 @@ func (opaqueTypeTagValidator) GetValidations(_ Context, _ codetags.Tag) (Validat func (opaqueTypeTagValidator) Docs() TagDoc { doc := TagDoc{ Tag: opaqueTypeTagName, - StabilityLevel: Alpha, + StabilityLevel: TagStabilityLevelAlpha, Scopes: []Scope{ScopeField}, Description: "Indicates that any validations declared on the referenced type will be ignored. " + "If a referenced type's package is not included in the generator's current " + diff --git a/staging/src/k8s.io/code-generator/cmd/validation-gen/validators/options.go b/staging/src/k8s.io/code-generator/cmd/validation-gen/validators/options.go index 71037240764..477d971513b 100644 --- a/staging/src/k8s.io/code-generator/cmd/validation-gen/validators/options.go +++ b/staging/src/k8s.io/code-generator/cmd/validation-gen/validators/options.go @@ -81,7 +81,7 @@ func (itv ifTagValidator) GetValidations(context Context, tag codetags.Tag) (Val func (itv ifTagValidator) Docs() TagDoc { doc := TagDoc{ Tag: itv.TagName(), - StabilityLevel: Alpha, + StabilityLevel: TagStabilityLevelAlpha, Args: []TagArgDoc{{ Description: "