In uno script precedente (https://www.dopsitalia.com/script/111/Disabilitare-Automaticamente-Workflow-GitHub.aspx) abbiamo visto come sia facile disabilitare automaticamente un workflow esistente. Questo, però, funziona solamente nel momento in cui il workflow è nello stato "Active", altrimenti la CLI di GitHub ci ritornerà un errore perché non abbiamo gestito opportunamente le chiamate. Di fatto, dobbiamo integrare lo script precedente con un po' di check di stato.
Non esiste un modo diretto per verificare che il workflow specifico sia in un attivo o disabilitato, perciò dobbiamo recuperare questa informazione da un'altra API (o comando della CLI):
gh workflow list --repo <org>/<repo-name> --all --json id,state --jq ".[] | select(.id == 1234) | .state"
Con una semplice query di JQ ci siamo estrapolati lo stato a partire dall'elenco completo dei workflow disponibili in un determinato repository. A questo punto, basta salvare questo valore in una variabile e controllare lo stato prima di procedere alla disabilitazione del workflow:
if [[ "$state" == "active" ]]; then
echo "Disabling workflow..."
gh workflow disable 1234 --repo <org>/<repo-name>
else
echo "Workflow 1234 is already disabled. Skipping..."
fi
Per abilitarlo, invece, è sufficiente fare l'operazione contraria.
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Rendere i propri workflow e le GitHub Action utilizzate più sicure
Generare la software bill of material (SBOM) in GitHub
Paginare i risultati con QuickGrid in Blazor
Migliorare la scalabilità delle Azure Function con il Flex Consumption
Disabilitare le run concorrenti di una pipeline di Azure DevOps
Ottimizzare le performance usando Span<T> e il metodo Split
Cancellare una run di un workflow di GitHub
Creare una custom property in GitHub
Rinnovare il token di una GitHub App durante l'esecuzione di un workflow
Eseguire una ricerca avanzata per recuperare le issue di GitHub
Creare un webhook in Azure DevOps
Utilizzare l'espressione if inline in una pipeline di Azure DevOps