Rifiuta il rilascio se il tag non e' arrivato sul remoto

Il push dei tag non porta con se' i commit: a ramo indietro il tag punta a un
oggetto che il remoto non conosce e viene rifiutato. La creazione della release
pero' non falliva — Gitea, non trovando il tag, lo crea da se' sulla testa del
ramo predefinito. Sarebbe stata pubblicata una release che dichiara un commit e
allega il codice di un altro, senza che niente lo segnalasse.

Adesso il tag viene riletto dal remoto dopo il push e il rilascio si ferma se
non c'e', dicendo di spingere il ramo. I commit restano da spingere a mano:
quando farlo lo decide chi lavora, non la catena di rilascio.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
2026-08-04 22:45:48 +02:00
co-authored by Claude Opus 5
parent 8954f9aaba
commit cb0e838964
+25 -3
View File
@@ -537,12 +537,34 @@
<WriteLinesToFile File="$(CurlCfg)" Overwrite="true"
Lines="header = &quot;Authorization: token $(GToken)&quot;" />
<!-- Il tag esiste gia' in locale (l'ha creato Pacchetto, o c'era prima).
Qui si prova solo a spingerlo: se il remoto non risponde la release lo
crea da se', quindi un fallimento non deve fermare il rilascio. -->
<!--
Il tag esiste gia' in locale: l'ha creato Pacchetto, o c'era prima. Qui va
spinto, e va verificato che ci sia arrivato.
Non e' una formalita'. Il push qui sotto spinge i tag, non i commit: se il
ramo e' indietro, il tag punta a un oggetto che il remoto non conosce e il
push viene rifiutato. A quel punto la creazione della release non
fallisce — Gitea, non trovando il tag, lo crea da se' sulla testa del ramo
predefinito. Verrebbe pubblicata una release che dichiara di essere il
commit X mentre il codice allegato e' il commit Y, e nessuno se ne
accorgerebbe. Meglio fermarsi e dire cosa manca.
I commit non si spingono da qui: quando spingere il ramo lo decide chi
lavora, non la catena di rilascio.
-->
<Exec Command="git push --tags" WorkingDirectory="$(Radice)" ContinueOnError="true"
StandardOutputImportance="low" StandardErrorImportance="low" />
<Exec Command="git ls-remote --tags origin refs/tags/$(Tag)" WorkingDirectory="$(Radice)"
ConsoleToMSBuild="true" ContinueOnError="true" StandardOutputImportance="low">
<Output TaskParameter="ConsoleOutput" PropertyName="TagSulRemoto" />
</Exec>
<Error Condition="'$(TagSulRemoto)' == ''"
Text="Il tag $(Tag) non e' arrivato sul remoto, quasi sempre perche' il ramo e' indietro.%0AGitea creerebbe la release sulla testa del ramo predefinito: il codice allegato non corrisponderebbe al commit dichiarato.%0A%0ASpingi il ramo e rilancia: git push" />
<Message Importance="High" Text=" tag $(Tag) sul remoto" />
<!-- Release gia' presente? -->
<Exec EchoOff="true" ContinueOnError="true" StandardOutputImportance="low"
Command="curl -s -K &quot;$(CurlCfg)&quot; -o &quot;$(RispostaJson)&quot; &quot;$(Api)/releases/tags/$(Tag)&quot;" />