Lavorando con sistemi che richiedono sempre più automazione, può diventare necessario poter approvare delle pull request su determinate condizioni. Per esempio, potremmo avere a disposizione dei sistemi che aggiornano le dipendenze in stile Dependabot di GitHub: se la pipeline associata come branch policy determina che la solution è ancora in grado di compilare e i test sono tutti passati, allora la si può auto-approvare perchè sappiamo già a priori che sarà inutile richiedere l'intervento di un reviewer specifico.
Non possiamo mettere l'approval al posto di qualche membro del team, ma, almeno in una prima istanza, possiamo fare in modo di impostare l'auto-complete sulla pull request in oggetto. Tutto quello che ci serve è una funzione di PowerShell come quella definita in esempio, e un oggetto di tipo PullRequest (https://docs.microsoft.com/en-us/rest/api/azure/devops/git/pull%20requests/get%20pull%20request%20by%20id?view=azure-devops-rest-6.0#gitpullrequest) da passare in ingresso a cui applicare le impostazioni di auto-complete:
function Set-AutoComplete { Param( [parameter(Mandatory = $true)] [Object] $PullRequest ) # Creo il payload da inviare alla API $body = @{ AutoCompleteSetBy = @{ id = "$($PullRequest.createdBy.id)" } completionOptions = @{ deleteSourceBranch = $True transitionWorkItems = $True } } # Converto il payload in JSON e preparo l'URL per la request $data = ConvertTo-Json $body $url = "https://dev.azure.com/$(Organization)/$(Project)/_apis/git/repositories/$($PullRequest.repository.id)/pullrequests/$($PullRequest.pullRequestId)?api-version=5.1" try { # Effettuo la request verso l'endpoint di Azure DevOps Invoke-RestMethod $url -Method PATCH -Body $data -Headers @{Authorization=("Bearer {0}" -f $env:SYSTEM_ACCESSTOKEN);} -ContentType "application/json" } catch { Write-Host "Couldn't update the state because:" $_.Exception.Message } }
Quello che andiamo ad eseguire con lo script è una specie di auto-approve, a cui manca solo l'intervento manuale (che vedremo in seguito come bypassare). Per ora andiamo ad impostare tra le varie opzioni l'auto cancellazione del branch sorgente e a cambiare lo stato dei work item associati a "Done" (o il primo stato utile, secondo le personalizzazioni fatte in DevOps).
Lo script è scritto in PowerShell, ma poiché non ha dipendenze particolari può anche essere eseguito su agent Linux o macOS tramite PowerShell Core. Dalle pipeline (YAML o classiche), ci basterà invocare il task corrispondente per fare in modo di eseguire lo script di riferimento.
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Creare una custom property in GitHub
Generare un hash con SHA-3 in .NET
Effettuare il refresh dei dati di una QuickGrid di Blazor
Creare alias per tipi generici e tuple in C#
Generare token per autenicarsi sulle API di GitHub
Utilizzare il metodo CountBy di LINQ per semplificare raggruppamenti e i conteggi
Referenziare un @layer più alto in CSS
Eseguire le GitHub Actions offline
Migliorare i tempi di risposta di GPT tramite lo streaming endpoint in ASP.NET Core
Evitare il flickering dei componenti nel prerender di Blazor 8
Eseguire i worklow di GitHub su runner potenziati
Usare lo spread operator con i collection initializer in C#
I più letti di oggi
- Effettuare il log delle chiamate a function di GPT in ASP.NET Web API
- ecco tutte le novità pubblicate sui nostri siti questa settimana: https://aspit.co/wkly buon week-end!
- Utilizzare il metodo CountBy di LINQ per semplificare raggruppamenti e i conteggi
- Creare una libreria CSS universale: Cards
- Eseguire script pre e post esecuzione di un workflow di GitHub