<# .SYNOPSIS Zieht pom.xml und package.json der Kern-Services fuer Versionsanalyse #> $GitLabUrl = "https://git.tech.rz.db.de" $ApiBase = "$GitLabUrl/api/v4" $OutputDir = "project-audit\data\pom-analysis" [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12 $Token = Read-Host "GitLab Token (read_api)" $Headers = @{ "PRIVATE-TOKEN" = $Token } # Kern-Services (apps/ + libraries/ + ausgewaehlte apis/) $Projects = @( @{ path = "bestellsystem1/apps/steuerung-vertrieb"; name = "steuerung-vertrieb" } @{ path = "bestellsystem1/apps/auftrags-verwaltung-trasse"; name = "auftrags-verwaltung-trasse" } @{ path = "bestellsystem1/apps/portal-middleware"; name = "portal-middleware" } @{ path = "bestellsystem1/apps/portal-ui"; name = "portal-ui" } @{ path = "bestellsystem1/apps/common-interface"; name = "common-interface" } @{ path = "bestellsystem1/apps/stammdaten-bereitstellung"; name = "stammdaten-bereitstellung" } @{ path = "bestellsystem1/apps/kundendaten-bereitstellung"; name = "kundendaten-bereitstellung" } @{ path = "bestellsystem1/apps/ifp-connector"; name = "ifp-connector" } @{ path = "bestellsystem1/apps/taftap-tdm-konverter"; name = "taftap-tdm-konverter" } @{ path = "bestellsystem1/apps/vertragsdaten-verteiler"; name = "vertragsdaten-verteiler" } @{ path = "bestellsystem1/apps/archivierungsservice"; name = "archivierungsservice" } @{ path = "bestellsystem1/apps/rabattnummern-bereitstellung"; name = "rabattnummern-bereitstellung" } @{ path = "bestellsystem1/apps/tbv-absicherung-konverter"; name = "tbv-absicherung-konverter" } @{ path = "bestellsystem1/apps/tadef-connector"; name = "tadef-connector" } @{ path = "bestellsystem1/apps/auftrag-service"; name = "auftrag-service" } @{ path = "bestellsystem1/apps/bestellsystem-parent-pom"; name = "bestellsystem-parent-pom" } @{ path = "bestellsystem1/libraries/core-components-common"; name = "core-components-common" } @{ path = "bestellsystem1/libraries/core-components-kafka"; name = "core-components-kafka" } @{ path = "bestellsystem1/libraries/core-components-test"; name = "core-components-test" } @{ path = "bestellsystem1/libraries/logging-utils"; name = "logging-utils" } @{ path = "bestellsystem1/libraries/signature-database"; name = "signature-database" } @{ path = "bestellsystem1/libraries/signature-message"; name = "signature-message" } @{ path = "bestellsystem1/apis/data-model"; name = "data-model-api" } ) New-Item -ItemType Directory -Path $OutputDir -Force | Out-Null Write-Host "Lade pom.xml / package.json fuer $($Projects.Count) Projekte..." foreach ($Proj in $Projects) { $Encoded = [Uri]::EscapeDataString($Proj.path) $Name = $Proj.name Write-Host " $Name..." -NoNewline # pom.xml versuchen (main, dann master) $Found = $false foreach ($Branch in @("main", "master")) { foreach ($File in @("pom.xml", "package.json")) { $Uri = "$ApiBase/projects/$Encoded/repository/files/$([Uri]::EscapeDataString($File))/raw?ref=$Branch" try { $Resp = Invoke-WebRequest -Uri $Uri -Headers $Headers -UseBasicParsing -ErrorAction Stop $OutPath = Join-Path $OutputDir "$Name`_$File" $Resp.Content | Out-File -FilePath $OutPath -Encoding UTF8 Write-Host " $File ($Branch)" -ForegroundColor Green $Found = $true break } catch { continue } } if ($Found) { break } } if (-not $Found) { Write-Host " nicht gefunden" -ForegroundColor Yellow } } # Analyse: Spring Boot + Java Versionen extrahieren Write-Host "" Write-Host ">> Analysiere Versionen..." -ForegroundColor Yellow $Results = @() $PomFiles = Get-ChildItem $OutputDir -Filter "*_pom.xml" foreach ($Pom in $PomFiles) { $Name = $Pom.Name -replace "_pom.xml", "" $Content = Get-Content $Pom.FullName -Raw $SpringBoot = "" $Java = "" $Parent = "" $Camunda = "" # Spring Boot Version if ($Content -match "spring-boot-starter-parent.*?(.*?)") { $SpringBoot = $Matches[1] } if ($Content -match "spring\.boot\.version.*?>(.*?)<") { $SpringBoot = $Matches[1] } if ($Content -match "spring-boot\.version.*?>(.*?)<") { $SpringBoot = $Matches[1] } # Java Version if ($Content -match "(.*?)") { $Java = $Matches[1] } if ($Content -match "(.*?)") { $Java = $Matches[1] } # Parent POM if ($Content -match ".*?(.*?).*?(.*?).*?") { $Parent = "$($Matches[1]):$($Matches[2])" } # Camunda if ($Content -match "camunda.*?(.*?)") { $Camunda = $Matches[1] } $Results += [PSCustomObject]@{ Service = $Name SpringBoot = $SpringBoot Java = $Java Parent = $Parent Camunda = $Camunda } } # Package.json analysieren $PkgFiles = Get-ChildItem $OutputDir -Filter "*_package.json" foreach ($Pkg in $PkgFiles) { $Name = $Pkg.Name -replace "_package.json", "" $Content = Get-Content $Pkg.FullName -Raw | ConvertFrom-Json $Angular = "" if ($Content.dependencies -and $Content.dependencies.'@angular/core') { $Angular = $Content.dependencies.'@angular/core' } $Results += [PSCustomObject]@{ Service = $Name SpringBoot = "" Java = "" Parent = "" Camunda = "" Angular = $Angular NodeVersion = if ($Content.engines -and $Content.engines.node) { $Content.engines.node } else { "" } } } # Ergebnis speichern $ResultPath = Join-Path $OutputDir "version-analysis.md" $Md = @("# Versionsanalyse pathOS Kern-Services", "", "| Service | Spring Boot | Java | Parent POM | Camunda |") $Md += "|---------|------------|------|------------|---------|" foreach ($R in $Results) { $Md += "| $($R.Service) | $($R.SpringBoot) | $($R.Java) | $($R.Parent) | $($R.Camunda) |" } $Md -join "`n" | Out-File -FilePath $ResultPath -Encoding UTF8 $Results | Export-Csv -Path (Join-Path $OutputDir "version-analysis.csv") -Delimiter ";" -Encoding UTF8 -NoTypeInformation Write-Host "" Write-Host "FERTIG! Ergebnisse in $OutputDir" -ForegroundColor Green $Results | Format-Table -AutoSize