// copy to the bottom of the file - pkg/features/kube_features_test.go func TestGenerateMarkDownOfAllKubeFeaturesRegistered(t *testing.T) { var sb strings.Builder sb.WriteString("| Feature | Alpha | Beta | GA | Deprecated | Links |\n") sb.WriteString("|---------|-------|------|----|----|----|\n") // Extract keys from the map keys := make([]string, 0, len(defaultVersionedKubernetesFeatureGates)) for key := range defaultVersionedKubernetesFeatureGates { keys = append(keys, string(key)) } sort.Strings(keys) for _, feature := range keys { specs := defaultVersionedKubernetesFeatureGates[featuregate.Feature(feature)] alpha, beta, ga, deprecated := "", "", "", "" for _, spec := range specs { switch spec.PreRelease { case featuregate.Alpha: if len(alpha) > 0 { alpha += ", " } alpha += spec.Version.String() if spec.Default { alpha += " :ballot_box_with_check:" } if spec.LockToDefault { alpha += " :closed_lock_with_key:" } case featuregate.Beta: if len(beta) > 0 { beta += ", " } beta += spec.Version.String() if spec.Default { beta += " :ballot_box_with_check:" } if spec.LockToDefault { beta += " :closed_lock_with_key:" } case featuregate.GA: if len(ga) > 0 { ga += ", " } ga += spec.Version.String() if spec.Default { ga += " :ballot_box_with_check:" } if spec.LockToDefault { ga += " :closed_lock_with_key:" } case featuregate.Deprecated: depVer := spec.Version.String() if spec.Default { depVer += " :ballot_box_with_check:" } else { depVer += " :red_circle:" } if spec.LockToDefault { depVer += " :closed_lock_with_key:" } if len(deprecated) > 0 { deprecated += ", " deprecated += depVer } else { deprecated = depVer } } } link_to_code := fmt.Sprintf("[code](https://cs.k8s.io/?q=%%5Cb%s%%5Cb&i=nope&files=&excludeFiles=CHANGELOG&repos=kubernetes/kubernetes)", feature) link_to_enhancements := fmt.Sprintf("[KEPs](https://cs.k8s.io/?q=%%5Cb%s%%5Cb&i=nope&files=&excludeFiles=CHANGELOG&repos=kubernetes/enhancements)", feature) sb.WriteString(fmt.Sprintf("| %s | %s | %s | %s | %s |%s %s\n", feature, alpha, beta, ga, deprecated, link_to_code, link_to_enhancements)) } sb.WriteString("\n\n Legend: :ballot_box_with_check: - enabled, :red_circle: - disabled\n") sb.WriteString("\t\t:closed_lock_with_key: - locked to default\n") fmt.Print(sb.String()) }