# ============================================================================= # WEBMoney - Validador de Directrices (v3.0) # ============================================================================= # Este modulo es importado por todos los scripts para garantizar compliance # ============================================================================= $Script:ProjectRoot = "c:\Users\marco\OneDrive\Documents\WebMoney" $Script:Server = "root@213.165.93.60" $Script:ProductionUrl = "https://webmoney.cnxifly.com" # Cargar directrices function Get-Diretrizes { $diretrizesFile = Join-Path $Script:ProjectRoot ".DIRETRIZES_DESENVOLVIMENTO_v3" if (-not (Test-Path $diretrizesFile)) { throw "ERRO FATAL: Arquivo de diretrizes nao encontrado!" } return Get-Content $diretrizesFile -Raw } # Validar que no hay cambios sin commit (Regra #6) function Assert-NoUncommittedChanges { Push-Location $Script:ProjectRoot $status = git status --porcelain 2>$null Pop-Location if ($status) { $count = @($status | Where-Object { $_ }).Count return @{ Valid = $false Message = "Existem $count arquivos modificados sem commit" Files = $status } } return @{ Valid = $true } } # Validar VERSION existe e esta correto function Assert-VersionFile { $versionFile = Join-Path $Script:ProjectRoot "VERSION" if (-not (Test-Path $versionFile)) { return @{ Valid = $false; Message = "Arquivo VERSION nao encontrado" } } $version = (Get-Content $versionFile).Trim() if ($version -notmatch '^\d+\.\d+\.\d+$') { return @{ Valid = $false; Message = "VERSION invalido: $version (deve ser X.Y.Z)" } } return @{ Valid = $true; Version = $version } } # Validar CHANGELOG tem entrada para versao atual function Assert-ChangelogUpdated { param([string]$Version) $changelogFile = Join-Path $Script:ProjectRoot "CHANGELOG.md" if (-not (Test-Path $changelogFile)) { return @{ Valid = $false; Message = "Arquivo CHANGELOG.md nao encontrado" } } $content = Get-Content $changelogFile -Raw if ($content -notmatch "\[$Version\]") { return @{ Valid = $false; Message = "CHANGELOG nao contem entrada para versao $Version" } } return @{ Valid = $true } } # Validar conexao SSH com servidor function Assert-ServerConnection { $result = ssh -o ConnectTimeout=5 -o BatchMode=yes $Script:Server "echo OK" 2>$null if ($result -ne "OK") { return @{ Valid = $false Message = "Nao foi possivel conectar ao servidor. Execute: .\scripts\setup-ssh.ps1" } } return @{ Valid = $true } } # Validar que producao esta acessivel function Assert-ProductionAccessible { try { $response = Invoke-WebRequest -Uri $Script:ProductionUrl -TimeoutSec 10 -UseBasicParsing if ($response.StatusCode -eq 200) { return @{ Valid = $true } } } catch {} return @{ Valid = $false Message = "Producao nao acessivel em $Script:ProductionUrl" } } # Incrementar versao semantica function Get-NextVersion { param( [string]$Current, [ValidateSet('patch', 'minor', 'major')] [string]$Type ) $parts = $Current.Split('.') $major = [int]$parts[0] $minor = [int]$parts[1] $patch = [int]$parts[2] switch ($Type) { 'major' { $major++; $minor = 0; $patch = 0 } 'minor' { $minor++; $patch = 0 } 'patch' { $patch++ } } return "$major.$minor.$patch" } # Atualizar arquivo VERSION function Update-VersionFile { param([string]$NewVersion) $versionFile = Join-Path $Script:ProjectRoot "VERSION" Set-Content -Path $versionFile -Value $NewVersion -NoNewline } # Atualizar CHANGELOG function Update-Changelog { param( [string]$Version, [ValidateSet('Added', 'Changed', 'Fixed', 'Removed', 'Security')] [string]$ChangeType, [string]$Description ) $changelogFile = Join-Path $Script:ProjectRoot "CHANGELOG.md" $date = Get-Date -Format "yyyy-MM-dd" $content = Get-Content $changelogFile -Raw # Encontrar posicao para inserir $insertPos = $content.IndexOf("`n## [") if ($insertPos -eq -1) { $insertPos = $content.IndexOf("---") + 4 } $newEntry = @" ## [$Version] - $date ### $ChangeType - $Description "@ $newContent = $content.Insert($insertPos, $newEntry) Set-Content -Path $changelogFile -Value $newContent -NoNewline } # Mostrar regras das directrizes function Show-DiretrizesReminder { Write-Host "" Write-Host " DIRETRIZES v3.0 - REGRAS OBRIGATORIAS:" -ForegroundColor Yellow Write-Host " ----------------------------------------" -ForegroundColor Yellow Write-Host " 1. VERSION incrementado em cada commit" -ForegroundColor Gray Write-Host " 2. CHANGELOG atualizado em cada commit" -ForegroundColor Gray Write-Host " 3. Deploy via scripts (NUNCA manual)" -ForegroundColor Gray Write-Host " 4. Teste em producao OBRIGATORIO" -ForegroundColor Gray Write-Host " 5. Commit somente apos teste OK" -ForegroundColor Gray Write-Host "" } # Exportar funcoes Export-ModuleMember -Function *