diff --git a/eng/common/pipelines/templates/steps/verify-links.yml b/eng/common/pipelines/templates/steps/verify-links.yml index 86d0013ac863..2cc38d4767b7 100644 --- a/eng/common/pipelines/templates/steps/verify-links.yml +++ b/eng/common/pipelines/templates/steps/verify-links.yml @@ -2,16 +2,17 @@ parameters: Directory: 'not-specified' IgnoreLinksFile: "$(Build.SourcesDirectory)/eng/ignore-links.txt" - steps: - - task: PowerShell@2 - displayName: Link verification check - inputs: - pwsh: true - workingDirectory: $(Build.SourcesDirectory)/${{ parameters.Directory }} - filePath: eng/common/scripts/Verify-Links.ps1 - arguments: > - -urls $(dir -r -i *.md) - -rootUrl "file://$(Build.SourcesDirectory)/${{ parameters.Directory }}" - -recursive: $false - -ignoreLinksFile ${{ parameters.IgnoreLinksFile }} \ No newline at end of file +- task: PowerShell@2 + displayName: Link verification check + inputs: + pwsh: true + workingDirectory: $(Build.SourcesDirectory)/${{ parameters.Directory }} + filePath: eng/common/scripts/Verify-Links.ps1 + arguments: > + -urls $(dir -r -i *.md) + -rootUrl "file://$(Build.SourcesDirectory)/${{ parameters.Directory }}" + -recursive: $false + -ignoreLinksFile ${{ parameters.IgnoreLinksFile }} + -branchReplaceRegex "($env:SYSTEM_PULLREQUEST_SOURCEREPOSITORYURI.*/blob/)master(/.*)" + -branchReplacementName $env:SYSTEM_PULLREQUEST_SOURCECOMMITID diff --git a/eng/common/scripts/Verify-Links.ps1 b/eng/common/scripts/Verify-Links.ps1 index 8ef7d518abce..0742020ec5d4 100644 --- a/eng/common/scripts/Verify-Links.ps1 +++ b/eng/common/scripts/Verify-Links.ps1 @@ -13,6 +13,10 @@ param ( [string] $rootUrl = "", # list of http status codes count as broken links. Defaults to 400, 401, 404, SocketError.HostNotFound = 11001, SocketError.NoData = 11004 [array] $errorStatusCodes = @(400, 401, 404, 11001, 11004), + # regex to check if the link needs to be replaced + [string] $branchReplaceRegex = "(https://github.com/.*/blob/)master(/.*)", + # the substitute branch name or SHA commit + [string] $branchReplacementName = "", # flag to allow checking against azure sdk link guidance. [bool] $checkLinkGuidance = $false ) @@ -183,6 +187,14 @@ function CheckLink ([System.Uri]$linkUri) return $linkValid } +function ReplaceGithubLink([string]$originLink) { + if (!$branchReplacementName) { + return $originLink + } + $ReplacementPattern = "`${1}$branchReplacementName`$2" + return $originLink -replace $branchReplaceRegex, $ReplacementPattern +} + function GetLinks([System.Uri]$pageUri) { if ($pageUri.Scheme.StartsWith("http")) { @@ -259,6 +271,8 @@ while ($pageUrisToCheck.Count -ne 0) Write-Host "Found $($linkUris.Count) links on page $pageUri"; foreach ($linkUri in $linkUris) { + $linkUri = ReplaceGithubLink $linkUri + $isLinkValid = CheckLink $linkUri if (!$isLinkValid) { $script:badLinks += $linkUri