OCram85/DroneHelper
OCram85
/
DroneHelper
Archived
1
0
Fork 0
This repository has been archived on 2023-10-10. You can view files and clone it, but cannot push or open issues or pull requests.
DroneHelper/src/FileLinter/Invoke-FileLinter.ps1

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
}
}
}