diff --git a/generator/annual-report/sig_report.tmpl b/generator/annual-report/sig_report.tmpl index 830c119ec..af4fc1428 100644 --- a/generator/annual-report/sig_report.tmpl +++ b/generator/annual-report/sig_report.tmpl @@ -14,15 +14,37 @@ - - -{{$releases := getReleases}} -{{$owingsig := .Dir}} +{{$releases := getReleases -}} +{{$owningSIG := .Dir -}} +{{$stagedKeps := filterKEPs $owningSIG $releases -}} +{{$alphaKeps := index $stagedKeps "alpha" -}} +{{$betaKeps := index $stagedKeps "beta" -}} +{{$stableKeps := index $stagedKeps "stable" -}} + + 3. KEP work in {{lastYear}} ({{$releases.LatestMinusTwo}}, {{$releases.LatestMinusOne}}, {{$releases.Latest}}): -{{- range $stage, $keps := filterKEPs $owingsig $releases}} - - {{ $stage }}: - {{- range $keps}} - - [{{.Number}} - {{.Title}}](https://github.com/kubernetes/enhancements/tree/master/keps/{{.OwningSIG}}/{{.Name}}) - {{.LatestMilestone -}} +{{if ne (len $alphaKeps) 0}} + - Alpha + {{- range $alphaKeps}} + - [{{.Number}} - {{.Title}}](https://github.com/kubernetes/enhancements/tree/master/keps/{{.OwningSIG}}/{{.Name}}) - {{.Milestone.Alpha -}} {{ end}} -{{- end}} +{{ end}} +{{if ne (len $betaKeps) 0}} + - Beta + {{- range $betaKeps}} + - [{{.Number}} - {{.Title}}](https://github.com/kubernetes/enhancements/tree/master/keps/{{.OwningSIG}}/{{.Name}}) - {{.Milestone.Beta -}} + {{ end}} +{{ end}} +{{if ne (len $stableKeps) 0}} + - Stable + {{- range $stableKeps}} + - [{{.Number}} - {{.Title}}](https://github.com/kubernetes/enhancements/tree/master/keps/{{.OwningSIG}}/{{.Name}}) - {{.Milestone.Stable -}} + {{ end}} +{{ end}} ## Project health @@ -73,7 +95,7 @@ Include any other ways you measure group membership ## [Subprojects](https://git.k8s.io/community/{{.Dir}}#subprojects) {{- define "subprojects" -}} -{{- $owingsig := .Dir -}} +{{- $owningSIG := .Dir -}} {{- if .New}} **New in {{lastYear}}:** diff --git a/generator/app.go b/generator/app.go index 314cac3ca..afbcdde6d 100644 --- a/generator/app.go +++ b/generator/app.go @@ -161,20 +161,42 @@ func fetchKEPs() error { return nil } -func filterKEPs(owningSig string, releases Releases) (map[api.Stage][]api.Proposal, error) { - kepsByStage := make(map[api.Stage][]api.Proposal) - for _, kep := range cachedKEPs { - if kep.OwningSIG == owningSig { - for _, stage := range api.ValidStages { - if kep.Stage == stage && (strings.HasSuffix(kep.LatestMilestone, releases.Latest) || - strings.HasSuffix(kep.LatestMilestone, releases.LatestMinusOne) || - strings.HasSuffix(kep.LatestMilestone, releases.LatestMinusTwo)) { - kepsByStage[stage] = append(kepsByStage[stage], kep) - } - } - } +func stageIfKEPsIsWorkedInReleases(kepMilestone api.Milestone, releases Releases) (api.Stage, bool) { + if strings.HasSuffix(kepMilestone.Stable, releases.Latest) || strings.HasSuffix(kepMilestone.Stable, releases.LatestMinusOne) || strings.HasSuffix(kepMilestone.Stable, releases.LatestMinusTwo) { + return api.StableStage, true } + if strings.HasSuffix(kepMilestone.Beta, releases.Latest) || strings.HasSuffix(kepMilestone.Beta, releases.LatestMinusOne) || strings.HasSuffix(kepMilestone.Beta, releases.LatestMinusTwo) { + return api.BetaStage, true + } + + if strings.HasSuffix(kepMilestone.Alpha, releases.Latest) || strings.HasSuffix(kepMilestone.Alpha, releases.LatestMinusOne) || strings.HasSuffix(kepMilestone.Alpha, releases.LatestMinusTwo) { + return api.AlphaStage, true + } + + return "", false +} + +func filterKEPs(owningSig string, releases Releases) (map[string][]api.Proposal, error) { + // TODO(palnabarun): Hack to allow unprefixed version strings in KEPs. + // Once all KEPs are updated to use the prefixed version strings, this can be removed. + // See: https://github.com/kubernetes/community/issues/7213#issuecomment-1484964640 + unPrefixedReleases := Releases{ + Latest: strings.TrimPrefix(releases.Latest, "v"), + LatestMinusOne: strings.TrimPrefix(releases.LatestMinusOne, "v"), + LatestMinusTwo: strings.TrimPrefix(releases.LatestMinusTwo, "v"), + } + + kepsByStage := make(map[string][]api.Proposal) + for _, kep := range cachedKEPs { + if kep.OwningSIG == owningSig { + stage, ok := stageIfKEPsIsWorkedInReleases(kep.Milestone, unPrefixedReleases) + if !ok { + continue + } + kepsByStage[string(stage)] = append(kepsByStage[string(stage)], kep) + } + } return kepsByStage, nil }