push als String statt Boolean, dazu ein Diagnoseschritt

Eine boolesche workflow_call-Eingabe kommt auf dieser Gitea-Version nicht
im aufgerufenen Workflow an — weder ihre Vorgabe noch ein ausdruecklich
uebergebener Wert. inputs.push blieb leer, der Baustein baute immer im
Pruefmodus und meldete dabei Erfolg. Alle Eingaben vom Typ string kamen
im selben Lauf korrekt an; push war die einzige boolesche und die
einzige, die versagte.

push ist deshalb jetzt type: string mit den Werten 'true' und 'false' und
der Vorgabe 'true'. Die Bedingung inputs.push && inputs.push != 'false'
bleibt unveraendert: sie war von Anfang an fuer Boolean und String
gebaut und traegt die Umstellung ohne Anpassung. Der Kommentar an der
Eingabe haelt den Befund fest, damit die Eingabe nicht beim naechsten
Aufraeumen "korrekt" auf boolean zurueckgestellt wird und den Fehler
still zurueckholt.

Neu ist ein Diagnoseschritt am Anfang des Jobs, der den empfangenen Wert
und den daraus abgeleiteten Modus ausgibt. Der Fehler war nur deshalb so
langlebig, weil nirgends sichtbar war, was tatsaechlich ankommt — und
weil ein Lauf ohne Push genauso gruen aussieht wie einer mit. Der Schritt
folgt dem Muster von "Docker-Socket ermitteln" und kann den Job nicht
scheitern lassen.

Brechende Aenderung gegenueber v1: Aufrufer, die push als YAML-Boolean
uebergeben, muessen auf @v2 wechseln und in Anfuehrungszeichen schreiben.
Das README ist entsprechend nachgezogen.

Fixes #4
This commit was merged in pull request #6.
This commit is contained in:
tbekemeyer committed 2026-09-30 17:30:40 +00:00
1 parent 47b77fac54
commit b82d0a2155
2 files changed
+88 -14

No files matched your search

+52 -7
View File
@@ -28,16 +28,37 @@ on:
required: false
default: '0'
type: string
# Bewusst `type: string` und nicht `boolean` — siehe Issue #4. Auf dieser
# Gitea-Version (gemessen an 1.27.0) kommt eine boolesche
# workflow_call-Eingabe im aufgerufenen Workflow gar nicht an: weder ihre
# Vorgabe noch ein ausdruecklich uebergebenes `push: true`. `inputs.push`
# war in beiden Faellen leer, der Baustein baute immer im Pruefmodus und
# meldete dabei Erfolg. Alle Eingaben vom Typ string desselben Laufs
# (platforms, registry, image-owner, container-name) kamen korrekt an;
# push war die einzige boolesche und die einzige, die versagte.
#
# Wer das beim naechsten Aufraeumen "korrekt" auf boolean zurueckstellt,
# holt den Fehler still zurueck: nichts wird veroeffentlicht, und der
# Lauf bleibt gruen.
#
# Die Bedingung `inputs.push && inputs.push != 'false'` musste dafuer
# nicht angefasst werden. Sie wurde seinerzeit ausdruecklich so gebaut,
# dass sie Boolean und String vertraegt (Begruendung am
# 1Password-Schritt), und traegt die Umstellung unveraendert: 'true' ist
# truthy und ungleich 'false', 'false' ist truthy aber gleich 'false'.
push:
description: >-
Whether the built image is pushed. With push: false no credentials are
fetched from 1Password and no registry login happens, so the workflow
doubles as a build check. Caveat: the checkout token comes from the
same 1Password step, so without push the checkout falls back to the
job token — which cannot clone private submodules.
Whether the built image is pushed, as the string 'true' or 'false'.
Deliberately a string, not a boolean: boolean workflow_call inputs do
not reach the called workflow on this Gitea version (see issue #4).
With push: 'false' no credentials are fetched from 1Password and no
registry login happens, so the workflow doubles as a build check.
Caveat: the checkout token comes from the same 1Password step, so
without push the checkout falls back to the job token — which cannot
clone private submodules.
required: false
default: true
type: boolean
default: 'true'
type: string
container-name:
required: true
type: string
@@ -113,6 +134,24 @@ jobs:
# gesetzt, bleibt die Variable leer und Docker nutzt seinen Default.
DOCKER_HOST: ${{ vars.DOCKER_HOST }}
steps:
# Issue #4 blieb so lange unbemerkt, weil nirgends sichtbar war, was
# ueberhaupt ankommt — und weil ein Lauf ohne Push genauso gruen aussieht
# wie einer mit. Der Schritt macht beides sichtbar: den rohen Wert der
# Eingabe und den daraus abgeleiteten Modus. Gleiches Muster wie
# "Docker-Socket ermitteln": rein informativ, mit `|| true` abgesichert,
# damit er den Job unter keinen Umstaenden scheitern laesst.
#
# Der Wert wird ueber die Umgebung gereicht statt in die Kommandozeile
# interpoliert; so bleibt er auch dann harmlos, wenn ein Aufrufer etwas
# Unerwartetes uebergibt.
- name: Eingaben melden
env:
PUSH_ROH: ${{ inputs.push }}
PUSH_MODUS: ${{ (inputs.push && inputs.push != 'false') && 'veroeffentlichen' || 'nur bauen' }}
run: |
echo "push (roh): '${PUSH_ROH}'" || true
echo "Modus: ${PUSH_MODUS}" || true
# Der Token, den Gitea jedem Job stellt, taugt fuer zwei Dinge nicht:
# Er gilt nur fuer das ausfuehrende Repository, waehrend die Submodule in
# eigenen, privaten Repositories liegen — deren Klon scheitert an
@@ -135,6 +174,12 @@ jobs:
# Strings sind truthy), `inputs.push == 'true'` waere beim echten Boolean
# true falsch (ein Vergleich ueber Typgrenzen laeuft ueber Zahlen, 'true'
# wird dabei zu NaN). Die Kombination aus beidem deckt alle vier Faelle ab.
#
# Genau deshalb blieb sie bei der Umstellung von push auf `type: string`
# (Issue #4) unveraendert: sie war von Anfang an fuer beide Schreibweisen
# gebaut. 'true' ergibt wahr, 'false' ergibt falsch, ein leerer Wert
# ergibt falsch — und die Boolean-Faelle gelten unveraendert weiter,
# falls ein Aufrufer doch einmal ein YAML-Boolean uebergibt.
- name: Zugangsdaten aus 1Password laden
id: op-secrets
if: ${{ inputs.push && inputs.push != 'false' }}