From b2de05fa0a5b98807e21c7115c9ebdbff016f2f3 Mon Sep 17 00:00:00 2001 From: Benjamin Elder Date: Wed, 22 Oct 2025 13:26:49 -0700 Subject: [PATCH 1/2] add GB rep to sigs.yaml --- generator/app.go | 25 +++++++++++++++++++++++-- sigs.yaml | 5 +++++ 2 files changed, 28 insertions(+), 2 deletions(-) diff --git a/generator/app.go b/generator/app.go index cdb8c439404..5820ab93fa3 100644 --- a/generator/app.go +++ b/generator/app.go @@ -351,6 +351,7 @@ type Context struct { WorkingGroups []Group UserGroups []Group Committees []Group + GBRep Person `yaml:"gb_rep,omitempty"` } func index(groups []Group, predicate func(Group) bool) int { @@ -443,7 +444,25 @@ func (c *Context) Validate() []error { // people with potentially differing info, versus referring to leads by // github handle within each SIG and then keeping this map alongside the SIGs // This could break external tooling parsing the file though. - people := make(map[string]Person) + people := map[string]Person{ + // This is a singleton role, but we will compare it to other entries + // for consistency in case of dual-role persons holding this role + c.GBRep.GitHub: c.GBRep, + } + // validate GBrep + // TODO: this logic could all be DRY-ed a bit + if c.GBRep.GitHub == "" { + errors = append(errors, fmt.Errorf("GBRep: github is empty but should be set")) + } + if c.GBRep.Company == "" { + errors = append(errors, fmt.Errorf("GBRep: company is empty but should be set")) + } + if c.GBRep.Email == "" { + errors = append(errors, fmt.Errorf("GBRep: email is empty but should be set")) + } + if c.GBRep.Name == "" { + errors = append(errors, fmt.Errorf("GBRep: name is empty but should be set")) + } reRawGitHubURL := regexp.MustCompile(regexRawGitHubURL) reGitHubURL := regexp.MustCompile(regexGitHubURL) for prefix, groups := range c.PrefixToGroupMap() { @@ -1101,7 +1120,9 @@ func prepForAnnualReportGeneration() error { } func generateCNCFMaintainersList(ctx *Context) error { - maintainers := map[string]Person{} + maintainers := map[string]Person{ + ctx.GBRep.GitHub: ctx.GBRep, + } serviceDesk := map[string]bool{} for _, group := range ctx.Committees { if group.Name == "Steering" { diff --git a/sigs.yaml b/sigs.yaml index 4bb4647dfc4..d683677d455 100644 --- a/sigs.yaml +++ b/sigs.yaml @@ -4199,3 +4199,8 @@ committees: description: Steering Committee policies, documentation, and funding requests owners: - https://raw.githubusercontent.com/kubernetes/steering/master/OWNERS +gb_rep: + github: cblecker + name: Christoph Blecker + company: Red Hat + email: cblecker@gmail.com From e82c88050e46208a4e78cd9bed25f54afa0ac4d9 Mon Sep 17 00:00:00 2001 From: Benjamin Elder Date: Wed, 22 Oct 2025 13:29:19 -0700 Subject: [PATCH 2/2] validate that github must be set for all persons --- generator/app.go | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/generator/app.go b/generator/app.go index 5820ab93fa3..ae100688087 100644 --- a/generator/app.go +++ b/generator/app.go @@ -477,6 +477,11 @@ func (c *Context) Validate() []error { } for prefix, persons := range group.Leadership.PrefixToPersonMap() { for _, person := range persons { + if person.GitHub == "" { + errors = append(errors, fmt.Errorf("%s: %s: github is empty but should be set", group.Dir, prefix)) + // without github key we can't check the rest, and this is going to fail validation anyhow + continue + } if val, ok := people[person.GitHub]; ok { // non-emeritus must have email and company set if prefix != "emeritus_lead" {