I reusable workflow Node non sono utilizzabili nei repo dove package.json non è in root #4
Reference in New Issue
Block a user
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?
Problema
I reusable workflow Node (
quality-gates,dependency-check,dependency-outdated,npm-publish,auto-release) eseguononpm cie gli altri comandi npm nella root del repository chiamante, senza possibilità di configurarla.Nei repo dove il pacchetto Node non sta in root, ogni job muore subito:
Casi reali riscontrati oggi:
PZeta_Touch/pzeta-calendartypescript/go/,java/,php/,python/,typescript/)PZeta_Touch/pzeta-kingserver/docs/+ submodulefront/+server/Perché non era aggirabile dal chiamante
I reusable workflow non ereditano
defaults.run.working-directorydal workflow chiamante, e questi template non espongono un input equivalente: gli unici disponibili sononode-versione, perquality-gates,npm-version.L'unica via era rinunciare ai template e reinlineare i job nel repo chiamante. È esattamente ciò che è stato fatto in entrambi i repo — ma in
pzeta-calendarla regressione si era già ripresentata tre volte, perché a ogni riallineamento ai template condivisi laworking-directoryandava persa di nuovo.Soluzione
Aggiunto l'input opzionale
working-directory(default.) ai 5 workflow Node e alle rispettive varianti-github, applicato viadefaults.run.working-directorya livello di job — quindi copre tutti gli steprunsenza toccare gli stepuses(checkout, setup-node, cache), che devono continuare a operare sulla root.Il default
.rende la modifica retrocompatibile: nessun repo che usa già i template cambia comportamento.Uso lato chiamante:
Criteri di accettazione
working-directorye le varianti-githubsono allineateworking-directoryvalorizzato,npm cigira nella sottocartella (verifica supzeta-calendaropzeta-king)v1viene spostato solo dopo entrambe le verificheVerificato in CI reale, tag
v1spostatoImplementato in
dae2a74. Il tag mobilev1è stato spostato solo dopo entrambe le prove, per non propagare un'eventuale rottura a tutti i repo che lo referenziano.Il dubbio da sciogliere era se Gitea Actions (runner
act, non GitHub) valuti l'espressione${{ inputs.working-directory }}dentrodefaults.run— la sintassi è corretta su GitHub, ma non è una garanzia qui.Prova 1 — input omesso, retrocompatibilità
PZeta_Touch/pzeta-validation(package.json in root), run #44 → success.Dal log, tutti gli step
run:Il campo
workdirvale.dove nei run precedenti era vuoto: prova chedefaults.run.working-directoryviene applicato e che l'espressione con fallback|| '.'è stata valutata. Un semplice "il job passa" non sarebbe bastato — con valore.undefaultsignorato darebbe lo stesso esito.Prova 2 — input valorizzato
Stesso repo, pacchetto fittizio in
testpkg/con script che stampanoprocess.cwd(), chiamato conworking-directory: testpkg. Run #45 → success:npm ciha risolto il lockfile della sottocartella, e gli stepuses(checkout, setup-node, cache) hanno continuato a operare sulla root, come previsto.Il branch temporaneo di test e il pacchetto fittizio sono stati rimossi;
pzeta-validationè pulito sumain.Stato
v1→dae2a74. Nessuna azione richiesta ai repo esistenti: con l'input omesso il comportamento è identico a prima.pzeta-calendarepzeta-kingrestano per ora con i job Node inlineati — funzionanti e verdi. Possono tornare ai template condivisi passandoworking-directory: typescripteworking-directory: server, quando si preferisce; a quel punto va rimosso il commento di avviso in testa ai loro workflow, che documentava proprio l'assenza di questo input.