Helm-Chart-Publish als geteilten Baustein aufnehmen #7

Merged
jklein merged 2 commits from feat/publish-helm-chart into main 2026-10-02 00:53:25 +02:00
Member

Nimmt publish-helm-chart.yml als zweiten geteilten Baustein auf. Der Workflow
kommt aus jlab-cluster/helm-charts, wo er heute 26 dünne Hüllen bedient, und
lädt ein gepacktes Helm-Chart in eine klassische, indexbasierte Helm-Registry —
ein einzelnes HTTP-POST des .tgz, kein OCI-Push.

Dazu ein README-Abschnitt in der Struktur des vorhandenen: Zweck, Eingaben als
Tabelle, Aufrufbeispiel, Voraussetzungen im aufrufenden Repository.

Was beim Umzug anders ist als in der Vorlage

Der Eigentümer wird eine Pflichteingabe registry-owner, Typ string, ohne
Vorgabe.
Bisher leitete der Workflow ihn aus ${{ github.repository_owner }}
ab. Als Eingabe wird der Wert im aufrufenden Repository ausgewertet, wo er
gemessen ist (jlab-cluster, Lauf 282 von validate-charts.yml). Dass der
Kontext auch in einem von fremd aufgerufenen Workflow der des Aufrufers bleibt,
ist dokumentiert, auf dieser Forge-Version aber nicht gemessen — und ein Chart,
das unter dem falschen Eigentümer veröffentlicht wird, ist nichts, wofür man
sich darauf verlassen müsste. Das deckt sich mit der Hausregel hier, dass ein
Eigentümer-Segment nie geraten wird.

type: string wie alle Eingaben dieses Bausteins — nach #4 kommen boolesche
workflow_call-Eingaben auf 1.27.0 nicht an, bei grünem Lauf. Das steht als
Kommentar an der Eingabe, damit es beim nächsten Aufräumen nicht „korrigiert"
wird.

OP_CONNECT_HOST kommt aus einer Variablen des aufrufenden Repositories
statt fest verdrahtet aus dem Baustein. Ein geteilter Baustein trägt nicht die
Infrastruktur-Adresse eines einzelnen Mandanten. Der Preis ist eine
Voraussetzung, die man vergessen kann, und eine nicht gesetzte Variable kommt
als leere Zeichenkette an — deshalb prüft der erste Schritt sie und benennt beim
Abbruch die Einstellung samt Ort, statt zwei Schritte später an einer leeren
Adresse zu scheitern.

Der workflow_dispatch-Block ist entfallen. Ein Dispatch hier liefe gegen
dieses Repository, in dem kein Chart liegt. Die Hüllen des Aufrufers tragen ihn.

Was unverändert übernommen ist

Jede Eigenschaft des Upload-Schritts ist einmal bezahlt worden; das Shell-Skript
des Schritts ist zeichengleich mit der Vorlage, abgesehen von zwei
Fehlermeldungen, die den Eigentümer jetzt als Eingabe und nicht mehr als
abgeleiteten Wert benennen:

  • curl --config - statt --user, damit die Zugangsdaten nicht in der
    Prozessliste stehen, dazu die Leerzeichen-Prüfung an ihnen (curl --config
    schneidet einen unquotierten Wert am ersten Leerzeichen ab);
  • --fail-with-body — ohne das verlässt curl einen 401 mit Code 0 und die
    Veröffentlichung wird grün, ohne etwas hochgeladen zu haben;
  • der gebaute Dateiname <chart>-<version>.tgz samt test -f, nie ein Glob;
  • die :?-Wächter je Wert, jeder nennt das fehlende op://-Feld;
  • ::add-mask:: auf den Host, abgeleitet aus der rohen URL, bevor sonst etwas
    läuft;
  • die drei Formwächter an charts-url und die Prüfung des Eigentümers auf
    URL-taugliche Zeichen.

Die Kommentare, die das begründen, sind mitgewandert und in Englisch geblieben,
wie sie geschrieben wurden; neue Kommentare in der Datei folgen ihr, damit die
Datei einsprachig bleibt. Der README-Abschnitt ist Deutsch wie der Rest hier.

ci/helm-dependencies.sh läuft weiterhin vor helm package und bleibt ein
Skript des aufrufenden Repositories: Der Checkout holt den Baum des
Repositories, zu dem der Lauf gehört, also den des Aufrufers. Das ist im README
als Voraussetzung aufgeführt, und ein Wächter sagt es beim Fehlen, statt die
Shell eine fehlende Datei melden zu lassen.

Geprüft

  • Struktur und Verdrahtung von workflow_call (Eingaben, Ausgabe,
    secrets) gegen einen YAML-Parser; die Shell-Blöcke mit bash -n.
  • actionlint ist in der Arbeitsumgebung nicht verfügbar, die Datei ist
    insoweit durch Lesen geprüft.
  • Es gibt keinen Verweis mehr auf ${{ github.repository_owner }} in einem
    ausgewerteten Ausdruck; der Wert kommt als Eingabe.

Nach dem Merge

  1. Tag v3 auf den Merge-Stand. Bewusst nicht Teil dieses PRs. Das README
    dokumentiert dabei, dass die Nummer den Zustand des Repositories
    bezeichnet und nicht die Version einer Datei: Wer künftig
    docker-build-push.yml ändert, erhöht auf v4, und ein Aufruf von
    publish-helm-chart.yml@v3 bleibt gültig, obwohl sich an dieser Datei nichts
    geändert hat. v3 selbst ist additiv, Aufrufer auf @v2 bleiben unberührt.
  2. Variable OP_CONNECT_HOST in jlab-cluster/helm-charts setzen, Wert
    https://op-connect.jk-dev.de — der Host, der heute in der dortigen Kopie
    verdrahtet ist.
  3. Danach erst die 26 Hüllen dort auf @v3 umstellen. Bis dahin ist nichts
    kaputt: Solange die Aufrufe auf die lokale Datei zeigen, ändert dieser
    Baustein nichts.

Part of jlab-cluster/helm-charts#66

Nimmt `publish-helm-chart.yml` als zweiten geteilten Baustein auf. Der Workflow kommt aus `jlab-cluster/helm-charts`, wo er heute 26 dünne Hüllen bedient, und lädt ein gepacktes Helm-Chart in eine klassische, indexbasierte Helm-Registry — ein einzelnes HTTP-`POST` des `.tgz`, kein OCI-Push. Dazu ein README-Abschnitt in der Struktur des vorhandenen: Zweck, Eingaben als Tabelle, Aufrufbeispiel, Voraussetzungen im aufrufenden Repository. ## Was beim Umzug anders ist als in der Vorlage **Der Eigentümer wird eine Pflichteingabe `registry-owner`, Typ `string`, ohne Vorgabe.** Bisher leitete der Workflow ihn aus `${{ github.repository_owner }}` ab. Als Eingabe wird der Wert im **aufrufenden** Repository ausgewertet, wo er gemessen ist (`jlab-cluster`, Lauf 282 von `validate-charts.yml`). Dass der Kontext auch in einem von fremd aufgerufenen Workflow der des Aufrufers bleibt, ist dokumentiert, auf dieser Forge-Version aber nicht gemessen — und ein Chart, das unter dem falschen Eigentümer veröffentlicht wird, ist nichts, wofür man sich darauf verlassen müsste. Das deckt sich mit der Hausregel hier, dass ein Eigentümer-Segment nie geraten wird. `type: string` wie alle Eingaben dieses Bausteins — nach #4 kommen boolesche `workflow_call`-Eingaben auf 1.27.0 nicht an, bei grünem Lauf. Das steht als Kommentar an der Eingabe, damit es beim nächsten Aufräumen nicht „korrigiert" wird. **`OP_CONNECT_HOST` kommt aus einer Variablen des aufrufenden Repositories** statt fest verdrahtet aus dem Baustein. Ein geteilter Baustein trägt nicht die Infrastruktur-Adresse eines einzelnen Mandanten. Der Preis ist eine Voraussetzung, die man vergessen kann, und eine nicht gesetzte Variable kommt als leere Zeichenkette an — deshalb prüft der erste Schritt sie und benennt beim Abbruch die Einstellung samt Ort, statt zwei Schritte später an einer leeren Adresse zu scheitern. **Der `workflow_dispatch`-Block ist entfallen.** Ein Dispatch hier liefe gegen dieses Repository, in dem kein Chart liegt. Die Hüllen des Aufrufers tragen ihn. ## Was unverändert übernommen ist Jede Eigenschaft des Upload-Schritts ist einmal bezahlt worden; das Shell-Skript des Schritts ist zeichengleich mit der Vorlage, abgesehen von zwei Fehlermeldungen, die den Eigentümer jetzt als Eingabe und nicht mehr als abgeleiteten Wert benennen: - `curl --config -` statt `--user`, damit die Zugangsdaten nicht in der Prozessliste stehen, dazu die Leerzeichen-Prüfung an ihnen (`curl --config` schneidet einen unquotierten Wert am ersten Leerzeichen ab); - `--fail-with-body` — ohne das verlässt `curl` einen 401 mit Code 0 und die Veröffentlichung wird grün, ohne etwas hochgeladen zu haben; - der **gebaute** Dateiname `<chart>-<version>.tgz` samt `test -f`, nie ein Glob; - die `:?`-Wächter je Wert, jeder nennt das fehlende `op://`-Feld; - `::add-mask::` auf den Host, abgeleitet aus der rohen URL, bevor sonst etwas läuft; - die drei Formwächter an `charts-url` und die Prüfung des Eigentümers auf URL-taugliche Zeichen. Die Kommentare, die das begründen, sind mitgewandert und in Englisch geblieben, wie sie geschrieben wurden; neue Kommentare in der Datei folgen ihr, damit die Datei einsprachig bleibt. Der README-Abschnitt ist Deutsch wie der Rest hier. `ci/helm-dependencies.sh` läuft weiterhin vor `helm package` und bleibt ein Skript des **aufrufenden** Repositories: Der Checkout holt den Baum des Repositories, zu dem der Lauf gehört, also den des Aufrufers. Das ist im README als Voraussetzung aufgeführt, und ein Wächter sagt es beim Fehlen, statt die Shell eine fehlende Datei melden zu lassen. ## Geprüft - Struktur und Verdrahtung von `workflow_call` (Eingaben, Ausgabe, `secrets`) gegen einen YAML-Parser; die Shell-Blöcke mit `bash -n`. - `actionlint` ist in der Arbeitsumgebung nicht verfügbar, die Datei ist insoweit **durch Lesen** geprüft. - Es gibt keinen Verweis mehr auf `${{ github.repository_owner }}` in einem ausgewerteten Ausdruck; der Wert kommt als Eingabe. ## Nach dem Merge 1. **Tag `v3`** auf den Merge-Stand. Bewusst nicht Teil dieses PRs. Das README dokumentiert dabei, dass die Nummer den Zustand des **Repositories** bezeichnet und nicht die Version einer Datei: Wer künftig `docker-build-push.yml` ändert, erhöht auf `v4`, und ein Aufruf von `publish-helm-chart.yml@v3` bleibt gültig, obwohl sich an dieser Datei nichts geändert hat. `v3` selbst ist additiv, Aufrufer auf `@v2` bleiben unberührt. 2. **Variable `OP_CONNECT_HOST`** in `jlab-cluster/helm-charts` setzen, Wert `https://op-connect.jk-dev.de` — der Host, der heute in der dortigen Kopie verdrahtet ist. 3. Danach erst die 26 Hüllen dort auf `@v3` umstellen. Bis dahin ist nichts kaputt: Solange die Aufrufe auf die lokale Datei zeigen, ändert dieser Baustein nichts. Part of jlab-cluster/helm-charts#66
jlab-bot added 1 commit 2026-10-02 00:40:14 +02:00
Der Workflow kommt aus jlab-cluster/helm-charts, wo er 26 duenne Huellen
bedient. Er laedt ein gepacktes Chart in eine klassische, indexbasierte
Helm-Registry: ein einzelnes HTTP-POST, kein OCI-helm-push.

Zwei Dinge sind beim Umzug anders als in der Vorlage.

Der Eigentuemer ist eine Pflichteingabe registry-owner vom Typ string, ohne
Vorgabe. Bisher wurde er aus github.repository_owner abgeleitet; als Eingabe
wird er im aufrufenden Repository ausgewertet, wo der Wert gemessen ist. Das
folgt der Hausregel, dass ein Eigentuemer-Segment nie geraten wird, und haengt
den Baustein an keine Kontext-Semantik. type: string wie alle Eingaben hier,
siehe #4.

OP_CONNECT_HOST kommt aus einer Variablen des aufrufenden Repositories statt
fest verdrahtet aus dem Baustein — ein geteilter Baustein traegt nicht die
Infrastruktur-Adresse eines einzelnen Mandanten. Ein erster Schritt prueft die
Variable und benennt sie beim Abbruch, statt zwei Schritte spaeter an einer
leeren Adresse zu scheitern.

Alles andere ist unveraendert uebernommen, samt der Kommentare, die es
begruenden: curl --config - statt --user, --fail-with-body, der gebaute
Dateiname mit test -f, die :?-Waechter je Tresor-Feld, die Leerzeichen-Pruefung
an den Zugangsdaten, das Maskieren des Hosts und die drei Formwaechter an
charts-url.

Der workflow_dispatch-Block ist entfallen: Ein Dispatch hier liefe gegen dieses
Repository, in dem kein Chart liegt. Die Huellen des Aufrufers tragen ihn.

ci/helm-dependencies.sh bleibt ein Skript des aufrufenden Repositories; der
Checkout holt dessen Baum, also laeuft es weiter aus dessen Kopie.

Part of jlab-cluster/helm-charts#66
jklein added 1 commit 2026-10-02 00:44:56 +02:00
Das Wiki dieses Repositories ist jetzt angelegt und traegt die Langform zu
beiden Bausteinen. Ohne einen Verweis von hier aus erfaehrt davon niemand, der
nur das README liest.

Die Aufteilung steht dabei gleich mit: Diese Datei bleibt die Kurzreferenz fuer
Aufrufer und wird nicht gekuerzt, das Wiki begruendet sie.

Part of jlab-cluster/helm-charts#66
jklein approved these changes 2026-10-02 00:53:18 +02:00
jklein merged commit 6123f469f6 into main 2026-10-02 00:53:25 +02:00
jklein deleted branch feat/publish-helm-chart 2026-10-02 00:53:25 +02:00
Sign in to join this conversation.
No Reviewers
No labels
2 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: workflow-util/pipelines#7