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
C# 12: Cosa c'è di nuovo e interessante
Utilizzare il trigger SQL con le Azure Function
Ottimizzare le performance delle collection con le classi FrozenSet e FrozenDictionary
Usare lo spread operator con i collection initializer in C#
Migrare una service connection a workload identity federation in Azure DevOps
Gestire la cancellazione di una richiesta in streaming da Blazor
Accesso sicuro ai secrets attraverso i file in Azure Container Apps
Miglioramenti nell'accessibilità con Angular CDK
Potenziare Azure AI Search con la ricerca vettoriale
Supportare il sorting di dati tabellari in Blazor con QuickGrid
Eseguire query verso tipi non mappati in Entity Framework Core
Creare un webhook in Azure DevOps
I più letti di oggi
- Ottimizzare le performance delle collection con le classi FrozenSet e FrozenDictionary
- Estrarre dati randomici da una lista di oggetti in C#
- Utilizzare un DataContext specifico per la modalità design time di Blend e Visual Studio nei controlli Silverlight
- Configurare il nome della run di un workflow di GitHub in base al contesto di esecuzione
- Effettuare il multi-checkout in linea nelle pipeline di Azure DevOps