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
Mascherare l'output di un valore all'interno dei log di un workflow di GitHub
Creare gruppi di client per Event Grid MQTT
Disabilitare automaticamente un workflow di GitHub (parte 2)
Semplificare il deployment di siti statici con Azure Static Web App
Sfruttare al massimo i topic space di Event Grid MQTT
Filtrare e rimuovere gli elementi dalla cache del browser tramite le API JavaScript
Reactive form tipizzati con modellazione del FormBuilder in Angular
Sfruttare i KeyedService in un'applicazione Blazor in .NET 8
Creare un webhook in Azure DevOps
Utilizzare l'operatore GroupBy come ultima istruzione di una query LINQ in Entity Framework
Code scanning e advanced security con Azure DevOps
Autenticarsi in modo sicuro su Azure tramite GitHub Actions
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
- Effettuare il multi-checkout in linea nelle pipeline di Azure DevOps
- Configurare il nome della run di un workflow di GitHub in base al contesto di esecuzione