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
Eseguire query per recuperare il padre di un record che sfrutta il tipo HierarchyID in Entity Framework
Eseguire query manipolando liste di tipi semplici con Entity Framework Core
Utilizzare EF.Constant per evitare la parametrizzazione di query SQL
Utilizzare Azure AI Studio per testare i modelli AI
Creare una libreria CSS universale: i bottoni
Disabilitare automaticamente un workflow di GitHub (parte 2)
Eseguire query verso tipi non mappati in Entity Framework Core
Creare gruppi di client per Event Grid MQTT
Eseguire le GitHub Actions offline
Supportare lo HierarchyID di Sql Server in Entity Framework 8
Creare un'applicazione React e configurare Tailwind CSS
Triggerare una pipeline su un altro repository di Azure DevOps