79031da543
Spell checking / Report (Push) (push) Blocked by required conditions
Spell checking / Report (PR) (push) Blocked by required conditions
Spell checking / Check Spelling (push) Has been cancelled
Spell checking / Update PR (push) Has been cancelled
Publish Dev Docs Website / build (push) Failing after 1s
Publish Dev Docs Website / deploy (push) Has been skipped
171 lines
7.1 KiB
PowerShell
171 lines
7.1 KiB
PowerShell
<#
|
|
.SYNOPSIS
|
|
Tests and previews incremental review detection for a pull request.
|
|
|
|
.DESCRIPTION
|
|
This helper script validates the incremental review detection logic by analyzing an existing
|
|
PR review folder. It reads the last reviewed SHA from the overview file, compares it with
|
|
the current PR state, and displays detailed information about what has changed.
|
|
|
|
This is useful for:
|
|
- Testing the incremental review system before running a full review
|
|
- Understanding what changed since the last review iteration
|
|
- Verifying that review metadata was properly recorded
|
|
|
|
.PARAMETER PullRequestNumber
|
|
The pull request number to test incremental review detection for.
|
|
|
|
.PARAMETER RepositoryOwner
|
|
The GitHub repository owner. Defaults to "microsoft".
|
|
|
|
.PARAMETER RepositoryName
|
|
The GitHub repository name. Defaults to "PowerToys".
|
|
|
|
.OUTPUTS
|
|
Colored console output displaying:
|
|
- Current and last reviewed commit SHAs
|
|
- Whether incremental review is possible
|
|
- List of new commits since last review
|
|
- List of changed files with status indicators
|
|
- Recommended review strategy
|
|
|
|
.EXAMPLE
|
|
.\Test-IncrementalReview.ps1 -PullRequestNumber 42374
|
|
Tests incremental review detection for PR #42374.
|
|
|
|
.EXAMPLE
|
|
.\Test-IncrementalReview.ps1 -PullRequestNumber 42374 -RepositoryOwner "myorg" -RepositoryName "myrepo"
|
|
Tests incremental review for a PR in a different repository.
|
|
|
|
.NOTES
|
|
Requires GitHub CLI (gh) to be installed and authenticated.
|
|
Run 'gh auth login' if not already authenticated.
|
|
|
|
Prerequisites:
|
|
- PR review folder must exist at "Generated Files\prReview\{PRNumber}"
|
|
- 00-OVERVIEW.md must exist in the review folder
|
|
- For incremental detection, overview must contain "Last reviewed SHA" metadata
|
|
|
|
.LINK
|
|
https://cli.github.com/
|
|
#>
|
|
|
|
[CmdletBinding()]
|
|
param(
|
|
[Parameter(Mandatory = $true, HelpMessage = "Pull request number to test")]
|
|
[int]$PullRequestNumber,
|
|
|
|
[Parameter(Mandatory = $false, HelpMessage = "Repository owner")]
|
|
[string]$RepositoryOwner = "microsoft",
|
|
|
|
[Parameter(Mandatory = $false, HelpMessage = "Repository name")]
|
|
[string]$RepositoryName = "PowerToys"
|
|
)
|
|
|
|
# Resolve paths to review folder and overview file
|
|
$repositoryRoot = Split-Path (Split-Path $PSScriptRoot -Parent) -Parent
|
|
$reviewFolderPath = Join-Path $repositoryRoot "Generated Files\prReview\$PullRequestNumber"
|
|
$overviewFilePath = Join-Path $reviewFolderPath "00-OVERVIEW.md"
|
|
|
|
Write-Host "=== Testing Incremental Review for PR #$PullRequestNumber ===" -ForegroundColor Cyan
|
|
Write-Host ""
|
|
|
|
# Check if review folder exists
|
|
if (-not (Test-Path $reviewFolderPath)) {
|
|
Write-Host "❌ Review folder not found: $reviewFolderPath" -ForegroundColor Red
|
|
Write-Host "This appears to be a new review (iteration 1)" -ForegroundColor Yellow
|
|
exit 0
|
|
}
|
|
|
|
# Check if overview file exists
|
|
if (-not (Test-Path $overviewFilePath)) {
|
|
Write-Host "❌ Overview file not found: $overviewFilePath" -ForegroundColor Red
|
|
Write-Host "This appears to be an incomplete review" -ForegroundColor Yellow
|
|
exit 0
|
|
}
|
|
|
|
# Read overview file and extract last reviewed SHA
|
|
Write-Host "📄 Reading overview file..." -ForegroundColor Green
|
|
$overviewFileContent = Get-Content $overviewFilePath -Raw
|
|
|
|
if ($overviewFileContent -match '\*\*Last reviewed SHA:\*\*\s+(\w+)') {
|
|
$lastReviewedSha = $Matches[1]
|
|
Write-Host "✅ Found last reviewed SHA: $lastReviewedSha" -ForegroundColor Green
|
|
} else {
|
|
Write-Host "⚠️ No 'Last reviewed SHA' found in overview - this may be an old format" -ForegroundColor Yellow
|
|
Write-Host "Proceeding without incremental detection (full review will be needed)" -ForegroundColor Yellow
|
|
exit 0
|
|
}
|
|
|
|
Write-Host ""
|
|
Write-Host "🔍 Running incremental change detection..." -ForegroundColor Cyan
|
|
|
|
# Call the incremental changes detection script
|
|
$incrementalChangesScriptPath = Join-Path $PSScriptRoot "Get-PrIncrementalChanges.ps1"
|
|
if (-not (Test-Path $incrementalChangesScriptPath)) {
|
|
Write-Host "❌ Script not found: $incrementalChangesScriptPath" -ForegroundColor Red
|
|
exit 1
|
|
}
|
|
|
|
try {
|
|
$analysisResult = & $incrementalChangesScriptPath `
|
|
-PullRequestNumber $PullRequestNumber `
|
|
-LastReviewedCommitSha $lastReviewedSha `
|
|
-RepositoryOwner $RepositoryOwner `
|
|
-RepositoryName $RepositoryName | ConvertFrom-Json
|
|
|
|
# Display analysis results
|
|
Write-Host ""
|
|
Write-Host "=== Incremental Review Analysis ===" -ForegroundColor Cyan
|
|
Write-Host "Current HEAD SHA: $($analysisResult.CurrentHeadSha)" -ForegroundColor White
|
|
Write-Host "Last reviewed SHA: $($analysisResult.LastReviewedSha)" -ForegroundColor White
|
|
Write-Host "Base branch: $($analysisResult.BaseRefName)" -ForegroundColor White
|
|
Write-Host "Head branch: $($analysisResult.HeadRefName)" -ForegroundColor White
|
|
Write-Host ""
|
|
Write-Host "Is incremental? $($analysisResult.IsIncremental)" -ForegroundColor $(if ($analysisResult.IsIncremental) { "Green" } else { "Yellow" })
|
|
Write-Host "Need full review? $($analysisResult.NeedFullReview)" -ForegroundColor $(if ($analysisResult.NeedFullReview) { "Yellow" } else { "Green" })
|
|
Write-Host ""
|
|
Write-Host "Summary: $($analysisResult.Summary)" -ForegroundColor Cyan
|
|
Write-Host ""
|
|
|
|
# Display new commits if any
|
|
if ($analysisResult.NewCommits -and $analysisResult.NewCommits.Count -gt 0) {
|
|
Write-Host "📝 New commits ($($analysisResult.NewCommits.Count)):" -ForegroundColor Green
|
|
foreach ($commit in $analysisResult.NewCommits) {
|
|
Write-Host " - $($commit.Sha): $($commit.Message)" -ForegroundColor Gray
|
|
}
|
|
Write-Host ""
|
|
}
|
|
|
|
# Display changed files if any
|
|
if ($analysisResult.ChangedFiles -and $analysisResult.ChangedFiles.Count -gt 0) {
|
|
Write-Host "📁 Changed files ($($analysisResult.ChangedFiles.Count)):" -ForegroundColor Green
|
|
foreach ($file in $analysisResult.ChangedFiles) {
|
|
$statusDisplayColor = switch ($file.Status) {
|
|
"added" { "Green" }
|
|
"removed" { "Red" }
|
|
"modified" { "Yellow" }
|
|
"renamed" { "Cyan" }
|
|
default { "White" }
|
|
}
|
|
Write-Host " - [$($file.Status)] $($file.Filename) (+$($file.Additions)/-$($file.Deletions))" -ForegroundColor $statusDisplayColor
|
|
}
|
|
Write-Host ""
|
|
}
|
|
|
|
# Suggest review strategy based on analysis
|
|
Write-Host "=== Recommended Review Strategy ===" -ForegroundColor Cyan
|
|
if ($analysisResult.NeedFullReview) {
|
|
Write-Host "🔄 Full review recommended" -ForegroundColor Yellow
|
|
} elseif ($analysisResult.IsIncremental -and ($analysisResult.ChangedFiles.Count -eq 0)) {
|
|
Write-Host "✅ No changes detected - no review needed" -ForegroundColor Green
|
|
} elseif ($analysisResult.IsIncremental) {
|
|
Write-Host "⚡ Incremental review possible - review only changed files" -ForegroundColor Green
|
|
Write-Host "💡 Consider applying smart step filtering based on file types" -ForegroundColor Cyan
|
|
}
|
|
|
|
} catch {
|
|
Write-Host "❌ Error running incremental change detection: $_" -ForegroundColor Red
|
|
exit 1
|
|
}
|