From 8592797fd21b2b11a53fd8b182bd9bcec02f47f1 Mon Sep 17 00:00:00 2001 From: Kaitlin Seng Date: Sat, 11 Apr 2026 23:48:09 -0400 Subject: [PATCH] Render dedicated pages for launching-pad working groups When the site was converted from a Rocket server to a static generator, render_governance only iterated over top-level teams from index_data(), silently dropping pages for working groups under launching-pad (e.g. /governance/wgs/wg-secure-code). The page_data logic to allow these was preserved but never called. Adds launching_pad_subteam_pages() to produce the missing IndexTeam entries and chains them into the render loop. --- CONTRIBUTING.md | 1 + src/render.rs | 9 +++++++-- src/teams.rs | 22 ++++++++++++++++++++++ 3 files changed, 30 insertions(+), 2 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 4e159f9aa..ec42073d8 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -126,6 +126,7 @@ So stay vigilant and update it if you notice something missing. - https://www.rust-lang.org/governance/teams/crates-io - https://www.rust-lang.org/governance/teams - https://www.rust-lang.org/governance/wgs +- https://www.rust-lang.org/governance/wgs/wg-secure-code - https://www.rust-lang.org/es-ES - https://www.rust-lang.org/es-ES/contribute-compiler.html diff --git a/src/render.rs b/src/render.rs index 470f036af..adc259b31 100644 --- a/src/render.rs +++ b/src/render.rs @@ -194,8 +194,13 @@ pub fn render_governance( .render(dst_path) })?; - // Individual teams - for team in data.teams { + // Individual teams, plus legacy launching-pad subteams that have dedicated pages + // for backwards compatibility (e.g. /governance/wgs/wg-secure-code). + let all_team_pages = data + .teams + .into_iter() + .chain(render_ctx.teams.launching_pad_subteam_pages()); + for team in all_team_pages { println!("Rendering team page for {}", team.team.name); let data: PageData = render_ctx .teams diff --git a/src/teams.rs b/src/teams.rs index 0adebb405..1fc753cf8 100644 --- a/src/teams.rs +++ b/src/teams.rs @@ -229,6 +229,28 @@ impl RustTeamData { }) } + /// Returns teams that are subteams of launching-pad and have their own dedicated page. + /// These are legacy working groups that were moved under launching-pad but still need + /// their own pages to avoid breaking external links (e.g. /governance/wgs/wg-secure-code). + pub fn launching_pad_subteam_pages(&self) -> Vec { + self.teams + .iter() + .filter(|team| team.website_data.is_some()) + .filter(|team| team.subteam_of.as_deref() == Some("launching-pad")) + .filter(|team| team.kind == TeamKind::WorkingGroup) + .map(|team| { + let section = kind_to_str(team.kind); + let page_name = team.website_data.as_ref().unwrap().page.clone(); + IndexTeam { + url: format!("{section}/{page_name}"), + section, + page_name, + team: team.clone(), + } + }) + .collect() + } + pub fn all_teams(&self) -> AllTeams { let mut active_teams = self .teams