The GitHub Actions job "Benchmarks" on texera.git/main has succeeded.
Run started by GitHub user github-merge-queue[bot] (triggered by 
github-merge-queue[bot]).

Head commit for run:
cbdbd7a45340bc98d5366694c41585fbf7a938f6 / Tanishq Gandhi 
<[email protected]>
test(k8s): check every chart value a template reads is defined (#8474)

### What changes were proposed in this PR?

Helm renders a missing value as an empty string rather than failing, so
a typo in a template — or a template added without its values — installs
cleanly and then misbehaves at runtime with nothing pointing at the
cause.

`bin/k8s/tests/test_helm_values.sh` collects every value the chart
templates read and fails naming any that `values.yaml` does not define.
Files only: no helm, no cluster, about a second.

```
PASS: 151 template value reference(s) checked across 53 file(s); 4 exempt
```

147 of the 151 references must resolve. The 4 exempt ones are the
`*.service.nodePort` values, read only behind an `if eq .Values....type
"NodePort"` guard; each entry in `ALLOWED_ABSENT` has to keep earning
its place, so the check also fails if no template reads it any more or
if `values.yaml` has started defining it.

What it reads:

- `.Values.a.b` and `index .Values "a" "b"`, as key segments rather than
dotted strings, so a key containing a dot survives intact.
- `$p := .Values.a.b`, so `$p.key` is checked too — both persistence
templates alias a subtree this way.
- `with .Values.x` and `include "h" .Values.x` are rejected instead:
they turn the keys read inside into bare `.field`, which no single file
can resolve.
- Every file under `templates/` that `.helmignore` does not drop,
reading the chart's own file. An extension allowlist would skip
`_helpers.tpl`.
- Subchart values like any other. All 14 subchart-rooted references
resolve here today.

Nothing passes silently: a missing PyYAML fails rather than skips, and
so does scanning zero template files.

No workflow change — the `infra` job already runs every `test_*.sh`
under `bin/`. PyYAML goes in `amber/dev-requirements.txt` because
`values.yaml` has block scalars a hand-rolled parser would read as keys;
test-only, so it never reaches `LICENSE-binary`.

### Any related issues, documentation, discussions?

Closes #8473
Part of #8466

### How was this PR tested?

Run on the chart as it stands (output above, `exit=0`), then once per
failure mode with the break introduced deliberately, to confirm each
fails rather than just claiming to: a value renamed in `values.yaml`; a
reference renamed in `_helpers.tpl`; `minio.gateway.hostname` renamed,
subchart-rooted but chart-owned; a key reached only through `index
.Values "a" "b"`; a typo behind an alias; `with .Values.x`, `with
(.Values.x)` and `include "h" .Values.x`; an exemption no template
reads, and one `values.yaml` now defines; a pattern added to
`.helmignore`; `templates/` emptied; PyYAML unimportable.

Confirmed to pass, too: a key literally named `tls.secretName`, so the
dot does not split the path, plus `include "h" (dict ...)` and `range
$k, $v := .Values.m`.

### Was this PR authored or co-authored using generative AI tooling?

Generated-by: Claude Code (Claude Opus 5)

Report URL: https://github.com/apache/texera/actions/runs/34522619725

With regards,
GitHub Actions via GitBox

Reply via email to