run-quantity-render-test.sh: Chart-Pfad statt nur Chart-Name, damit Kopien außerhalb des Repos geprüft werden können #19

Open
opened 2026-09-16 16:03:32 +02:00 by jlab-bot · 1 comment
Member

Migriert aus jk-cluster/helm-charts#241 — urspruenglich angelegt von jk-cluster-bot am 2026-09-04.

Verweise der Form #123 im folgenden Text beziehen sich auf die GitHub-Nummerierung, nicht auf die Nummern in diesem Repo. Geschlossene Issues wurden nicht mitgezogen und sind weiterhin nur auf GitHub lesbar.


ci/run-quantity-render-test.sh soll einen Chart-Pfad annehmen können, nicht nur einen Chart-Namen unterhalb des Repo-Wurzelverzeichnisses. Dazu ein optionaler Fixture-Pfad, der auf ci/<name>/ zurückfällt. Ohne Argumente bleibt alles wie heute.

Warum

Der Test läuft über alle Charts bei jedem PR, und die README nennt den Grund: der Resources-Helfer wird in jedes Chart kopiert statt über eine Library geteilt. Die Regression kommt also per Kopie an — bei einem neuen Chart, das von einem älteren abstammt, und in dessen PR steht der kopierte Fehler in keinem Diff, den jemand liest.

Genau dieser Fall ist jetzt eingetreten, eine Repo-Grenze weiter draußen: suer/suer-configurator hat eine Kopie unseres _helpers.tpl übernommen. Der Test, der sie absichern würde, kann sie nicht sehen, weil das Skript seinen Chart über ROOT/$CHART auflöst.

Der dortige Ersatz ist ein Grep auf exponentielle Quantities. Der fängt die laute Hälfte des #157-Fehlers und nicht die stille: das Produkt eines gebrochenen limitFactor wird erst nach der Suffix-Prüfung formatiert, rendert also durch und fällt erst dem API-Server auf. Ein Muster im Text findet das nicht, weil an dieser Stelle noch kein Text existiert — dafür braucht es die konkreten Werte aus dem values.schema.json, und genau die fährt unser Test.

Was ausdrücklich NICHT geöffnet wird

ci/run-trivy-config.sh bleibt repo-intern. Der Unterschied ist inhaltlich, nicht Aufwand: Der Quantity-Test kodiert eine allgemeingültige Falle aus Helm und Go — fromYaml liefert float64, printf "%v" kippt ab etwa 1e6 in Exponentialschreibweise —, die jeden trifft, der diesen Helfer kopiert. Der Trivy-Lauf kodiert unsere Policy: unsere trivyignore, unsere KSV-Ausnahmen. Eine Ausnahme, die hier begründet ist, ist es in einem fremden Repo womöglich nicht, und dort würde es niemandem auffallen. Sicherheits-Ausnahmen sollen nicht durch Werkzeug-Wiederverwendung wandern.

Der Preis, und er gehört in den Skriptkopf

Sobald das Skript aus einem fremden Repo aufgerufen wird, hört es auf, ein internes Werkzeug zu sein, und wird eine Schnittstelle. Wer danach sein Aufrufmuster ändert, bricht einen Aufrufer, der in keiner unserer Pipelines steht — es fällt also nur dort auf, und dort weiß niemand warum. Das gehört als Vermerk in den Skriptkopf, nicht nur in dieses Issue.

Umsetzung

Die Unterscheidung Pfad/Name muss mechanisch sein, nicht heuristisch: ein Argument, das ein Verzeichnis mit Chart.yaml ist, ist ein Pfad; alles andere ein Name unterhalb des Repo-Wurzelverzeichnisses. Zwei Aufrufkonventionen sind genau die Form, der dieses Repo misstraut — siehe #231, wo zwei Parser für dieselbe Datei zusammengelegt wurden, weil zwei Gelegenheiten zur Abweichung eine zu viel sind. Wenn die Regel nicht in einem Satz eindeutig ist, ist sie falsch geschnitten.

Zu belegen

  1. Ohne Argumente unverändert. Der Lauf über alle Charts muss dieselbe Ausgabe liefern wie heute — als Vergleich zeigen, nicht behaupten.
  2. Ein Chart außerhalb des Repo-Wurzelverzeichnisses, mit eigenem Fixture-Verzeichnis, wird geprüft.
  3. Der stille Fall wird in beiden Modi gefangen. Das ist der ganze Wert des Tests; ein externer Modus, der nur den lauten Fall fängt, wäre der Grep, den er ersetzen soll.

Kein Chart betroffen, also keine Chart-Version und kein Publish. Damit prüft die Chart-Matrix diesen PR auch nicht — der Beleg muss aus dem Lauf des PRs selbst kommen.

> Migriert aus [`jk-cluster/helm-charts#241`](https://github.com/jk-cluster/helm-charts/issues/241) — urspruenglich angelegt von **jk-cluster-bot** am 2026-09-04. > > Verweise der Form `#123` im folgenden Text beziehen sich auf die **GitHub-Nummerierung**, nicht auf die Nummern in diesem Repo. Geschlossene Issues wurden nicht mitgezogen und sind weiterhin nur auf GitHub lesbar. --- `ci/run-quantity-render-test.sh` soll einen Chart-**Pfad** annehmen können, nicht nur einen Chart-**Namen** unterhalb des Repo-Wurzelverzeichnisses. Dazu ein optionaler Fixture-Pfad, der auf `ci/<name>/` zurückfällt. **Ohne Argumente bleibt alles wie heute.** ## Warum Der Test läuft über **alle** Charts bei **jedem** PR, und die README nennt den Grund: der Resources-Helfer wird in jedes Chart **kopiert** statt über eine Library geteilt. Die Regression kommt also per Kopie an — bei einem neuen Chart, das von einem älteren abstammt, und in dessen PR steht der kopierte Fehler in keinem Diff, den jemand liest. Genau dieser Fall ist jetzt eingetreten, eine Repo-Grenze weiter draußen: `suer/suer-configurator` hat eine Kopie unseres `_helpers.tpl` übernommen. Der Test, der sie absichern würde, kann sie nicht sehen, weil das Skript seinen Chart über `ROOT/$CHART` auflöst. Der dortige Ersatz ist ein Grep auf exponentielle Quantities. Der fängt die **laute** Hälfte des #157-Fehlers und **nicht die stille**: das Produkt eines gebrochenen `limitFactor` wird erst *nach* der Suffix-Prüfung formatiert, rendert also durch und fällt erst dem API-Server auf. Ein Muster im Text findet das nicht, weil an dieser Stelle noch kein Text existiert — dafür braucht es die konkreten Werte aus dem `values.schema.json`, und genau die fährt unser Test. ## Was ausdrücklich NICHT geöffnet wird **`ci/run-trivy-config.sh` bleibt repo-intern.** Der Unterschied ist inhaltlich, nicht Aufwand: Der Quantity-Test kodiert eine allgemeingültige Falle aus Helm und Go — `fromYaml` liefert float64, `printf "%v"` kippt ab etwa 1e6 in Exponentialschreibweise —, die jeden trifft, der diesen Helfer kopiert. Der Trivy-Lauf kodiert **unsere Policy**: unsere `trivyignore`, unsere KSV-Ausnahmen. Eine Ausnahme, die hier begründet ist, ist es in einem fremden Repo womöglich nicht, und dort würde es niemandem auffallen. Sicherheits-Ausnahmen sollen nicht durch Werkzeug-Wiederverwendung wandern. ## Der Preis, und er gehört in den Skriptkopf Sobald das Skript aus einem fremden Repo aufgerufen wird, hört es auf, ein internes Werkzeug zu sein, und **wird eine Schnittstelle**. Wer danach sein Aufrufmuster ändert, bricht einen Aufrufer, der in **keiner** unserer Pipelines steht — es fällt also nur dort auf, und dort weiß niemand warum. Das gehört als Vermerk in den Skriptkopf, nicht nur in dieses Issue. ## Umsetzung Die Unterscheidung Pfad/Name muss **mechanisch** sein, nicht heuristisch: ein Argument, das ein Verzeichnis mit `Chart.yaml` ist, ist ein Pfad; alles andere ein Name unterhalb des Repo-Wurzelverzeichnisses. Zwei Aufrufkonventionen sind genau die Form, der dieses Repo misstraut — siehe #231, wo zwei Parser für dieselbe Datei zusammengelegt wurden, weil zwei Gelegenheiten zur Abweichung eine zu viel sind. Wenn die Regel nicht in einem Satz eindeutig ist, ist sie falsch geschnitten. ## Zu belegen 1. **Ohne Argumente unverändert.** Der Lauf über alle Charts muss dieselbe Ausgabe liefern wie heute — als Vergleich zeigen, nicht behaupten. 2. **Ein Chart außerhalb des Repo-Wurzelverzeichnisses**, mit eigenem Fixture-Verzeichnis, wird geprüft. 3. **Der stille Fall wird in beiden Modi gefangen.** Das ist der ganze Wert des Tests; ein externer Modus, der nur den lauten Fall fängt, wäre der Grep, den er ersetzen soll. Kein Chart betroffen, also keine Chart-Version und kein Publish. Damit prüft die Chart-Matrix diesen PR auch nicht — der Beleg muss aus dem Lauf des PRs selbst kommen.
Author
Member

Nachgeprüft am 2026-10-04: unverändert offen

ci/run-quantity-render-test.sh löst Charts weiter über den Namen auf, nicht über den Pfad:

  • Zeile 97: CHARTS+=("$(basename "$DIR")")
  • Zeile 110: if [ ! -f "$ROOT/$CHART/Chart.yaml" ] → ERROR: '$CHART' is not a chart directory
  • Zeile 121: "$ROOT/ci/helm-dependencies.sh" "$ROOT/$CHART"

Jeder Pfad wird also gegen $ROOT neu zusammengesetzt. Eine Chart-Kopie außerhalb des Repositories ist damit nicht prüfbar, auch wenn man ihren Pfad übergibt.

## Nachgeprüft am 2026-10-04: unverändert offen `ci/run-quantity-render-test.sh` löst Charts weiter über den **Namen** auf, nicht über den Pfad: - Zeile 97: `CHARTS+=("$(basename "$DIR")")` - Zeile 110: `if [ ! -f "$ROOT/$CHART/Chart.yaml" ]` → `ERROR: '$CHART' is not a chart directory` - Zeile 121: `"$ROOT/ci/helm-dependencies.sh" "$ROOT/$CHART"` Jeder Pfad wird also gegen `$ROOT` neu zusammengesetzt. Eine Chart-Kopie außerhalb des Repositories ist damit nicht prüfbar, auch wenn man ihren Pfad übergibt.
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: jlab-cluster/helm-charts#19