Skip to content

Commit abc5eb7

Browse files
committed
fix: resolve KEP READMEs via GitHub tree lookup; dedup NCO events by region
1 parent 03d5fa5 commit abc5eb7

2 files changed

Lines changed: 74 additions & 20 deletions

File tree

content/en/resources/keps/_content.gotmpl

Lines changed: 38 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
{{- $kepDataSourceUrl := "https://storage.googleapis.com/k8s-keps/keps.json" -}}
22
{{- $rawBaseUrl := "https://raw.githubusercontent.com/kubernetes/enhancements/master/keps/" -}}
3+
{{- $repoBaseUrl := "https://raw.githubusercontent.com/kubernetes/enhancements/master/" -}}
34
{{- $kepData := slice -}}
45

56
{{/* Global Options for GetRemote */}}
@@ -39,6 +40,30 @@
3940
{{- end -}}
4041
{{- end -}}
4142

43+
{{- /* Build directory lookup from GitHub tree to handle KEPs in subdirectories */ -}}
44+
{{- $kepDirMap := dict -}}
45+
{{- $treeApiUrl := "https://api.github.com/repos/kubernetes/enhancements/git/trees/master?recursive=1" -}}
46+
{{- $treeOpts := merge $globalOpts (dict "key" "enhancements-keps-tree" "method" "get") -}}
47+
{{- with try (resources.GetRemote $treeApiUrl $treeOpts) -}}
48+
{{- with .Err -}}
49+
{{- warnf "Cannot fetch GitHub tree for KEP directory lookup: %s" . -}}
50+
{{- else with .Value -}}
51+
{{- with try (.Content | transform.Unmarshal) -}}
52+
{{- with .Err -}}
53+
{{- warnf "Cannot parse GitHub tree: %s" . -}}
54+
{{- else with .Value -}}
55+
{{- range $entry := .tree -}}
56+
{{- if and (eq $entry.type "blob") (strings.HasSuffix $entry.path "README.md") (strings.HasPrefix $entry.path "keps/") -}}
57+
{{- $dirPath := path.Dir $entry.path -}}
58+
{{- $kepName := path.Base $dirPath -}}
59+
{{- $kepDirMap = merge $kepDirMap (dict $kepName $dirPath) -}}
60+
{{- end -}}
61+
{{- end -}}
62+
{{- end -}}
63+
{{- end -}}
64+
{{- end -}}
65+
{{- end -}}
66+
4267
{{/* Define stages that are "beyond provisional" */}}
4368
{{- $validStages := slice "alpha" "beta" "stable" "deprecated" -}}
4469
{{- $validStatuses := slice "implementable" "implemented" -}}
@@ -74,8 +99,18 @@
7499
"toc_hide" true
75100
-}}
76101

102+
{{/* Resolve actual KEP directory from GitHub tree (handles subdirectory nesting) */}}
103+
{{- $actualKepDir := index $kepDirMap $kep.name -}}
104+
{{- $kepPrefix := printf "keps/" -}}
105+
{{- $kepRelDir := "" -}}
106+
{{- if $actualKepDir -}}
107+
{{- $kepRelDir = strings.TrimPrefix $kepPrefix $actualKepDir -}}
108+
{{- else -}}
109+
{{- $kepRelDir = printf "%s/%s" $kep.owningSig $kep.name -}}
110+
{{- end -}}
111+
77112
{{/* Fetch README Content */}}
78-
{{- $readmeUrl := printf "%s%s/%s/README.md" $rawBaseUrl $kep.owningSig $kep.name -}}
113+
{{- $readmeUrl := printf "%s%s/README.md" $rawBaseUrl $kepRelDir -}}
79114
{{- $readmeContent := "" -}}
80115
{{- $readmeOpts := merge $globalOpts (dict "key" (printf "kep-readme-%s" $kep.kepNumber)) -}}
81116

@@ -90,7 +125,7 @@
90125
{{- end -}}
91126

92127
{{- if $needsFallback -}}
93-
{{- $readmeUrlUpper := printf "%s%s/%s/README.MD" $rawBaseUrl $kep.owningSig $kep.name -}}
128+
{{- $readmeUrlUpper := printf "%s%s/README.MD" $rawBaseUrl $kepRelDir -}}
94129
{{- $readmeOptsUpper := merge $globalOpts (dict "key" (printf "kep-readme-%s-upper" $kep.kepNumber)) -}}
95130
{{- $resourceFetchAttempt = try (resources.GetRemote $readmeUrlUpper $readmeOptsUpper) -}}
96131
{{- end -}}
@@ -106,8 +141,7 @@
106141
{{- $readmeContent = replace $readmeContent "((http" "(http" -}}
107142

108143
{{- /* Fix relative image and link paths to point to GitHub */ -}}
109-
{{- $repoBaseUrl := "https://raw.githubusercontent.com/kubernetes/enhancements/master/" -}}
110-
{{- $kepDirUrl := printf "%skeps/%s/%s/" $repoBaseUrl $kep.owningSig $kep.name -}}
144+
{{- $kepDirUrl := printf "%s%s/" $rawBaseUrl $kepRelDir -}}
111145

112146
{{- /* 1. Fix absolute-looking paths (starting with /) */ -}}
113147
{{- $readmeContent = replaceRE `!\[(.*?)\]\(/(.*?)\)` (printf "![${1}](%s${2})" $repoBaseUrl) $readmeContent -}}

layouts/shortcodes/nco-next-session.html

Lines changed: 36 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -543,6 +543,13 @@ <h3 class="fw-bold text-dark h3 mt-1 mb-0" id="nco-fallback-date-display">—</h
543543
var nextSessions = events.filter(function (e) {
544544
return Math.abs(new Date(e.start.dateTime || e.start.date) - firstDate) < 86400000;
545545
});
546+
var seen = {};
547+
nextSessions = nextSessions.filter(function (e) {
548+
var key = e.start.dateTime || e.start.date;
549+
if (seen[key]) return false;
550+
seen[key] = true;
551+
return true;
552+
});
546553
if (!nextSessions.length) { runFallback(); return; }
547554

548555
dateEl.textContent = firstDate.toLocaleDateString(undefined, {
@@ -559,16 +566,9 @@ <h3 class="fw-bold text-dark h3 mt-1 mb-0" id="nco-fallback-date-display">—</h
559566
return '';
560567
}
561568

562-
gridEl.innerHTML = '';
563-
var sessionCount = { emea: 0, amer: 0 };
564-
565-
nextSessions.slice(0, 2).forEach(function (ev) {
566-
var startHour = new Date(ev.start.dateTime || ev.start.date).getUTCHours();
567-
var isEMEA = startHour < 12;
568-
var label = isEMEA ? emeaLabel : amerLabel;
569-
var times = isEMEA ? emeaTimes : amerTimes;
570-
sessionCount[isEMEA ? 'emea' : 'amer']++;
571-
569+
function renderEventRow(ev, region) {
570+
var isEMEA = region === 'emea';
571+
var label = isEMEA ? emeaLabel : amerLabel;
572572
var joinLink = extractJoinLink(ev);
573573
var calEvLink = ev.htmlLink || '';
574574

@@ -649,11 +649,11 @@ <h3 class="fw-bold text-dark h3 mt-1 mb-0" id="nco-fallback-date-display">—</h
649649
}
650650
if (hasActions) row.appendChild(actionsWrap);
651651

652-
gridEl.appendChild(row);
653-
});
652+
return row;
653+
}
654654

655-
if (sessionCount.emea === 0 || sessionCount.amer === 0) {
656-
var missing = sessionCount.emea === 0 ? 'EMEA/APAC' : 'AMER';
655+
function renderMissingRow(region) {
656+
var label = region === 'emea' ? 'EMEA/APAC' : 'AMER';
657657
var row = document.createElement('div');
658658
row.className = 'nco-session-row py-3 border-bottom d-flex align-items-center justify-content-between gap-3';
659659

@@ -672,7 +672,7 @@ <h3 class="fw-bold text-dark h3 mt-1 mb-0" id="nco-fallback-date-display">—</h
672672
var txtWrap = document.createElement('div');
673673
var missingDiv = document.createElement('div');
674674
missingDiv.className = 'text-muted small';
675-
missingDiv.textContent = missing + ' — details pending';
675+
missingDiv.textContent = label + ' — details pending';
676676
txtWrap.appendChild(missingDiv);
677677
leftWrap.appendChild(txtWrap);
678678
row.appendChild(leftWrap);
@@ -692,9 +692,29 @@ <h3 class="fw-bold text-dark h3 mt-1 mb-0" id="nco-fallback-date-display">—</h
692692
rightWrap.appendChild(calCheckBtn);
693693
row.appendChild(rightWrap);
694694

695-
gridEl.appendChild(row);
695+
return row;
696696
}
697697

698+
gridEl.innerHTML = '';
699+
var emeaEvent = null;
700+
var amerEvent = null;
701+
for (var i = 0; i < nextSessions.length; i++) {
702+
var ev = nextSessions[i];
703+
var startHour = new Date(ev.start.dateTime || ev.start.date).getUTCHours();
704+
if (startHour < 12 && !emeaEvent) {
705+
emeaEvent = ev;
706+
} else if (startHour >= 12 && !amerEvent) {
707+
amerEvent = ev;
708+
}
709+
if (emeaEvent && amerEvent) break;
710+
}
711+
712+
if (emeaEvent) gridEl.appendChild(renderEventRow(emeaEvent, 'emea'));
713+
if (!emeaEvent) gridEl.appendChild(renderMissingRow('emea'));
714+
715+
if (amerEvent) gridEl.appendChild(renderEventRow(amerEvent, 'amer'));
716+
if (!amerEvent) gridEl.appendChild(renderMissingRow('amer'));
717+
698718
show(cardEl);
699719
})
700720
.catch(function () { runFallback(); });

0 commit comments

Comments
 (0)