Talvolta potrebbe tornarci comodo poter fermare l'esecuzione di un workflow sotto determinate condizioni. Immedesimandoci in un caso reale, potremmo voler far fermare una esecuzione automatica di un progetto .NET Core quando la soglia minima della code coverage non è stata raggiunta.
Nel workflow avremo sicuramente un primo passaggio in cui dobbiamo eseguire i test e calcolare la code coverage:
- name: Test run: dotnet test my.csproj --collect:"XPlat Code Coverage"
L'output generato sarà in un file (per esempio XML) che sarà di un formato simile al seguente (poichè dipende da XUnit, JUnit o altri).
<?xml version="1.0" encoding="utf-8"?> <coverage line-rate="0.85999999999" timestamp="1669831733" ...> ... </coverage>
Non possiamo sempre far fermare la pipeline nel primo passaggio, perchè magari siamo in un runner basato su Ubuntu per cui non abbiamo accesso diretto ad MSBuild per usare il parametro /p:Threshold=90, quindi dobbiamo scrivere del codice custom.
- name: Get Line Rate id: get_line_rate shell: pwsh run: | [xml]$file = Get-Content -Path "./coverage.xml" $lineRate = $file.coverage.'line-rate' Write-Output "::set-output name=lineRate::$lineRate"
- name: Check coverage threshold if: ${{ steps.get_line_rate.outputs.lineRate < 0.9 }} uses: actions/github-script@v6 with: script: core.setFailed('Coverage test below tolerance')
Nel primo passaggio, dato il file di code coverage generato precedentemente, andiamo solo a fare un parsing con PowerShell e a recuperare il valore effettivo della code coverage e, quindi, lo salviamo in una variabile di output. Nel secondo step, invece, andiamo a leggere quel valore di output e lo confrontiamo con la soglia: se questo è maggiore (o uguale), allora il workflow continuerà la sua esecuzione, altrimenti eseguirà il task che prevede la failure, indicando anche nei log il messaggio di errore.

Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Autenticazione di git tramite Microsoft Entra ID in Azure DevOps
Ottimizzare le performance usando Span<T> e il metodo Split
Eseguire script pre e post esecuzione di un workflow di GitHub
Ottimizzare le pull con Artifact Cache di Azure Container Registry
Managed deployment strategy in Azure DevOps
Utilizzare WebJobs su Linux con Azure App Service
Change tracking e composition in Entity Framework
Rendere le variabili read-only in una pipeline di Azure DevOps
Creare una libreria CSS universale: Cards
Effettuare il log delle chiamate a function di GPT in ASP.NET Web API
Utilizzare l'espressione if inline in una pipeline di Azure DevOps
I più letti di oggi
- Sfruttare i nuovi overload di TimeSpan.From* per creare timespan usando numeri interi
- Documentare i servizi REST con Swagger e OpenAPI con .NET 9
- Inviare i comandi SQL generati da Entity Framework alla console di Visual Studio
- ecco tutte le novità pubblicate sui nostri siti questa settimana: https://aspit.co/wkly buon week-end!
- Gestione CSS in Blazor con .NET 9
- ecco tutte le novità pubblicate sui nostri siti questa settimana: https://aspit.co/wkly buon week-end!