From a8efd27b3b8ab399dc045ff7fa71810edbb81d43 Mon Sep 17 00:00:00 2001 From: Siyuan Zhang Date: Fri, 24 Apr 2026 14:50:50 -0500 Subject: [PATCH] test/compatibility_lifecycle: resolve feature names from variables Signed-off-by: Siyuan Zhang --- .../cmd/feature_gates.go | 20 +++++++++++++--- .../cmd/feature_gates_test.go | 23 +++++++++++++++---- .../reference/versioned_feature_list.yaml | 22 +++++++++--------- 3 files changed, 47 insertions(+), 18 deletions(-) diff --git a/test/compatibility_lifecycle/cmd/feature_gates.go b/test/compatibility_lifecycle/cmd/feature_gates.go index 5e174051f01..09a8f64f3f4 100644 --- a/test/compatibility_lifecycle/cmd/feature_gates.go +++ b/test/compatibility_lifecycle/cmd/feature_gates.go @@ -57,7 +57,10 @@ type featureSpec struct { } type featureInfo struct { - Name string `yaml:"name" json:"name"` + Name string `yaml:"name" json:"name"` + // FullName is the full name of the feature, including the package name, + // used for ensuring that features are grouped by their package prefix first, + // and then sorted alphabetically within that group. FullName string `yaml:"-" json:"-"` VersionedSpecs []featureSpec `yaml:"versionedSpecs" json:"versionedSpecs"` } @@ -423,9 +426,20 @@ func isFeatureSpecType(v ast.Expr, aliasMap map[string]string) bool { } func parseFeatureInfo(variables map[string]ast.Expr, kv *ast.KeyValueExpr) (featureInfo, error) { + name := identifierName(kv.Key, true) + fullName := identifierName(kv.Key, false) + + if id, ok := kv.Key.(*ast.Ident); ok { + if varVal, ok := variables[id.Name]; ok { + if strVal, err := basicStringLiteral(varVal); err == nil { + name = strVal + } + } + } + info := featureInfo{ - Name: identifierName(kv.Key, true), - FullName: identifierName(kv.Key, false), + Name: name, + FullName: fullName, VersionedSpecs: []featureSpec{}, } specExps := []ast.Expr{} diff --git a/test/compatibility_lifecycle/cmd/feature_gates_test.go b/test/compatibility_lifecycle/cmd/feature_gates_test.go index 78a6ed6dc55..38dd9e85fce 100644 --- a/test/compatibility_lifecycle/cmd/feature_gates_test.go +++ b/test/compatibility_lifecycle/cmd/feature_gates_test.go @@ -108,7 +108,7 @@ func TestVerifyOrUpdateFeatureListVersioned(t *testing.T) { lockToDefault: false preRelease: Beta version: "1.30" -- name: CPUCFSQuotaPeriod +- name: CustomCPUCFSQuotaPeriod versionedSpecs: - default: false lockToDefault: false @@ -136,6 +136,9 @@ import ( "k8s.io/apimachinery/pkg/util/version" "k8s.io/component-base/featuregate" ) + +const CPUCFSQuotaPeriod featuregate.Feature = "CustomCPUCFSQuotaPeriod" + var defaultVersionedKubernetesFeatureGates = map[featuregate.Feature]featuregate.VersionedSpecs{ AppArmorFields: { {Version: version.MajorMinor(1, 30), Default: true, PreRelease: featuregate.Beta}, @@ -166,6 +169,9 @@ import ( "k8s.io/apimachinery/pkg/util/version" "k8s.io/component-base/featuregate" ) + +const CPUCFSQuotaPeriod featuregate.Feature = "CustomCPUCFSQuotaPeriod" + var defaultVersionedKubernetesFeatureGates = map[featuregate.Feature]featuregate.VersionedSpecs{ AppArmorFields: { {Version: version.MajorMinor(1, 30), Default: true, PreRelease: featuregate.Beta}, @@ -196,7 +202,7 @@ var otherFeatureGates = map[featuregate.Feature]featuregate.VersionedSpecs{ lockToDefault: false preRelease: Beta version: "1.30" -- name: CPUCFSQuotaPeriod +- name: CustomCPUCFSQuotaPeriod versionedSpecs: - default: false lockToDefault: false @@ -276,6 +282,9 @@ import ( "k8s.io/apimachinery/pkg/util/version" "k8s.io/component-base/featuregate" ) + +const CPUCFSQuotaPeriod featuregate.Feature = "CustomCPUCFSQuotaPeriod" + var defaultVersionedKubernetesFeatureGates = map[featuregate.Feature]featuregate.VersionedSpecs{ AppArmorFields: { {Version: version.MajorMinor(1, 30), Default: true, PreRelease: featuregate.Beta}, @@ -312,7 +321,7 @@ var defaultVersionedKubernetesFeatureGates = map[featuregate.Feature]featuregate lockToDefault: false preRelease: Beta version: "1.30" -- name: CPUCFSQuotaPeriod +- name: CustomCPUCFSQuotaPeriod versionedSpecs: - default: false lockToDefault: false @@ -333,6 +342,9 @@ import ( "k8s.io/apimachinery/pkg/util/version" "k8s.io/component-base/featuregate" ) + +const CPUCFSQuotaPeriod featuregate.Feature = "CustomCPUCFSQuotaPeriod" + var defaultVersionedKubernetesFeatureGates = map[featuregate.Feature]featuregate.VersionedSpecs{ CPUCFSQuotaPeriod: { {Version: version.MustParse("1.30"), Default: false, PreRelease: featuregate.Alpha}, @@ -373,6 +385,9 @@ import ( "k8s.io/apimachinery/pkg/util/version" "k8s.io/component-base/featuregate" ) + +const CPUCFSQuotaPeriod featuregate.Feature = "CustomCPUCFSQuotaPeriod" + var defaultVersionedKubernetesFeatureGates = map[featuregate.Feature]featuregate.VersionedSpecs{ AppArmorFields: { {Version: version.MajorMinor(1, 30), Default: true, PreRelease: featuregate.Beta}, @@ -401,7 +416,7 @@ var defaultVersionedKubernetesFeatureGates = map[featuregate.Feature]featuregate lockToDefault: false preRelease: Beta version: "1.30" -- name: CPUCFSQuotaPeriod +- name: CustomCPUCFSQuotaPeriod versionedSpecs: - default: false lockToDefault: false diff --git a/test/compatibility_lifecycle/reference/versioned_feature_list.yaml b/test/compatibility_lifecycle/reference/versioned_feature_list.yaml index 05dad03ce2a..17e41bdd54d 100644 --- a/test/compatibility_lifecycle/reference/versioned_feature_list.yaml +++ b/test/compatibility_lifecycle/reference/versioned_feature_list.yaml @@ -325,16 +325,6 @@ lockToDefault: false preRelease: Beta version: "1.33" -- name: CPUCFSQuotaPeriod - versionedSpecs: - - default: false - lockToDefault: false - preRelease: Alpha - version: "1.12" - - default: true - lockToDefault: false - preRelease: GA - version: "1.36" - name: CPUManagerPolicyAlphaOptions versionedSpecs: - default: false @@ -413,6 +403,16 @@ lockToDefault: false preRelease: Alpha version: "1.21" +- name: CustomCPUCFSQuotaPeriod + versionedSpecs: + - default: false + lockToDefault: false + preRelease: Alpha + version: "1.12" + - default: true + lockToDefault: false + preRelease: GA + version: "1.36" - name: CustomResourceFieldSelectors versionedSpecs: - default: false @@ -1731,7 +1731,7 @@ lockToDefault: false preRelease: Beta version: "1.12" -- name: RuntimeClassInImageCriAPI +- name: RuntimeClassInImageCriApi versionedSpecs: - default: false lockToDefault: false