Skip to content

Commit

Permalink
Sync eng/common directory with azure-sdk-tools for PR 9013 (#23468)
Browse files Browse the repository at this point in the history
* Spelling: Remove deprecated --no-install, replace with --no

* Extract testing, use npm exec instead of npx

* Move tests to eng/common-tests/

* Cleanup, documentation

* More cleanup

* Update $command

---------

Co-authored-by: Daniel Jurek <[email protected]>
  • Loading branch information
azure-sdk and danieljurek authored Sep 24, 2024
1 parent 7641858 commit fa5fe3b
Show file tree
Hide file tree
Showing 2 changed files with 22 additions and 226 deletions.
209 changes: 17 additions & 192 deletions eng/common/scripts/check-spelling-in-changed-files.ps1
Original file line number Diff line number Diff line change
Expand Up @@ -34,8 +34,16 @@ Optional location to use for cspell.json path. Default value is
.PARAMETER ExitWithError
Exit with error code 1 if spelling errors are detected.
.PARAMETER Test
Run test functions against the script logic
.PARAMETER SourceCommittish
Commit SHA (or ref) used for file list generation. This is the later commit. The
default value is useful for Azure DevOps pipelines. The default value is
`${env:SYSTEM_PULLREQUEST_SOURCECOMMITID}`
.PARAMETER TargetCommittish
Commit SHA (or ref) used for file list generation. This is the "base" commit.
The default value is useful for Azure DevOps pipelines. The default value is
`origin/${env:SYSTEM_PULLREQUEST_TARGETBRANCH}` with some string manipulation to
remove the `refs/heads/` prefix.
.EXAMPLE
./eng/common/scripts/check-spelling-in-changed-files.ps1
Expand All @@ -57,199 +65,14 @@ Param (
[switch] $ExitWithError,

[Parameter()]
[switch] $Test
[string]$SourceCommittish = "${env:SYSTEM_PULLREQUEST_SOURCECOMMITID}",

[Parameter()]
[string]$TargetCommittish = ("origin/${env:SYSTEM_PULLREQUEST_TARGETBRANCH}" -replace "refs/heads/")
)

Set-StrictMode -Version 3.0

function TestSpellChecker() {
Test-Exit0WhenAllFilesExcluded
ResetTest
Test-Exit1WhenIncludedFileHasSpellingError
ResetTest
Test-Exit0WhenIncludedFileHasNoSpellingError
ResetTest
Test-Exit1WhenChangedFileAlreadyHasSpellingError
ResetTest
Test-Exit0WhenUnalteredFileHasSpellingError
ResetTest
Test-Exit0WhenSpellingErrorsAndNoExitWithError
}

function Test-Exit0WhenAllFilesExcluded() {
# Arrange
"sepleing errrrrorrrrr" > ./excluded/excluded-file.txt
git add -A
git commit -m "One change"

# Act
&"$PSScriptRoot/check-spelling-in-changed-files.ps1" `
-CspellConfigPath "./.vscode/cspell.json" `
-SpellCheckRoot "./" `
-ExitWithError

# Assert
if ($LASTEXITCODE -ne 0) {
throw "`$LASTEXITCODE != 0"
}
}

function Test-Exit1WhenIncludedFileHasSpellingError() {
# Arrange
"sepleing errrrrorrrrr" > ./included/included-file.txt
git add -A
git commit -m "One change"

# Act
&"$PSScriptRoot/check-spelling-in-changed-files.ps1" `
-CspellConfigPath "./.vscode/cspell.json" `
-SpellCheckRoot "./" `
-ExitWithError

# Assert
if ($LASTEXITCODE -ne 1) {
throw "`$LASTEXITCODE != 1"
}
}

function Test-Exit0WhenIncludedFileHasNoSpellingError() {
# Arrange
"correct spelling" > ./included/included-file.txt
git add -A
git commit -m "One change"

# Act
&"$PSScriptRoot/check-spelling-in-changed-files.ps1" `
-CspellConfigPath "./.vscode/cspell.json" `
-SpellCheckRoot "./" `
-ExitWithError

# Assert
if ($LASTEXITCODE -ne 0) {
throw "`$LASTEXITCODE != 0"
}
}

function Test-Exit1WhenChangedFileAlreadyHasSpellingError() {
# Arrange
"sepleing errrrrorrrrr" > ./included/included-file.txt
git add -A
git commit -m "First change"

"A statement without spelling errors" >> ./included/included-file.txt
git add -A
git commit -m "Second change"

# Act
&"$PSScriptRoot/check-spelling-in-changed-files.ps1" `
-CspellConfigPath "./.vscode/cspell.json" `
-SpellCheckRoot "./" `
-ExitWithError

# Assert
if ($LASTEXITCODE -ne 1) {
throw "`$LASTEXITCODE != 1"
}
}

function Test-Exit0WhenUnalteredFileHasSpellingError() {
# Arrange
"sepleing errrrrorrrrr" > ./included/included-file-1.txt
git add -A
git commit -m "One change"

"A statement without spelling errors" > ./included/included-file-2.txt
git add -A
git commit -m "Second change"

# Act
&"$PSScriptRoot/check-spelling-in-changed-files.ps1" `
-CspellConfigPath "./.vscode/cspell.json" `
-SpellCheckRoot "./" `
-ExitWithError

# Assert
if ($LASTEXITCODE -ne 0) {
throw "`$LASTEXITCODE != 0"
}
}

function Test-Exit0WhenSpellingErrorsAndNoExitWithError() {
# Arrange
"sepleing errrrrorrrrr" > ./included/included-file-1.txt
git add -A
git commit -m "One change"

# Act
&"$PSScriptRoot/check-spelling-in-changed-files.ps1" `
-CspellConfigPath "./.vscode/cspell.json" `
-SpellCheckRoot "./"

# Assert
if ($LASTEXITCODE -ne 0) {
throw "`$LASTEXITCODE != 0"
}
}

function SetupTest($workingDirectory) {
Write-Host "Create test temp dir: $workingDirectory"
New-Item -ItemType Directory -Force -Path $workingDirectory | Out-Null

Push-Location $workingDirectory | Out-Null
git init

New-Item -ItemType Directory -Force -Path "./excluded"
New-Item -ItemType Directory -Force -Path "./included"
New-Item -ItemType Directory -Force -Path "./.vscode"

"Placeholder" > "./excluded/placeholder.txt"
"Placeholder" > "./included/placeholder.txt"

$configJsonContent = @"
{
"version": "0.1",
"language": "en",
"ignorePaths": [
".vscode/cspell.json",
"excluded/**"
]
}
"@
$configJsonContent > "./.vscode/cspell.json"

git add -A
git commit -m "Init"
}

function ResetTest() {
# Empty out the working tree
git checkout .
git clean -xdf

$revCount = git rev-list --count HEAD
if ($revCount -gt 1) {
# Reset N-1 changes so there is only the initial commit
$revisionsToReset = $revCount - 1
git reset --hard HEAD~$revisionsToReset
}
}

function TeardownTest($workingDirectory) {
Pop-Location | Out-Null
Write-Host "Remove test temp dir: $workingDirectory"
Remove-Item -Path $workingDirectory -Recurse -Force | Out-Null
}

if ($Test) {
$workingDirectory = Join-Path ([System.IO.Path]::GetTempPath()) ([System.IO.Path]::GetRandomFileName())

SetupTest $workingDirectory
TestSpellChecker
TeardownTest $workingDirectory
Write-Host "Test complete"
exit 0
}

$ErrorActionPreference = "Continue"
. $PSScriptRoot/common.ps1

Expand All @@ -266,7 +89,9 @@ if (!(Test-Path $CspellConfigPath)) {
# Lists names of files that were in some way changed between the
# current branch and default target branch. Excludes files that were deleted to
# prevent errors in Resolve-Path
$changedFilesList = Get-ChangedFiles
$changedFilesList = Get-ChangedFiles `
-SourceCommittish $SourceCommittish `
-TargetCommittish $TargetCommittish

$changedFiles = @()
foreach ($file in $changedFilesList) {
Expand Down
39 changes: 5 additions & 34 deletions eng/common/spelling/Invoke-Cspell.ps1
Original file line number Diff line number Diff line change
Expand Up @@ -27,9 +27,6 @@ If set the PackageInstallCache will not be deleted. Use if there are multiple
calls to Invoke-Cspell.ps1 to prevent creating multiple working directories and
redundant calls `npm ci`.
.PARAMETER Test
Run test functions against the script logic
.EXAMPLE
./eng/common/scripts/Invoke-Cspell.ps1 -ScanGlobs 'sdk/*/*/PublicAPI/**/*.md'
Expand Down Expand Up @@ -64,10 +61,7 @@ param(
[string] $PackageInstallCache = (Join-Path ([System.IO.Path]::GetTempPath()) "cspell-tool-path"),

[Parameter()]
[switch] $LeavePackageInstallCache,

[Parameter()]
[switch] $Test
[switch] $LeavePackageInstallCache
)

Set-StrictMode -Version 3.0
Expand All @@ -82,30 +76,6 @@ if (!(Test-Path $CSpellConfigPath)) {
exit 1
}

function Test-VersionReportMatches() {
# Arrange
$expectedPackageVersion = '6.12.0'

# Act
$actual = &"$PSScriptRoot/Invoke-Cspell.ps1" `
-JobType '--version'

# Assert
if ($actual -ne $expectedPackageVersion) {
throw "Mismatched version. Expected:`n$expectedPackageVersion`n`nActual:`n$actual"
}
}

function TestInvokeCspell() {
Test-VersionReportMatches
}

if ($Test) {
TestInvokeCspell
Write-Host "Test complete"
exit 0
}

# Prepare the working directory if it does not already have requirements in
# place.
if (!(Test-Path $PackageInstallCache)) {
Expand Down Expand Up @@ -170,10 +140,11 @@ try {
npm ci | Write-Host

# Use the mutated configuration file when calling cspell
$command = "npx cspell $JobType --config $CSpellConfigPath --no-must-find-files --root $SpellCheckRoot --relative"
$command = "npm exec --no -- cspell $JobType --config $CSpellConfigPath --no-must-find-files --root $SpellCheckRoot --relative"
Write-Host $command
$cspellOutput = npx `
--no-install `
$cspellOutput = npm exec `
--no `
-- `
cspell `
$JobType `
--config $CSpellConfigPath `
Expand Down

0 comments on commit fa5fe3b

Please sign in to comment.