From 492dbe8530b9680ba154a3d6bc9c9334c40cc399 Mon Sep 17 00:00:00 2001 From: Sam Chau Date: Wed, 27 Aug 2025 05:17:39 +0930 Subject: [PATCH] ci(validation): speed up validation, only print logs --- .github/workflows/regex.yml | 22 ++------- scripts/validateAllPatterns.ps1 | 88 +++++++++++++++++++++++++++++++++ 2 files changed, 91 insertions(+), 19 deletions(-) create mode 100644 scripts/validateAllPatterns.ps1 diff --git a/.github/workflows/regex.yml b/.github/workflows/regex.yml index 775da46..93fd6a7 100644 --- a/.github/workflows/regex.yml +++ b/.github/workflows/regex.yml @@ -26,26 +26,10 @@ jobs: sudo apt-get update sudo apt-get install -y powershell - - name: Validate All Patterns - run: | - failed=0 - for file in regex_patterns/*.yml regex_patterns/*.yaml; do - if [ -f "$file" ]; then - echo "Validating: $file" - if ! pwsh scripts/validatePattern.ps1 -YamlFilePath "$file"; then - failed=$((failed + 1)) - fi - fi - done + - name: validate + run: pwsh scripts/validateAllPatterns.ps1 - if [ $failed -gt 0 ]; then - echo "❌ $failed pattern(s) failed validation" - exit 1 - else - echo "✅ All patterns validated successfully" - fi - - - name: Run Unit Tests + - name: test run: | echo "TODO: Implement unit tests for all patterns" # TODO: Add test runner command here diff --git a/scripts/validateAllPatterns.ps1 b/scripts/validateAllPatterns.ps1 new file mode 100644 index 0000000..8417189 --- /dev/null +++ b/scripts/validateAllPatterns.ps1 @@ -0,0 +1,88 @@ +param() + +function Write-Log { + param( + [Parameter(Mandatory=$true)] + [string]$Level, + [Parameter(Mandatory=$true)] + [string]$Message + ) + + if ($Level -eq "ERROR") { + Write-Host "ERROR: $Message" -ForegroundColor Red + } + elseif ($Level -eq "SUCCESS") { + Write-Host "$Message" -ForegroundColor Green + } + elseif ($Level -eq "INFO") { + Write-Host "$Message" + } +} + +# Get all pattern files +$patternFiles = @() +$patternFiles += Get-ChildItem -Path "regex_patterns" -Filter "*.yml" -File +$patternFiles += Get-ChildItem -Path "regex_patterns" -Filter "*.yaml" -File + +if ($patternFiles.Count -eq 0) { + Write-Log -Level "ERROR" -Message "No pattern files found in regex_patterns/" + exit 1 +} + +Write-Log -Level "INFO" -Message "Found $($patternFiles.Count) pattern files to validate" + +# Validate patterns sequentially +$failedPatterns = @() +$completed = 0 +$totalFiles = $patternFiles.Count +$lastPercentLogged = 0 + +foreach ($file in $patternFiles) { + try { + # Read YAML content + $yamlContent = Get-Content -Path $file.FullName -Raw + + # Extract pattern field + $patternMatch = [regex]::Match($yamlContent, 'pattern:\s*(.+)') + $pattern = $patternMatch.Groups[1].Value.Trim() + + # Validate the pattern + $regex = New-Object System.Text.RegularExpressions.Regex($pattern) + + # Success - no need to log + } + catch { + $failedPatterns += @{ + File = $file.FullName + Error = $_.ToString() + Pattern = $pattern + } + } + + $completed++ + + # Log progress every 10% + $percentComplete = [math]::Floor(($completed / $totalFiles) * 10) * 10 + if ($percentComplete -gt $lastPercentLogged) { + Write-Log -Level "INFO" -Message "$percentComplete% complete ($completed/$totalFiles files)" + $lastPercentLogged = $percentComplete + } +} + +# Log errors +foreach ($failure in $failedPatterns) { + Write-Log -Level "ERROR" -Message "$($failure.File): $($failure.Error)" + if ($Verbose) { + Write-Log -Level "ERROR" -Message "Pattern was: $($failure.Pattern)" + } +} + +# Summary +if ($failedPatterns.Count -gt 0) { + Write-Log -Level "ERROR" -Message "$($failedPatterns.Count) pattern(s) failed validation" + exit 1 +} +else { + Write-Log -Level "SUCCESS" -Message "All $($patternFiles.Count) patterns validated successfully" + exit 0 +} \ No newline at end of file