Files
powershell-scripts/ApiGit/Misc/CheckGitlabProtectedBranches.ps1
2026-01-13 10:58:05 +01:00

100 lines
4.5 KiB
PowerShell

###Gitlab: controllo i branch protetti (e eventualmente toglie la protezione) dai gitlab nembro e azzano###
#Questo script passa in rassegna tutti i progetti esistenti sui gitlab satellite nembro e azzano per verificare la presenza di branch protetti che potrebbero impedire il corretto funzionamento dei mirror verso tali repo. Se necessario questo script può anche rimuovere la protezione da tali branch.
#importo file contenente configurazioni
. .\ApiGit\ApiGitResources\ApiScriptsConfig.ps1
#importo file contenente funzioni
. .\ApiGit\ApiGitResources\ApiScriptsFunctions.ps1
#rilevo time per log inizio analisi
$startTime = (Get-Date).toString("yyyy/MM/dd HH:mm:ss")
# avvio stopwatch
$mainStopWatch = [system.diagnostics.stopwatch]::StartNew()
#contatore ciclo do while
$startProj = 1
#numero massimo di progetti da analizzare
$endProj = 300
#conteggio progetti trovati
$existingProjects = 0
#conteggio progetti trovati
$protectedProjects = 0
#abilita o disabilita la cancellazione della protezione (1=cancella, 0=toca negot)
$deleteProtection = 1
#nome file di log
$logFile = "GitlabProtectedBranches.log"
#nome file old log
$oldLogFile = "GitlabProtectedBranches.old"
#creazione folder di Log se non già esistente
CheckLogFolder
#rotazione vecchio logFile da .log a .old se esiste
RotateOldLog
#scrivo intestazione e inizio analisi
WriteLogOutput $logFile 0 "--------------------"
Switch ($logLevel) {
0 { WriteLogOutput $logFile 0 "LOG SINTETICO GITLAB PROTECTED_BRANCHES" }
1 { WriteLogOutput $logFile 0 "LOG ERRORI GITLAB PROTECTED_BRANCHES" }
2 { WriteLogOutput $logFile 0 "LOG FULL GITLAB PROTECTED_BRANCHES" }
3 { WriteLogOutput $logFile 0 "LOG AMPOLLOSO PROTECTED_BRANCHES" }
}
WriteLogOutput $logFile 0 ""
WriteLogOutput $logFile 0 "Percorso log: $logFolder"
WriteLogOutput $logFile 0 ""
WriteLogOutput $logFile 0 "Inizio Esecuzione Script: $startTime"
$gitlabIstance = $destinationAzzano
$head = $azzanoHead
#ciclo principale for che cicla da startProj a endProj
for ($projectCount = $startProj; $projectCount -le $endProj; $projectCount++) {
#chiamata api che restituisce informazioni sullo stato dei mirror
$callUrl = "https://" + $gitlabIstance + "/api/v4/projects/" + $projectCount + "/protected_branches"
try {
#parsing della risposta api convertita da json
$Response = Invoke-WebRequest -URI $callUrl -Headers $head -ContentType "application/json" -UseBasicParsing
$parsedResponse = $Response.Content | ConvertFrom-Json
#scrivo il numero del progetto
WriteLogOutput $logFile 1 ""
WriteLogOutput $logFile 1 "--------------------"
WriteLogOutput $logFile 1 "**PROGETTO $projectCount $gitlabIstance**"
foreach ($item in $parsedResponse) {
WriteLogOutput $logFile 1 "Protected Branch Name: $($item.name) - Allow Force Push: $($item.allow_force_push)"
$protectedProjects = $protectedProjects + 1
if ($deleteProtection -eq 1) {
#nuovo URL x delete
$callUrlDelete = "https://" + $gitlabIstance + "/api/v4/projects/" + $projectCount + "/protected_branches/" + $item.name
#chiamo method DELETE
Invoke-WebRequest -Method Delete -URI $callUrlDelete -Headers $head -ContentType "application/json" -UseBasicParsing
}
}
$existingProjects = $existingProjects + 1
}
#scrivo se trovo un errore durante il try/catch
catch {
$parsedError = $_ | ConvertFrom-Json
WriteLogOutput $logFile 3 ""
WriteLogOutput $logFile 3 "--------------------"
WriteLogOutput $logFile 3 "**ERRORE NEL PROGETTO $projectCount**"
WriteLogOutput $logFile 3 $($parsedError.message)
}
#fine ciclo dei progetti
}
# fermo stopwatch e calcolo durata script
$mainStopWatch.Stop()
$durataScript = $mainStopWatch.Elapsed.TotalSeconds
#rilevo time per log fine analisi
$endTime = (Get-Date).toString("yyyy/MM/dd HH:mm:ss")
#scrivo a video le statistiche
WriteLogOutput $logFile 0 ""
WriteLogOutput $logFile 0 "PROGETTI ANALIZZATI: $existingProjects"
WriteLogOutput $logFile 0 ""
WriteLogOutput $logFile 0 "PROGETTI CON BRANCH PROTETTI: $protectedProjects"
WriteLogOutput $logFile 0 ""
WriteLogOutput $logFile 0 "Fine Esecuzione Script: $endTime"
WriteLogOutput $logFile 0 ""
WriteLogOutput $logFile 0 "Durata Esecuzione Script: $durataScript secondi"
WriteLogOutput $logFile 0 ""