75 строки
3.0 KiB
YAML
75 строки
3.0 KiB
YAML
jobs:
|
|
- job: evaluate_changes
|
|
displayName: 'Check for Doc Only Changes'
|
|
pool:
|
|
vmImage: 'ubuntu-latest'
|
|
steps:
|
|
- powershell: |
|
|
# Determine the context of the build (PR or push) and set the target branch accordingly
|
|
$isPR = "$(Build.Reason)" -eq "PullRequest"
|
|
|
|
# Normalize the target branch name for PR builds or default to 'master' for push builds
|
|
$targetBranchName = $isPR ? "$(System.PullRequest.TargetBranch)" -replace 'refs/heads/', '' : "master"
|
|
Write-Host "Build context determined: $(if ($isPR) { 'Pull Request targeting ' + $targetBranchName } else { 'Push' })"
|
|
|
|
# Fetch the target or default base branch and determine the merge base
|
|
git fetch origin $targetBranchName
|
|
$mergeBase = git merge-base HEAD "origin/$targetBranchName"
|
|
Write-Host "Merge base with '$targetBranchName' identified at $mergeBase"
|
|
|
|
Write-Host "Comparing changes from $mergeBase..."
|
|
$gitDiffCommand = "git diff $mergeBase --name-only"
|
|
$changedFiles = Invoke-Expression $gitDiffCommand
|
|
$docsOnly = $false
|
|
$nonDocsOnly = $false
|
|
$mixedChanges = $false
|
|
$docFiles = 0
|
|
$nonDocFiles = 0
|
|
|
|
if ($changedFiles) {
|
|
Write-Host "Changed files:"
|
|
Write-Host $changedFiles
|
|
} else {
|
|
Write-Host "No files have changed."
|
|
}
|
|
|
|
foreach ($file in $changedFiles -split "`n") {
|
|
# Identifying changes as documentation if they occur:
|
|
# Within the doc folder, or
|
|
# Are Markdown files at the root level (with no subdirectories involved), or
|
|
# Are Markdown files within the .github folder (including its subdirectories)
|
|
$isDoc = $file.StartsWith("doc/") -or ($file -match "^[^/]+\.md$") -or ($file -match "^\.github/.*\.md$")
|
|
|
|
if ($isDoc) {
|
|
$docFiles++
|
|
} else {
|
|
$nonDocFiles++
|
|
}
|
|
}
|
|
|
|
Write-Host "Documentation files changed: $docFiles"
|
|
Write-Host "Non-documentation files changed: $nonDocFiles"
|
|
|
|
if ($docFiles -gt 0 -and $nonDocFiles -eq 0) {
|
|
$docsOnly = $true
|
|
Write-Host "All changes are documentation-only."
|
|
} elseif ($docFiles -gt 0 -and $nonDocFiles -gt 0) {
|
|
$mixedChanges = $true
|
|
Write-Host "Mixed changes detected: Both documentation and non-documentation files have been modified."
|
|
} elseif ($nonDocFiles -gt 0) {
|
|
$nonDocsOnly = $true
|
|
Write-Host "Non-documentation changes detected."
|
|
}
|
|
|
|
# Explicitly write the final values for clarity
|
|
Write-Host "Final values:"
|
|
Write-Host "docsOnly: $docsOnly"
|
|
Write-Host "nonDocsOnly: $nonDocsOnly"
|
|
Write-Host "mixedChanges: $mixedChanges"
|
|
|
|
# Output the results as pipeline variables
|
|
Write-Host "##vso[task.setvariable variable=docsOnly;isOutput=true]$docsOnly"
|
|
Write-Host "##vso[task.setvariable variable=nonDocsOnly;isOutput=true]$nonDocsOnly"
|
|
Write-Host "##vso[task.setvariable variable=mixedChanges;isOutput=true]$mixedChanges"
|
|
name: DetermineChanges
|