116 lines
3.6 KiB
PowerShell
116 lines
3.6 KiB
PowerShell
|
function Invoke-FileLinter {
|
||
|
<#
|
||
|
.SYNOPSIS
|
||
|
Runs the file linter for all src files found in current repository.
|
||
|
|
||
|
.DESCRIPTION
|
||
|
Invoke-FileLinter runs the basic file tests and generates a report file for furher usage in the
|
||
|
drone pipeline.
|
||
|
|
||
|
.INPUTS
|
||
|
[None]
|
||
|
|
||
|
.OUTPUTS
|
||
|
[DroneHelper.FileLinter.Report]
|
||
|
|
||
|
.EXAMPLE
|
||
|
Invoke-FileLinter
|
||
|
|
||
|
.NOTES
|
||
|
#>
|
||
|
|
||
|
[CmdletBinding()]
|
||
|
[OutputType('DroneHelper.FileLinter.Report')]
|
||
|
|
||
|
param (
|
||
|
[Parameter(Mandatory = $false)]
|
||
|
[switch]$PassThru
|
||
|
)
|
||
|
|
||
|
begin {
|
||
|
}
|
||
|
|
||
|
process {
|
||
|
$FileSet = @()
|
||
|
$Repo = Get-RepoPath
|
||
|
$RawFiles = (Get-ChildItem -Path $Repo.src.Path -Recurse -File).FullName
|
||
|
Write-Debug -Message ('EXCLUDE Filter. {0}' -f $Env:EXCLUDE)
|
||
|
if ($Env:EXCLUDE) {
|
||
|
$Files = $RawFiles -notmatch $Env:EXCLUDE
|
||
|
Write-Debug -Message ('Raw File List: {0} | Filtered Files: {1}' -f $RawFiles.Count, $Files.Count)
|
||
|
}
|
||
|
else {
|
||
|
$Files = $RawFiles
|
||
|
}
|
||
|
foreach ($file in $Files) {
|
||
|
Write-Verbose -Message ('Running FileLinter tests for: {0}' -f $file)
|
||
|
$FileResults = [PSCustomObject]@{
|
||
|
Name = $file
|
||
|
FailedCount = 0
|
||
|
Tests = [ordered]@{
|
||
|
Encoding = (Test-FileEncoding -Path $file)
|
||
|
BOM = (Test-FileBOM -Path $file)
|
||
|
EOL = (Test-FileEOL -Path $file)
|
||
|
EOF = (Test-FileEOF -Path $file)
|
||
|
TAB = (Test-FileTab -Path $file)
|
||
|
TailingWhite = (Test-FileTailingWhitespace -Path $file)
|
||
|
}
|
||
|
}
|
||
|
Write-Verbose -Message ('Populating property FailedCount for current file.')
|
||
|
foreach ($item in $FileResults.Tests.Keys.GetEnumerator()) {
|
||
|
if (($FileResults.Tests.$item) -ne $true) {
|
||
|
$FileResults.FailedCount++
|
||
|
}
|
||
|
}
|
||
|
$FileSet += [PSCustomObject]$FileResults
|
||
|
}
|
||
|
$LinterReport = [PSCustomObject]@{
|
||
|
Success = $null
|
||
|
FilesCount = ($FileSet | Measure-Object).Count
|
||
|
FailedCount = 0
|
||
|
Files = $FileSet
|
||
|
|
||
|
}
|
||
|
Write-Verbose -Message ('Populating total FailedCount property.')
|
||
|
foreach ($i in $LinterReport.Files.FailedCount) {
|
||
|
if ($i -ne 0) {
|
||
|
$LinterReport.FailedCount = $LinterReport.FailedCount + $i
|
||
|
}
|
||
|
}
|
||
|
if ($LinterReport.FailedCount -eq 0) {
|
||
|
$LinterReport.Success = $true
|
||
|
}
|
||
|
else {
|
||
|
$LinterReport.Success = $false
|
||
|
}
|
||
|
$LinterReport.PSObject.TypeNames.Insert(0, 'DroneHelper.FileLinter.Report')
|
||
|
|
||
|
$LinterReport.Files | Out-String | Write-Verbose -Verbose
|
||
|
|
||
|
$LinterReport | Format-Table -Property @(
|
||
|
'Success',
|
||
|
'FilesCount',
|
||
|
'FailedCount'
|
||
|
) | Out-String | Write-Verbose -Verbose
|
||
|
|
||
|
|
||
|
$ResultParams = @{
|
||
|
Type = 'FileLinter'
|
||
|
Path = $Repo.Build.FileLinterLogPath
|
||
|
InputObject = $LinterReport
|
||
|
}
|
||
|
Write-ResultFile @ResultParams
|
||
|
|
||
|
if (-not ($LinterReport.Success)) {
|
||
|
Write-FailureStateFile -StepName 'FileLinter'
|
||
|
throw 'FileLinter failed!'
|
||
|
}
|
||
|
}
|
||
|
|
||
|
end {
|
||
|
if ($PassThru.IsPresent) {
|
||
|
Write-Output $LinterReport
|
||
|
}
|
||
|
}
|
||
|
}
|