⚙️ 🤖 Push-Fehler wird verschluckt: git push && git push --tags bricht unter set -e nicht ab #3
Labels
No labels
Compat/Breaking
Kind/Bug
Kind/Documentation
Kind/Enhancement
Kind/Feature
Kind/Security
Kind/Testing
Priority/Critical
Priority/High
Priority/Low
Priority/Medium
Reviewed/Confirmed
Reviewed/Duplicate
Reviewed/Invalid
Reviewed/Won't Fix
Status/Abandoned
Status/Blocked
Status/Need More Info
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
holm.tools.public/release#3
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
█░░░░░░░░░█████████░███░░░░░░░█████████░███████░░░Symptom (aufgetreten 2026-09-22, Repo
holm.dotfiles.secret/wsm25.network.mikrotik)Der Push schlug fehl — das Script lief trotzdem bis zum Ende durch und meldete
zweimal Erfolg.
Ursache
Zeile 100 (Schritt 7):
set -ebricht nicht ab, wenn ein Kommando links von&&fehlschlägt —nur der letzte Befehl einer
&&-Liste wird auf den Exit-Status geprüft. Dererste
git pushscheitert,git push --tagswird übersprungen, der Statusder Gesamtliste ist der des letzten ausgeführten Befehls, und das Script
läuft weiter.
Folgeschaden
Schritt 8 legt danach das Forgejo-Release per API an. Forgejo erzeugt dabei
ein Tag, wenn keines existiert — und zwar auf
target_commitish(Default:main). Ergebnis auf dem Server:v0.9.0target=mainv0.9.0remotemain-Merge, nicht auf den Release-CommitdevremoteDas Tag muss danach von Hand gelöscht werden, sonst zeigt der Release auf
einen Commit, der die Release-Inhalte gar nicht enthält. Ein späteres
git push --tagswird abgelehnt, weil der Name remote schon belegt ist.Fix
Zwei eigene Zeilen —
set -egreift dann wie vorgesehen und das Script brichtvor Schritt 8 ab. Wünschenswert zusätzlich: Schritt 8 nur ausführen, wenn das
Tag remote nachweislich angekommen ist (
git ls-remote --tags origin "$next").Umgebung
RouterOS-unabhängig, reines Shell-Verhalten. Aufgetreten mit
release.shim Stand vom 2026-05-31 (Symlink~/bin/release), git 2.x,bash. Auslöser war ein Ausfall des Forgejo-SSH-Dienstes auf Port 2222
(IPv4
connection refused, IPv6network unreachable, HTTPS 443 lief) —der Ausfall selbst gehört nicht in dieses Issue.
Wiedervorlage 2026-09-23 (Holm 2026-09-22: „issue für morgen")
Holm hat den Fix für morgen terminiert. Damit morgen nichts nachrecherchiert
werden muss, hier der fertige Stand.
Patch, Zeile 100
Mehr braucht es für das gemeldete Symptom nicht:
set -eprüft nur denletzten Befehl einer
&&-Liste, getrennte Zeilen brechen sofort ab. Schritt 8(Forgejo-Release) wird dann gar nicht erst erreicht — und ohne Schritt 8 legt
Forgejo auch kein Tag auf
mainan.Optionale zweite Absicherung
Falls der Push einmal „erfolgreich" ist, das Tag aber trotzdem nicht ankommt
(Server-seitiger Hook, Ref-Filter), fängt das ein Vorab-Check vor Schritt 8:
Ob das mit rein soll, ist Ermessenssache; der Einzeiler oben behebt den
belegten Fall.
Abnahme
Kein Testlauf nötig, der das Remote anfasst — das Verhalten lässt sich isoliert
zeigen:
Kontext
Aufgetreten beim Release
v0.9.0vonholm.dotfiles.secret/wsm25.network.mikrotikwährend des Forgejo-SSH-Ausfallsvom 2026-09-22 (11:3x–12:05). Aufräumen dort erledigt: falscher Release (id
4778) und falsches Remote-Tag gelöscht, sauber nachgezogen, Tag zeigt jetzt auf
den Release-Commit. Der Ausfall selbst lag beim Tunnel docker24 → caddy2
(
ssh -NohneExitOnForwardFailure=yes) und ist bei wsm25-hostingdokumentiert — gehört nicht in dieses Issue.