Nel corso degli ultimi script abbiamo avviato questa serie per cercare una modalità per recuperare le note di rilascio. In questo episodio, invece, vediamo come mettere insieme i vari pezzi degli script precedenti per creare il vero e proprio report contenente le release note.
Fulcro di questa puntata è il recupero delle pull request. Infatti, lo scopo è quello di recuperare i work item associati ad ogni pull request che è stata completata in un determinato range, dato dai tag che abbiamo messo come requisito iniziale.
function Get-Pull-Requests { Param( [parameter(Mandatory = $true)] [Object]$Tags ) # Elenco dei repository per la quale dobbiamo recuperare le note di rilascio $repos = @("RepoName1", "RepoName2") # Creo un file di markdown impostando la Table Of Contents "[[_TOC_]]" | Out-File -FilePath "Changes.md" # Scorro la lista dei repository per recuperare tutte le Pull Request foreach ($repo in $repos) { # Stampo il nome del repository nel file di markdown "# $repo" | Out-File -FilePath "Changes.md" -Append -Force # Recupero tutte le Pull Request create e completate nel repository $referencedRepository = Get-Repo-By-Name -OrganizationName $(OrganizationName) -repositoryName $repo $url = "https://dev.azure.com/$(OrganizationName)/$(TEAM_PROJECT)/_apis/git/pullrequests?searchCriteria.repositoryId=$($referencedRepository.id)&searchCriteria.includeLinks=true&searchCriteria.status=completed&`$top=1000&api-version=6.0" $pullRequests = Invoke-RestMethod $url -Method GET -Headers @{Authorization=("Bearer {0}" -f $env:SYSTEM_ACCESSTOKEN)} # Scorro tutte le Pull Request foreach ($pullRequest in $pullRequests.value) { # Devo controllare la data di completamento, perchè questa deve essere contenuta nel range dei tag $closedDate = [datetime]::Parse($pullRequest.closedDate) if ($closedDate -lt $Tags.ReleaseVersion.CreationDate -and $closedDate -gt $Tags.PreviousVersion.CreationDate) { } else { Write-Host "##<div class="warning">PR $($pullRequest.pullRequestId) closed on $closedDate, while range goes from $($Tags.PreviousVersion.CreationDate) to $($Tags.ReleaseVersion.CreationDate)." continue } # Recupero i work item associati ad ogni Pull Request Write-Host "Checking PR $($pullRequest.pullRequestId): $($pullRequest.title)..." $url = "https://dev.azure.com/$(OrganizationName)/$(TEAM_PROJECT)/_apis/git/repositories/$repo/pullRequests/$($pullRequest.pullRequestId)/workitems?api-version=6.0" $workItems = Invoke-RestMethod $url -Method GET -Headers @{Authorization=("Bearer {0}" -f $env:SYSTEM_ACCESSTOKEN)} "- $($pullRequest.title)" | Out-File -FilePath "Changes.md" -Append -Force # L'API precedente non fornisce informazioni riguardo al titolo dei work item, ma solo i loro ID # Per questo motivo dobbiamo fare una chiamata per recuperare in batch tutti i dettagli dei work item ritornati $ids = [String]::Join(",", $workItems.value.id) $url = "https://dev.azure.com/$(OrganizationName)/$(TEAM_PROJECT)/_apis/wit/workitems?ids=$ids&api-version=6.0" $workItems = Invoke-RestMethod $url -Method GET -Headers @{Authorization=("Bearer {0}" -f $env:SYSTEM_ACCESSTOKEN)} # Aggiungo i work item nel report in markdown foreach ($workItem in $workItems.value) { " - #$($workItem.id)" | Out-File -FilePath "Changes.md" -Append -Force } } } }
Nello script, come si può notare, abbiamo infatti richiesto in input i tag (latest e previous), quindi selezioniamo un elenco di repository per la quale vogliamo calcolare le note di rilascio. Successivamente inizializziamo un file chiamato Changes.md, un file di markdown dove andiamo a salvare i dati recuperati dalle varie API che chiameremo successivamente. Il primo endpoint da dover chiamare è proprio quello delle pull request, poichè vogliamo recuperare quelle chiuse e che si trovano nel range di date dei tag forniti in input. Recuperate le pull request, ci interessa vedere quali sono i work item associati (dovrebbero essere obbligatori per il massimo della tracciabilità): poichè la REST API di Azure DevOps dedicata alle pull request ci ritornerà solamente gli identificativi dei work item, dovremo poi fare un'altra request verso un altro endpoint per recuperarne tutti i dettagli e quindi stampare i titoli di ciascuno nel file di markdown che abbiamo creato inizialmente.
Possiamo quindi invocare lo script come:
Get-Pull-Requests -OrganizationName $(OrganizationName) -Tags $tags
Nel prossimo episodio vedremo come questo script verrà invocato all'interno della pipeline.
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Miglioramenti nell'accessibilità con Angular CDK
Code scanning e advanced security con Azure DevOps
Eseguire attività basate su eventi con Azure Container Jobs
Evitare la command injection in un workflow di GitHub
Controllare gli accessi IP alle app con Azure Container Apps
Sfruttare lo streaming di una chiamata Http da Blazor
Eseguire una GroupBy per entity in Entity Framework
Gestire liste di tipi semplici con Entity Framework Core
Effettuare il deploy di immagini solo da container registry approvati in Kubernetes
Creare moduli CSS in React
Autenticarsi in modo sicuro su Azure tramite GitHub Actions
Installare le Web App site extension tramite una pipeline di Azure DevOps
I più letti di oggi
- Impostare un elemento come ridimensionabile tramite CSS
- Proteggersi dagli attacchi di Open Redirect in ASP.NET Core MVC
- Personalizzare l'errore del rate limiting middleware in ASP.NET Core
- Accedere alla console di una Azure Container App
- Modificare i metadati nell'head dell'HTML di una Blazor Web App
- Gli oggetti CallOut di Expression Blend 4.0
- SQL Server 2005 December CTP
- Sfruttare le nuove tipologie di input di HTML5 con ASP.NET 4.0
- Upload da una pagina web con Dundas Upload