Skip to content

Render a Page About Each KEP#618

Open
bupd wants to merge 4 commits intokubernetes:masterfrom
bupd:kep-pages
Open

Render a Page About Each KEP#618
bupd wants to merge 4 commits intokubernetes:masterfrom
bupd:kep-pages

Conversation

@bupd
Copy link
Contributor

@bupd bupd commented Jan 3, 2026

Summary

Closes #611

This PR adds individual pages for each KEP (Kubernetes Enhancement Proposal) that has progressed beyond the provisional stage. Pages are dynamically generated at build time using Hugo content adapters.

Screenshot_2026-01-03_18-21-22

Changes

  • Add Hugo content adapter to generate KEP pages from existing keps.json data
  • Add layout templates for individual KEP pages (layouts/keps/)
  • Update KEP table shortcode to link titles to internal pages
  • Add stage badge styles (alpha/beta/stable/deprecated)

KEP Page Contents

Each generated page displays:

  • Title and stage badge
  • Status
  • Links to enhancement issue and KEP documentation
  • Owning SIG with link to community repo
  • Participating SIGs (if any)
  • Milestones (alpha/beta/stable versions)
  • Feature gates with components
  • Authors, approvers, and reviewers
  • Timeline (created/last updated dates)
  • Related KEPs

Implementation Notes

  • Only KEPs beyond provisional stage are rendered (543 pages)
  • Provisional KEPs still link to GitHub
  • Manual markdown overrides supported by creating content/en/resources/keps/{kepNumber}.md
  • Uses Hugo content adapter for low-overhead maintenance

bupd added 3 commits January 3, 2026 18:18
Signed-off-by: bupd <bupdprasanth@gmail.com>
Signed-off-by: bupd <bupdprasanth@gmail.com>
Signed-off-by: bupd <bupdprasanth@gmail.com>
@k8s-ci-robot
Copy link
Contributor

[APPROVALNOTIFIER] This PR is NOT APPROVED

This pull-request has been approved by: bupd
Once this PR has been reviewed and has the lgtm label, please assign natalisucks for approval. For more information see the Code Review Process.

The full list of commands accepted by this bot can be found here.

Details Needs approval from an approver in each of these files:

Approvers can indicate their approval by writing /approve in a comment
Approvers can cancel approval by writing /approve cancel in a comment

@k8s-ci-robot k8s-ci-robot added the cncf-cla: yes Indicates the PR's author has signed the CNCF CLA. label Jan 3, 2026
@k8s-ci-robot k8s-ci-robot added the size/L Denotes a PR that changes 100-499 lines, ignoring generated files. label Jan 3, 2026
@TineoC
Copy link
Contributor

TineoC commented Jan 3, 2026

Hey @bupd, thanks for starting to work on this. When I was checking your preview, I instinctively clicked the KEP Number instead of the KEP Title. Maybe we should consider the best solution for the links in the table as well.
image

@TineoC
Copy link
Contributor

TineoC commented Jan 3, 2026

If all the details are covered in the new sub-page, maybe considering adding information that's not hyperlinked (such as the k8s release related to that KEP, for example).

@bupd
Copy link
Contributor Author

bupd commented Jan 3, 2026

If all the details are covered in the new sub-page, maybe considering adding information that's not hyperlinked (such as the k8s release related to that KEP, for example).

Where I can find that info if it's already there somewhere we can do so.

@bupd
Copy link
Contributor Author

bupd commented Jan 3, 2026

Hey @bupd, thanks for starting to work on this. When I was checking your preview, I instinctively clicked the KEP Number instead of the KEP Title. Maybe we should consider the best solution for the links in the table as well.
image

Also I didn't change the table much just updated the title to lead to the sub page other things remain as before.

Thanks 👍

@TineoC
Copy link
Contributor

TineoC commented Jan 3, 2026

I need to think about this more. I'll bring it up at the next meeting. There are no blockers on your side; I would appreciate it if you could also add the link to the subpage by clicking the KEP #.

Signed-off-by: bupd <bupdprasanth@gmail.com>
Copy link
Contributor

@TineoC TineoC left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

<ul class="list-unstyled">
  {{ range $stage, $milestone := $data.milestone }}
    {{ if $milestone }}
    {{- $version := strings.TrimPrefix "v" $milestone -}}
    <li>
      {{ $stage }}:
      <a href="https://github.com/kubernetes/sig-release/tree/master/releases/release-{{ $version }}" class="kep-milestone" target="_blank" rel="noopener noreferrer">
        {{ $milestone }}
      </a>
    </li>
    {{ end }}
  {{ end }}
</ul>

@TineoC
Copy link
Contributor

TineoC commented Jan 3, 2026

If all the details are covered in the new sub-page, maybe considering adding information that's not hyperlinked (such as the k8s release related to that KEP, for example).

Where I can find that info if it's already there somewhere we can do so.

This could link the kep with the k8s release. Do you think https://github.com/kubernetes/sig-release/tree/master/releases/release-X.Y.Z is a good link to use?

<ul class="list-unstyled">
  {{ range $stage, $milestone := $data.milestone }}
    {{ if $milestone }}
    {{- $version := strings.TrimPrefix "v" $milestone -}}
    <li>
      {{ $stage }}:
      <a href="https://github.com/kubernetes/sig-release/tree/master/releases/release-{{ $version }}" class="kep-milestone" target="_blank" rel="noopener noreferrer">
        {{ $milestone }}
      </a>
    </li>
    {{ end }}
  {{ end }}
</ul>

@lmktfy
Copy link
Member

lmktfy commented Jan 18, 2026

I agree with #618 (comment)

Let's try to merge something that adds value without the complexity of making it perfect.

@lmktfy
Copy link
Member

lmktfy commented Jan 18, 2026

/kind feature
/retitle Render a Page About Each KEP

@k8s-ci-robot k8s-ci-robot changed the title Feat: Render a Page About Each KEP Render a Page About Each KEP Jan 18, 2026
@k8s-ci-robot k8s-ci-robot added the kind/feature Categorizes issue or PR as related to a new feature. label Jan 18, 2026
Copy link
Member

@lmktfy lmktfy left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

/lgtm

How would you like to proceed @bupd? I think we can merge this as-is; if you'd like to polish it more, there are suggestions.

I suggest you only pick the ones that you think will really help.

Comment on lines +5 to +10
{{/* Stage badge */}}
{{ with .Params.stage }}
<div class="kep-stage-badge kep-stage-{{ . }}">
<span class="badge">{{ . | upper }}</span>
</div>
{{ end }}
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nice approach.

<h2>Links</h2>
<ul>
<li>
<a href="https://features.k8s.io/{{ .Params.kepNumber }}" target="_blank" rel="noopener">
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

(nit)

Suggested change
<a href="https://features.k8s.io/{{ .Params.kepNumber }}" target="_blank" rel="noopener">
<a href="https://kep.k8s.io/{{ .Params.kepNumber }}" target="_blank" rel="noopener">

<div class="kep-sigs mt-4">
<h2>SIGs</h2>
<p>
<strong>Owning SIG:</strong>
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
<strong>Owning SIG:</strong>
<p class="kep-sigs-owner">Owning SIG:</p>

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

(and then add an associated stylesheet entry)

{{ end }}

{{/* Feature gates */}}
{{ with .Params.featureGates }}
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

<div class="kep-feature-gates mt-4">
<h2>Feature Gates</h2>
<table class="table table-sm">
<thead>
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Extra credit: add a <caption>.

Comment on lines +113 to +121
{{ with .Params.approvers }}
<p>
<strong>Approvers:</strong>
{{ range $i, $approver := . }}
{{- if $i }}, {{ end -}}
<a href="https://github.com/{{ trim $approver "@" }}">{{ $approver }}</a>
{{ end }}
</p>
{{ end }}
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

nit: list these after reviewers

<ul>
{{ range . }}
<li>
<a href="https://github.com/kubernetes/enhancements/tree/master{{ . }}">{{ . }}</a>
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Maybe we could link to the generated page for the related KEP?

{{ range $i, $sig := . }}
{{- if $i }}, {{ end -}}
<a href="https://github.com/kubernetes/community/tree/master/{{ $sig }}">
{{ strings.TrimPrefix "sig-" $sig | humanize | title }}
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

(nit)

Suggested change
{{ strings.TrimPrefix "sig-" $sig | humanize | title }}
SIG {{ strings.TrimPrefix "sig-" $sig | humanize | title }}

Comment on lines +62 to +65
{{ with .alpha }}<tr><td>Alpha</td><td>{{ . }}</td></tr>{{ end }}
{{ with .beta }}<tr><td>Beta</td><td>{{ . }}</td></tr>{{ end }}
{{ with .stable }}<tr><td>Stable</td><td>{{ . }}</td></tr>{{ end }}
{{ with .deprecated }}<tr><td>Deprecated</td><td>{{ . }}</td></tr>{{ end }}
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ideally we use special marking to show that future milestones are anticipated, rather than commitments.

{{/* Feature gates */}}
{{ with .Params.featureGates }}
<div class="kep-feature-gates mt-4">
<h2>Feature Gates</h2>
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

(nit)

Suggested change
<h2>Feature Gates</h2>
<h2>Feature Gates</h2>
<p>This enhancement was designed with opt-in or opt-out at the feature level;
there are <a href="https://kubernetes.io/docs/reference/command-line-tools-reference/feature-gates/">feature gates</a> associated with it.</p>

@k8s-ci-robot k8s-ci-robot added the lgtm "Looks good to me", indicates that a PR is ready to be merged. label Jan 19, 2026

{{/* External links section */}}
<div class="kep-links mt-4">
<h2>Links</h2>
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Could we consider making these headings linkable by adding anchor links to them?

Comment on lines +149 to +157
{{ with .Params.seeAlso }}
<div class="kep-see-also mt-4">
<h2>Related KEPs</h2>
<ul>
{{ range . }}
<li>
<a href="https://github.com/kubernetes/enhancements/tree/master{{ . }}">{{ . }}</a>
</li>
{{ end }}
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This block generation logic may need a small tweak, because not all links in the KEP JSON seeAlso attribute point to the k/enhancements repo. Some refer to external sites or other repositories, and the current logic always renders them to the k/enhancements path, which results in 404 links. I have included a few examples below (Refer the Related KEPs section)

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Mmm, yes, let's avoid making an assumption about what this field is set to.

@bupd
Copy link
Contributor Author

bupd commented Jan 26, 2026

Thanks for the review @lmktfy , @dipesh-rawat , @TineoC - will ping you again once i made the requested changes,

Thanks

@k8s-ci-robot k8s-ci-robot added the needs-rebase Indicates a PR cannot be merged because it has merge conflicts with HEAD. label Feb 7, 2026
@k8s-ci-robot
Copy link
Contributor

PR needs rebase.

Details

Instructions for interacting with me using PR comments are available here. If you have questions or suggestions related to my behavior, please file an issue against the kubernetes-sigs/prow repository.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

cncf-cla: yes Indicates the PR's author has signed the CNCF CLA. kind/feature Categorizes issue or PR as related to a new feature. lgtm "Looks good to me", indicates that a PR is ready to be merged. needs-rebase Indicates a PR cannot be merged because it has merge conflicts with HEAD. size/L Denotes a PR that changes 100-499 lines, ignoring generated files.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Render a page about each KEP

5 participants