Scrivere le note di rilascio è sempre problematico per diversi motivi: se è una persona a doverle calcolare, questa potrebbe dimenticarsi determinate change, se, al contrario, è un sistema automatico, questo potrebbe essere troppo preciso. Come sempre, serve un mix giusto di entrambe le cose, ovvero un sistema automatico che è in grado di estrapolare le informazioni necessarie al recupero delle note di rilascio ed una review manuale per essere sicuri di rendere comprensibili tutti i valori calcolati dal sistema a persone "di business". All'interno di questa mini-serie di script vedremo come realizzare questo sistema.
Diamo per scontato che useremo i tag per determinare le versioni rilasciate. Il primo passaggio che dobbiamo fare è quello di recuperare, quindi, la data di creazione di un tag per capire quando è stata fatta una certa release di prodotto.
Per farlo, ci è sufficiente chiamare le REST API di Azure DevOps tramite uno script di PowerShell integrato in una pipeline YAML, per recuperare tutta la lista di tag disponibili:
$url = "https://dev.azure.com/$(OrganizationName)/$(TeamProject)/_apis/git/repositories/$(Repository)/refs?filter=tags&api-version=6.0-preview.1" $tags = Invoke-RestMethod $url -Method GET -Headers @{Authorization=("Bearer {0}" -f $env:SYSTEM_ACCESSTOKEN)}
Successivamente possiamo quindi filtrare tutti i tag forniti da Azure DevOps per cercare quello relativo al rilascio in corso:
$tag = $tags.value | Where-Object { $_.name -eq "1.0.0" }
Ed infine, grazie all'identificativo del tag corrispondente alla release, recuperare le annotation:
$url = "https://dev.azure.com/$(OrganizationName)/$(TeamProject)/_apis/git/repositories/$(Repository)/annotatedtags/$($tag.objectId)/?api-version=6.0-preview.1" $annotatedTag = Invoke-RestMethod $url -Method GET -Headers @{Authorization=("Bearer {0}" -f $env:SYSTEM_ACCESSTOKEN)}
L'oggetto ritornato sarà un JSON con un payload simile al seguente:
{ "name": "refs/tags/1.0.0", "objectId": "69080710948ac8ba63e44eca2daf0b30f38c428d", "taggedObject": { "objectId": "c60be62ebf0e86b5aa01dbb98657b4b7e5905234", "objectType": "commit" }, "taggedBy": { "name": "Matteo Tumiati", "email": "matteot@aspitalia.com", "date": "2021-02-04T09:00:00" }, "message": "First release", "url": "https://dev.azure.com/fabrikam/c34d5807-1734-4541-ad1c-d16e9ac1faca/_apis/git/repositories/ca93c3a5-87bb-4b5b-a62f-1f971d677c79/annotatedTags/69080710948ac8ba63e44eca2daf0b30f38c428d" }
La data di creazione sarà quindi facilmente recuperabile tramite la sua property date:
return $tag.taggedBy.date
Nei prossimi script continueremo ad approfondire l'argomento e vedremo meglio a quale scopo servono questi tag.
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Gestire errori temporanei in una comunicazione gRPC con ASP.NET Core 6
Creare l'effetto floating label per gli input con Bootstrap 5
Serverless Computing: Taking DevOps to the Next Level
Retry automatico di un task di una pipeline di Azure DevOps
Generare un QR Code da ASP.NET Web API
Performance in .NET 6
Aggiungere temi custom a Blazor
Serializzare e deserializzare un tipo TimeOnly con System.Text.Json
Esecuzione a matrici nei workflow di GitHub Action
Accedere alla console di una Azure Container App
Creare automaticamente una pipeline YAML da una sua definizione in Azure DevOps
Calcolare automaticamente un numero di versione di un repository in una GitHub Action