Mit #2 bekommt docker-build-push.yml die Eingabe push. Bei push: false
wird der 1Password-Schritt übersprungen — so gewollt, damit ein reiner Prüflauf
ohne Zugangsdaten auskommt.
Der Checkout-Token stammt aber aus demselben Schritt. Ohne Push fällt actions/checkout deshalb auf den Standard-Token des Jobs zurück. Der genügt
für das ausführende Repository, nicht für Submodule in eigenen privaten
Repositories — deren Klon scheitert mit Repository not found.
Folge: Projekte mit privaten Submodulen können push: false nicht nutzen.
Der Prüfmodus steht damit ausgerechnet den Projekten nicht zur Verfügung, deren
Build am ehesten etwas zu prüfen hätte.
Das ist in #2 dokumentiert (Kommentar am 1Password-Schritt, hervorgehobener
Hinweis in der README), aber nicht gelöst. Dieses Issue hält den offenen Punkt
fest, damit er nicht nur im Fließtext der README steht.
Denkbare Wege
Den 1Password-Schritt zweiteilen. Ein Schritt holt nur den
Checkout-Token und läuft immer, ein zweiter holt die Registry-Zugangsdaten
und läuft nur beim Push. Nächstliegend, hält den Prüfmodus aber nicht mehr
secret-frei — OP_CONNECT_TOKEN und secrets: inherit blieben nötig.
Eine Eingabe submodules (Vorgabe true). Projekte ohne Submodule
schalten ab und brauchen im Prüfmodus gar keinen Token. Löst das Problem
nicht, macht es aber sichtbar und vermeidet den nutzlosen Klonversuch.
Eine eigene Eingabe checkout-token, die der Aufrufer selbst besorgt.
Verschiebt die Frage nur nach außen.
Die Entscheidung gehört zusammen mit dem ersten Aufrufer getroffen, der
tatsächlich private Submodule hat. Vorher ist sie Spekulation.
Mit #2 bekommt `docker-build-push.yml` die Eingabe `push`. Bei `push: false`
wird der 1Password-Schritt übersprungen — so gewollt, damit ein reiner Prüflauf
ohne Zugangsdaten auskommt.
Der Checkout-Token stammt aber aus **demselben** Schritt. Ohne Push fällt
`actions/checkout` deshalb auf den Standard-Token des Jobs zurück. Der genügt
für das ausführende Repository, nicht für Submodule in eigenen privaten
Repositories — deren Klon scheitert mit `Repository not found`.
**Folge:** Projekte mit privaten Submodulen können `push: false` nicht nutzen.
Der Prüfmodus steht damit ausgerechnet den Projekten nicht zur Verfügung, deren
Build am ehesten etwas zu prüfen hätte.
Das ist in #2 dokumentiert (Kommentar am 1Password-Schritt, hervorgehobener
Hinweis in der README), aber nicht gelöst. Dieses Issue hält den offenen Punkt
fest, damit er nicht nur im Fließtext der README steht.
## Denkbare Wege
1. **Den 1Password-Schritt zweiteilen.** Ein Schritt holt nur den
Checkout-Token und läuft immer, ein zweiter holt die Registry-Zugangsdaten
und läuft nur beim Push. Nächstliegend, hält den Prüfmodus aber nicht mehr
secret-frei — `OP_CONNECT_TOKEN` und `secrets: inherit` blieben nötig.
2. **Eine Eingabe `submodules`** (Vorgabe `true`). Projekte ohne Submodule
schalten ab und brauchen im Prüfmodus gar keinen Token. Löst das Problem
nicht, macht es aber sichtbar und vermeidet den nutzlosen Klonversuch.
3. **Eine eigene Eingabe `checkout-token`**, die der Aufrufer selbst besorgt.
Verschiebt die Frage nur nach außen.
Die Entscheidung gehört zusammen mit dem ersten Aufrufer getroffen, der
tatsächlich private Submodule hat. Vorher ist sie Spekulation.
Nicht mehr theoretisch — der Checkout-Token blockiert den ersten echten Abnehmer
Dieses Issue beschrieb bisher einen Vorbehalt: Im Modus ohne Push steht der Checkout-Token nicht zur Verfügung, private Submodule ließen sich nicht klonen. Die Wirklichkeit ist ungünstiger — im Modus mit Push scheitert der Checkout ganz, wenn der 1Password-Token keinen Zugriff auf das aufrufende Repository hat.
Gemessen an Lauf 278 von bekemeyer-klein/bk-dev-website:
[command]/usr/bin/git -c protocol.version=2 fetch --no-tags --prune … origin +45aee1d…
remote: Repository not found
fatal: repository 'http://…/bekemeyer-klein/bk-dev-website/' not found
The process '/usr/bin/git' failed with exit code 128
Dreimal wiederholt, dann Abbruch. Der Job scheitert vor dem Bau; --push und der Registry-Login kommen gar nicht mehr zum Zug.
Repository not found ist die Antwort, die Gitea bei fehlender Berechtigung auf ein privates Repository gibt — der Token existiert, er darf nur nicht.
Die Asymmetrie ist das Problem
Modus
Checkout nutzt
Ergebnis bei bk-dev-website
push: 'false'
Job-Token (Rückfall)
funktioniert
push: 'true'
jlab-git-checkout-token aus 1Password
scheitert
Ob der Checkout funktioniert, hängt damit daran, ob gepusht wird. Das ist kein naheliegender Zusammenhang, und er kostet Zeit beim Suchen: Der Fehler sieht nach einem Rechteproblem am Repository aus, ist aber eines am geteilten Token.
Lösungsrichtungen
1. Den Token berechtigen — jlab-git-checkout-token Zugriff auf das aufrufende Repository geben. Schnell, aber es skaliert schlecht: Jedes neue Projekt braucht die Freigabe, und der Token sammelt mit der Zeit Rechte auf alles.
2. Den Checkout-Token opt-in machen (empfohlen). Der Normalfall ist ein Repository ohne private Submodule; dort genügt der Job-Token. Eine Eingabe wie private-submodules: 'false' (Vorgabe) würde steuern, ob der Token überhaupt geholt und verwendet wird. Projekte mit privaten Submodulen setzen sie ausdrücklich.
Damit verschwindet zugleich die im Ursprungstext beschriebene Einschränkung: Der Prüfmodus wäre dann nicht mehr schlechter gestellt als der Push-Modus, weil beide denselben Weg nehmen.
3. Den 1Password-Schritt zweiteilen — Checkout-Token immer holen, Registry-Zugang nur beim Push. Behebt die Asymmetrie, lässt aber Lösungsrichtung 1 als Voraussetzung bestehen.
Empfehlung
Lösungsrichtung 2. Sie macht den Baustein für beliebige Repositories nutzbar, ohne dass ein geteilter Token überall Zugriff braucht — und sie folgt dem Grundsatz, dass der Sonderfall die Ausnahme sein sollte, nicht die Vorgabe.
## Nicht mehr theoretisch — der Checkout-Token blockiert den ersten echten Abnehmer
Dieses Issue beschrieb bisher einen Vorbehalt: Im Modus ohne Push steht der Checkout-Token nicht zur Verfügung, private Submodule ließen sich nicht klonen. Die Wirklichkeit ist ungünstiger — **im Modus *mit* Push scheitert der Checkout ganz**, wenn der 1Password-Token keinen Zugriff auf das aufrufende Repository hat.
Gemessen an Lauf 278 von `bekemeyer-klein/bk-dev-website`:
```
[command]/usr/bin/git -c protocol.version=2 fetch --no-tags --prune … origin +45aee1d…
remote: Repository not found
fatal: repository 'http://…/bekemeyer-klein/bk-dev-website/' not found
The process '/usr/bin/git' failed with exit code 128
```
Dreimal wiederholt, dann Abbruch. Der Job scheitert **vor** dem Bau; `--push` und der Registry-Login kommen gar nicht mehr zum Zug.
`Repository not found` ist die Antwort, die Gitea bei fehlender Berechtigung auf ein privates Repository gibt — der Token existiert, er darf nur nicht.
## Die Asymmetrie ist das Problem
| Modus | Checkout nutzt | Ergebnis bei `bk-dev-website` |
| --- | --- | --- |
| `push: 'false'` | Job-Token (Rückfall) | funktioniert |
| `push: 'true'` | `jlab-git-checkout-token` aus 1Password | **scheitert** |
Ob der Checkout funktioniert, hängt damit daran, ob gepusht wird. Das ist kein naheliegender Zusammenhang, und er kostet Zeit beim Suchen: Der Fehler sieht nach einem Rechteproblem am Repository aus, ist aber eines am geteilten Token.
## Lösungsrichtungen
**1. Den Token berechtigen** — `jlab-git-checkout-token` Zugriff auf das aufrufende Repository geben. Schnell, aber es skaliert schlecht: Jedes neue Projekt braucht die Freigabe, und der Token sammelt mit der Zeit Rechte auf alles.
**2. Den Checkout-Token opt-in machen** (empfohlen). Der Normalfall ist ein Repository ohne private Submodule; dort genügt der Job-Token. Eine Eingabe wie `private-submodules: 'false'` (Vorgabe) würde steuern, ob der Token überhaupt geholt und verwendet wird. Projekte mit privaten Submodulen setzen sie ausdrücklich.
Damit verschwindet zugleich die im Ursprungstext beschriebene Einschränkung: Der Prüfmodus wäre dann nicht mehr schlechter gestellt als der Push-Modus, weil beide denselben Weg nehmen.
**3. Den 1Password-Schritt zweiteilen** — Checkout-Token immer holen, Registry-Zugang nur beim Push. Behebt die Asymmetrie, lässt aber Lösungsrichtung 1 als Voraussetzung bestehen.
## Empfehlung
Lösungsrichtung 2. Sie macht den Baustein für beliebige Repositories nutzbar, ohne dass ein geteilter Token überall Zugriff braucht — und sie folgt dem Grundsatz, dass der Sonderfall die Ausnahme sein sollte, nicht die Vorgabe.
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Mit #2 bekommt
docker-build-push.ymldie Eingabepush. Beipush: falsewird der 1Password-Schritt übersprungen — so gewollt, damit ein reiner Prüflauf
ohne Zugangsdaten auskommt.
Der Checkout-Token stammt aber aus demselben Schritt. Ohne Push fällt
actions/checkoutdeshalb auf den Standard-Token des Jobs zurück. Der genügtfür das ausführende Repository, nicht für Submodule in eigenen privaten
Repositories — deren Klon scheitert mit
Repository not found.Folge: Projekte mit privaten Submodulen können
push: falsenicht nutzen.Der Prüfmodus steht damit ausgerechnet den Projekten nicht zur Verfügung, deren
Build am ehesten etwas zu prüfen hätte.
Das ist in #2 dokumentiert (Kommentar am 1Password-Schritt, hervorgehobener
Hinweis in der README), aber nicht gelöst. Dieses Issue hält den offenen Punkt
fest, damit er nicht nur im Fließtext der README steht.
Denkbare Wege
Checkout-Token und läuft immer, ein zweiter holt die Registry-Zugangsdaten
und läuft nur beim Push. Nächstliegend, hält den Prüfmodus aber nicht mehr
secret-frei —
OP_CONNECT_TOKENundsecrets: inheritblieben nötig.submodules(Vorgabetrue). Projekte ohne Submoduleschalten ab und brauchen im Prüfmodus gar keinen Token. Löst das Problem
nicht, macht es aber sichtbar und vermeidet den nutzlosen Klonversuch.
checkout-token, die der Aufrufer selbst besorgt.Verschiebt die Frage nur nach außen.
Die Entscheidung gehört zusammen mit dem ersten Aufrufer getroffen, der
tatsächlich private Submodule hat. Vorher ist sie Spekulation.
Nicht mehr theoretisch — der Checkout-Token blockiert den ersten echten Abnehmer
Dieses Issue beschrieb bisher einen Vorbehalt: Im Modus ohne Push steht der Checkout-Token nicht zur Verfügung, private Submodule ließen sich nicht klonen. Die Wirklichkeit ist ungünstiger — im Modus mit Push scheitert der Checkout ganz, wenn der 1Password-Token keinen Zugriff auf das aufrufende Repository hat.
Gemessen an Lauf 278 von
bekemeyer-klein/bk-dev-website:Dreimal wiederholt, dann Abbruch. Der Job scheitert vor dem Bau;
--pushund der Registry-Login kommen gar nicht mehr zum Zug.Repository not foundist die Antwort, die Gitea bei fehlender Berechtigung auf ein privates Repository gibt — der Token existiert, er darf nur nicht.Die Asymmetrie ist das Problem
bk-dev-websitepush: 'false'push: 'true'jlab-git-checkout-tokenaus 1PasswordOb der Checkout funktioniert, hängt damit daran, ob gepusht wird. Das ist kein naheliegender Zusammenhang, und er kostet Zeit beim Suchen: Der Fehler sieht nach einem Rechteproblem am Repository aus, ist aber eines am geteilten Token.
Lösungsrichtungen
1. Den Token berechtigen —
jlab-git-checkout-tokenZugriff auf das aufrufende Repository geben. Schnell, aber es skaliert schlecht: Jedes neue Projekt braucht die Freigabe, und der Token sammelt mit der Zeit Rechte auf alles.2. Den Checkout-Token opt-in machen (empfohlen). Der Normalfall ist ein Repository ohne private Submodule; dort genügt der Job-Token. Eine Eingabe wie
private-submodules: 'false'(Vorgabe) würde steuern, ob der Token überhaupt geholt und verwendet wird. Projekte mit privaten Submodulen setzen sie ausdrücklich.Damit verschwindet zugleich die im Ursprungstext beschriebene Einschränkung: Der Prüfmodus wäre dann nicht mehr schlechter gestellt als der Push-Modus, weil beide denselben Weg nehmen.
3. Den 1Password-Schritt zweiteilen — Checkout-Token immer holen, Registry-Zugang nur beim Push. Behebt die Asymmetrie, lässt aber Lösungsrichtung 1 als Voraussetzung bestehen.
Empfehlung
Lösungsrichtung 2. Sie macht den Baustein für beliebige Repositories nutzbar, ohne dass ein geteilter Token überall Zugriff braucht — und sie folgt dem Grundsatz, dass der Sonderfall die Ausnahme sein sollte, nicht die Vorgabe.