Skip to content

[HWORKS-3351] Split the Helm chart values reference into per-subchart pages (#683) - #685

Merged
maismail merged 1 commit into
logicalclocks:branch-5.1from
maismail:HWORKS-3351_5.1
Oct 7, 2026
Merged

maismail merged 1 commit into
logicalclocks:branch-5.1from
maismail:HWORKS-3351_5.1

Conversation

@maismail

@maismail maismail commented Oct 6, 2026

Copy link
Copy Markdown
Contributor

https://hopsworks.atlassian.net/browse/HWORKS-3351

Backport of #683 to branch-5.1: a cherry-pick of 8aa5361.

Summary

The 5.1 docs get the per-subchart Helm chart values reference from #683. It is an index plus one page per top-level values key, generated at build time from the newest 5.1 chart in Nexus and never committed. The PR check runs the generator with --strict and checks that the pages hold only their placeholders.

Adapted to this branch:

The chart side, which rebuilds these docs when a 5.1 patch is published, is logicalclocks/hopsworks-helm#2473.

Test plan

  • Against the chart the PR check uses (the newest 5.1 in the public Nexus repo, 5.1.0), gen-helm-values --strict passes with 25 pages, none empty. The Prometheus page keeps its own defaults, with a warning, until hopsworks-helm#2473 ships the tab fix in a 5.1 patch.
  • hopsworks-docs check (strict mkdocs build) passes with the generated pages. Locally the API section was built from hopsworks-api main; CI builds it from branch-5.1.
  • The placeholder check passes on the committed pages, and hopsworks-docs markdownlint reports 0 issues.
  • Every file in the cherry-pick equals main after [HWORKS-3351] Split the Helm chart values reference into per-subchart pages #683, except mkdocs.yml (this branch's own nav entries) and the dropped hopsfs-csi page.
  • No loadtests: this changes the docs build only.

🤖 Generated with Claude Code

https://claude.ai/code/session_01RXSgE27b6gGMaS9F7qheRL

… pages (logicalclocks#683)

* [HWORKS-3351] Split the Helm chart values reference into per-subchart pages
https://hopsworks.atlassian.net/browse/HWORKS-3351

The Helm chart values reference is one 2890-row table copied from the
chart README. Its long JSON defaults push the table far past the
content column, the charts Hopsworks installs from upstream are
documented only as those defaults, and the RonDB chart docs at
docs.hopsworks.ai/rondb-helm/ are not versioned. hopsworks-helm#2469
(HWORKS-3342) also stops embedding the subchart values in the root
README the reference is built from.

The docs build now generates one page per top-level values key into
committed stub pages listed in the nav, from the same chart package as
before. Rows come from the root README and every subchart README, keyed
from the root, and the first row of a key wins, so charts rendered with
and without helm-docs -u produce the same pages. On today's charts this
also drops the two kserve keys that -u lists twice. Each value is a
definition-list entry, because a key chip in a table cell never wraps
and keys run to 90 characters. Long defaults are collapsed YAML, and
each section carries its defaults as a values file. Subchart pages
state their deployment condition and link the upstream charts at the
version the chart pins. The RonDB page renders the values.schema.json
of the pinned RonDB chart instead of linking the unversioned page. The
index lists the values the cloud setup guides set. Every key has an
anchor, deprecated values are labelled, and long pages get a filter
box; without JavaScript every entry stays visible.

A values row that does not parse fails the build instead of being
dropped. The PR check runs the generator with --strict, which also
fails on a top-level key without a page, an upstream chart repository
without a docs link, a missing common value or a missing RonDB schema.
The deploy workflow only warns. The page URL is unchanged:
helm_chart_values.md and helm_chart_values/index.md serve the same
path.

Signed-off-by: Mahmoud Ismail <mahmoud@logicalclocks.com>
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>

* [HWORKS-3351] Split the Helm chart values reference into per-subchart pages
https://hopsworks.atlassian.net/browse/HWORKS-3351

Link the values reference from the home page by its heading ID instead
of its file path, as the content guide asks for links between pages.

Signed-off-by: Mahmoud Ismail <mahmoud@logicalclocks.com>
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>

* [HWORKS-3351] Split the Helm chart values reference into per-subchart pages
https://hopsworks.atlassian.net/browse/HWORKS-3351

Mute a deprecated value's description with the theme's light
foreground instead of 60% opacity, which put it at 4.12:1 in dark mode
and 4.30:1 in light mode, below WCAG AA. It now measures 4.90:1 and
4.59:1; the key, code chips and links keep their normal colours.

Signed-off-by: Mahmoud Ismail <mahmoud@logicalclocks.com>
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>

* [HWORKS-3351] Split the Helm chart values reference into per-subchart pages
https://hopsworks.atlassian.net/browse/HWORKS-3351

Wrap bare URLs in value descriptions as Markdown autolinks. The site
has no magiclink extension, so a bare URL rendered as text that could
not be clicked; 13 URLs in 10 descriptions (RonDB schema and chart
values) are affected. Code spans and existing links are left alone, and
trailing punctuation stays outside the link.

Signed-off-by: Mahmoud Ismail <mahmoud@logicalclocks.com>
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>

* [HWORKS-3351] Split the Helm chart values reference into per-subchart pages
https://hopsworks.atlassian.net/browse/HWORKS-3351

Render every parsed default as YAML, scalars included. Six long string
defaults were shown as raw text, and some read as lists or maps
(jupyter_shell_command shows as ["/bin/bash", ...]); quoted YAML keeps
them strings when copied into a values file. Prose defaults stay text.

In a local checkout, read the RonDB schema from the archive of the
pinned version instead of the first rondb-*.tgz, so a stale archive
left next to it cannot be rendered under the new version's link.

Signed-off-by: Mahmoud Ismail <mahmoud@logicalclocks.com>
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>

* [HWORKS-3351] Split the Helm chart values reference into per-subchart pages
https://hopsworks.atlassian.net/browse/HWORKS-3351

Fail the PR check when generated Helm values content is committed. The
pages are filled at build time, and a committed copy is published as-is
whenever a build leaves a page alone, for example a docs branch cut
before its chart is in Nexus, which would show another version's
values under that version's label.

Add hopsworks-docs reset-helm-values, which puts each page's placeholder
back between the generation markers and keeps everything else. The
check runs it and fails if it changed a committed page, printing the
two commands that fix the branch; the README uses it in place of a git
checkout after a local preview. The committed pages are written in the
reset's own format, so a reset of a clean branch changes nothing.

Signed-off-by: Mahmoud Ismail <mahmoud@logicalclocks.com>
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>

* [HWORKS-3351] Split the Helm chart values reference into per-subchart pages
https://hopsworks.atlassian.net/browse/HWORKS-3351

Show what Hopsworks deploys on the RonDB page. The RonDB chart values
were listed with that chart's own defaults, although Hopsworks
overrides 32 of them, for example maxNumMySQLServers (the RonDB chart
says 5, Hopsworks deploys 1) and the image registry. The overrides of
the wrapper subchart's values.yaml and then the root values.yaml are
now merged over the schema defaults the way Helm merges them: maps
merge, lists replace and null unsets. An overridden entry names the
RonDB chart's own default. For the 5.1.0 chart all 300 entries with a
default match the values Helm computes for the RonDB subchart.

An override of a key the RonDB schema does not declare, usually a value
RonDB renamed that the override then stops setting, is reported and
fails the PR check with --strict.

The RonDB entries also show the schema's minimum, maximum, pattern and
first example. The schema's required is left out: the defaults fill
those keys, so it would read as a value the user has to set.

Signed-off-by: Mahmoud Ismail <mahmoud@logicalclocks.com>
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>

* [HWORKS-3351] Split the Helm chart values reference into per-subchart pages
https://hopsworks.atlassian.net/browse/HWORKS-3351

Show what Hopsworks deploys on every subchart page, not only RonDB. A
subchart's rows carry that subchart's own defaults, while the root
values.yaml overrides some of them inside a collapsed map, so the page
showed the wrong value: hopsfs.datanode.count 1 where Hopsworks deploys
5, the admin JVM heap 2048 instead of 4096, the MinIO limits. The root
settings for each subchart are now merged over its own defaults with
Helm's rules, and the row shows the result; both layers are Hopsworks',
so no second default is named.

Checked with helm template on the 5.1.0 package, with a throwaway
template printing each enabled subchart's .Values (20 subcharts, 2207
defaults): the merge fixes the 9 rows that differed. The 32 left are
by design: the hopsworkslib slot and upstream chart subtrees, to which
Helm adds the library's and upstream chart's own values, the
command-line Velero flag of the check, and one int64 that Helm turns
into a float.

charts/prometheus/values.yaml has a tab character PyYAML rejects
(Helm's parser accepts it); that page keeps its own defaults and the
generator prints a warning.

Signed-off-by: Mahmoud Ismail <mahmoud@logicalclocks.com>
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>

* [HWORKS-3351] Split the Helm chart values reference into per-subchart pages
https://hopsworks.atlassian.net/browse/HWORKS-3351

Keep a parent's whole default in the "Defaults as YAML" blocks. A key
with a listed child was left out entirely, so its other keys vanished
from the block: 84 keys under 17 parents on main, among them the
whole Hopsworks Grafana configuration under grafana.grafana, the admin
probe timings, kafka.cluster.zookeeper.replicas and most of
spark.historyServer. Parents are now set first and listed children
over them; a scalar or null parent default gives way to a listed
child.

Checked on main: all 2879 listed defaults read back from their
subchart's block at their path, 25 of them object defaults (the
root chart's partial map for each subchart) that their children fill
in.

Signed-off-by: Mahmoud Ismail <mahmoud@logicalclocks.com>
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>

* [HWORKS-3351] Split the Helm chart values reference into per-subchart pages
https://hopsworks.atlassian.net/browse/HWORKS-3351

Say on each subchart page which upstream chart values it lists. The
"Upstream charts" box named and linked each chart, but only the index
said that a page lists just the values Hopsworks sets for it, so a
reader landing on grafana.md could take the grafana.grafana default
for every setting there is. The box now says so under the links, and
for RonDB, whose chart values the page renders in full, it links that
section instead. The entry of the key a chart is configured under
(grafana.grafana, trino.trinotest, rondb.rondb) carries the same link,
for a reader who arrives from its anchor. The index intro drops
"third-party", since RonDB is not, and says a default is what
Hopsworks deploys.

Generated notes no longer go through the bracket escaping meant for
helm-docs descriptions, which would break the in-page RonDB link; the
other notes are code spans.

"Defaults as YAML" is dumped with sorted keys again. Setting parents
before children made the insertion order follow key depth, so
grafana.grafana came before grafana.dependencies.

Signed-off-by: Mahmoud Ismail <mahmoud@logicalclocks.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* [HWORKS-3351] Split the Helm chart values reference into per-subchart pages
https://hopsworks.atlassian.net/browse/HWORKS-3351

Fail --strict when two entries on a page share an anchor. The RonDB
wrapper README documents rondb.rondb as one object row because of the
helm-docs comment on that key; a helm-docs comment on any key under
it would add a README row the rendered schema also lists, and the
page would carry the value twice under one id, with fragment links
landing on whichever comes first. Keys whose anchors differ only in
characters the anchor replaces collide the same way. The check names
the page, the anchor and the keys, and leaves the choice between the
two descriptions to whoever adds the comment.

No page has a shared anchor for main or 5.1.0; a 5.1.0 copy with one
README row under rondb.rondb fails the step.

Signed-off-by: Mahmoud Ismail <mahmoud@logicalclocks.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* [HWORKS-3351] Split the Helm chart values reference into per-subchart pages
https://hopsworks.atlassian.net/browse/HWORKS-3351

Fail --strict when a Hopsworks override sets a key to null while
values under it are listed. Helm removes such a key with everything
below it, but the merge keeps the null as a value, so the entries
under it would go on showing their chart defaults and "Defaults as
YAML" would rebuild the removed subtree. The check covers the root
chart's settings for each subchart and the RonDB overrides merged over
its schema, and names the key.

main and 5.1.0 have 19 null overrides each, all on leaves, and pass. A
5.1.0 copy with hopsfs.datanode and rondb.rondb.clusterSize set to
null fails with both keys named.

Signed-off-by: Mahmoud Ismail <mahmoud@logicalclocks.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

Backport to branch-5.1: the hopsfs-csi page and its nav entry are
left out, since no 5.1 chart has that subchart (5.1.0 in Nexus and
hopsworks-helm branch-5.1). scripts/helm_values.py is main's copy after
logicalclocks#683, which also brings the subchart README reading of logicalclocks#682 that this
branch did not have; the old single page is deleted as on main.

---------

Signed-off-by: Mahmoud Ismail <mahmoud@logicalclocks.com>
Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
(cherry picked from commit 8aa5361)
@maismail
maismail marked this pull request as ready for review October 6, 2026 14:13
@maismail
maismail requested a review from robzor92 October 6, 2026 14:13

@robzor92 robzor92 left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

LGTM: generator identical to #683; CI generated with --strict against the published chart and built cleanly.

@maismail
maismail merged commit c5080cd into logicalclocks:branch-5.1 Oct 7, 2026
1 check passed
@maismail
maismail deleted the HWORKS-3351_5.1 branch October 7, 2026 06:24
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants