1+ param ()
2+
3+ function Write-Log {
4+ param (
5+ [Parameter (Mandatory = $true )]
6+ [string ]$Level ,
7+ [Parameter (Mandatory = $true )]
8+ [string ]$Message
9+ )
10+
11+ if ($Level -eq " ERROR" ) {
12+ Write-Host " ERROR: $Message " - ForegroundColor Red
13+ }
14+ elseif ($Level -eq " SUCCESS" ) {
15+ Write-Host " $Message " - ForegroundColor Green
16+ }
17+ elseif ($Level -eq " INFO" ) {
18+ Write-Host " $Message "
19+ }
20+ }
21+
22+ # Get all pattern files
23+ $patternFiles = @ ()
24+ $patternFiles += Get-ChildItem - Path " regex_patterns" - Filter " *.yml" - File
25+ $patternFiles += Get-ChildItem - Path " regex_patterns" - Filter " *.yaml" - File
26+
27+ if ($patternFiles.Count -eq 0 ) {
28+ Write-Log - Level " ERROR" - Message " No pattern files found in regex_patterns/"
29+ exit 1
30+ }
31+
32+ Write-Log - Level " INFO" - Message " Found $ ( $patternFiles.Count ) pattern files to validate"
33+
34+ # Validate patterns sequentially
35+ $failedPatterns = @ ()
36+ $completed = 0
37+ $totalFiles = $patternFiles.Count
38+ $lastPercentLogged = 0
39+
40+ foreach ($file in $patternFiles ) {
41+ try {
42+ # Read YAML content
43+ $yamlContent = Get-Content - Path $file.FullName - Raw
44+
45+ # Extract pattern field
46+ $patternMatch = [regex ]::Match($yamlContent , ' pattern:\s*(.+)' )
47+ $pattern = $patternMatch.Groups [1 ].Value.Trim()
48+
49+ # Validate the pattern
50+ $regex = New-Object System.Text.RegularExpressions.Regex($pattern )
51+
52+ # Success - no need to log
53+ }
54+ catch {
55+ $failedPatterns += @ {
56+ File = $file.FullName
57+ Error = $_.ToString ()
58+ Pattern = $pattern
59+ }
60+ }
61+
62+ $completed ++
63+
64+ # Log progress every 10%
65+ $percentComplete = [math ]::Floor(($completed / $totalFiles ) * 10 ) * 10
66+ if ($percentComplete -gt $lastPercentLogged ) {
67+ Write-Log - Level " INFO" - Message " $percentComplete % complete ($completed /$totalFiles files)"
68+ $lastPercentLogged = $percentComplete
69+ }
70+ }
71+
72+ # Log errors
73+ foreach ($failure in $failedPatterns ) {
74+ Write-Log - Level " ERROR" - Message " $ ( $failure.File ) : $ ( $failure.Error ) "
75+ if ($Verbose ) {
76+ Write-Log - Level " ERROR" - Message " Pattern was: $ ( $failure.Pattern ) "
77+ }
78+ }
79+
80+ # Summary
81+ if ($failedPatterns.Count -gt 0 ) {
82+ Write-Log - Level " ERROR" - Message " $ ( $failedPatterns.Count ) pattern(s) failed validation"
83+ exit 1
84+ }
85+ else {
86+ Write-Log - Level " SUCCESS" - Message " All $ ( $patternFiles.Count ) patterns validated successfully"
87+ exit 0
88+ }
0 commit comments