replace internal coverage tools with PSCoverage #39
@ -1,178 +0,0 @@
|
|||||||
function Get-GitInfo {
|
|
||||||
[CmdletBinding()]
|
|
||||||
param(
|
|
||||||
[string]$BranchName
|
|
||||||
)
|
|
||||||
|
|
||||||
if ($Env:AppVeyor) {
|
|
||||||
return [PSCustomObject]@{
|
|
||||||
head = [PSCustomObject]@{
|
|
||||||
id = $Env:APPVEYOR_REPO_COMMIT
|
|
||||||
author_name = $Env:APPVEYOR_REPO_COMMIT_AUTHOR
|
|
||||||
author_email = $Env:APPVEYOR_REPO_COMMIT_AUTHOR_EMAIL
|
|
||||||
comitter_name = $Env:APPVEYOR_REPO_COMMIT_AUTHOR
|
|
||||||
comitter_email = $Env:APPVEYOR_REPO_COMMIT_AUTHOR_EMAIL
|
|
||||||
message = $Env:APPVEYOR_REPO_COMMIT_MESSAGE
|
|
||||||
}
|
|
||||||
branch = $Env:APPVEYOR_REPO_BRANCH
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
if (-not $BranchName) {
|
|
||||||
$BranchName = (git rev-parse --abbrev-ref HEAD)
|
|
||||||
}
|
|
||||||
return [PSCustomObject]@{
|
|
||||||
head = [PSCustomObject]@{
|
|
||||||
id = (git log --format="%H" HEAD -1)
|
|
||||||
author_name = (git log --format="%an" HEAD -1)
|
|
||||||
author_email = (git log --format="%ae" HEAD -1)
|
|
||||||
committer_name = (git log --format="%cn" HEAD -1)
|
|
||||||
committer_email = (git log --format="%ce" HEAD -1)
|
|
||||||
message = (git log --format="%s" HEAD -1)
|
|
||||||
}
|
|
||||||
branch = $BranchName
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function New-CoverageReport {
|
|
||||||
[CmdletBinding()]
|
|
||||||
param(
|
|
||||||
[Parameter(Mandatory = $true)]
|
|
||||||
[ValidateNotNullOrEmpty()]
|
|
||||||
[PSCustomObject]$CodeCoverage,
|
|
||||||
|
|
||||||
[Parameter(Mandatory = $true)]
|
|
||||||
[ValidateNotNullOrEmpty()]
|
|
||||||
[string]$RepoToken,
|
|
||||||
|
|
||||||
[Parameter(Mandatory = $false)]
|
|
||||||
[ValidateNotNullOrEmpty()]
|
|
||||||
[string]$ModuleRoot = $(Get-Location)
|
|
||||||
)
|
|
||||||
begin {
|
|
||||||
$CoverReport = [PSCustomObject]@{
|
|
||||||
repo_token = $RepoToken
|
|
||||||
commit_sha = (git log --format="%H" HEAD -1)
|
|
||||||
git = Get-GitInfo
|
|
||||||
service_name = 'appveyor'
|
|
||||||
source_files = @()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
process {
|
|
||||||
# Find all files with hit commands -> These file have pester tests
|
|
||||||
$UsedFiles = $CodeCoverage.AnalyzedFiles | Where-Object {
|
|
||||||
$CodeCoverage.HitCommands.File -contains $_
|
|
||||||
}
|
|
||||||
|
|
||||||
foreach ($SourceFile in $UsedFiles) {
|
|
||||||
$Lines = (Get-Content -Path $SourceFile | Measure-Object).Count
|
|
||||||
Write-Verbose ("SourceFile: {0} | LinesCount: {1}" -f $SourceFile, $Lines)
|
|
||||||
$CoverageArray = @()
|
|
||||||
$Hits = 0
|
|
||||||
$Missed = 0
|
|
||||||
|
|
||||||
for ($LinePointer = 1; $LinePointer -le $Lines; $LinePointer++) {
|
|
||||||
|
|
||||||
# Get only hit commands from current src file
|
|
||||||
$curHits = $CodeCoverage.HitCommands | Where-Object {
|
|
||||||
$_.File -eq $SourceFile
|
|
||||||
}
|
|
||||||
[int]$Hits = (
|
|
||||||
$curHits | Where-Object {
|
|
||||||
$_.Line -eq $LinePointer
|
|
||||||
} | Measure-Object
|
|
||||||
).Count
|
|
||||||
|
|
||||||
# again filter only missed commands from the curent file
|
|
||||||
$curMissed = $CodeCoverage.MissedCommands | Where-Object {
|
|
||||||
$_.File -eq $SourceFile
|
|
||||||
}
|
|
||||||
[int]$Missed = (
|
|
||||||
$curMissed | Where-Object {
|
|
||||||
$_.Line -eq $LinePointer
|
|
||||||
} | Measure-Object
|
|
||||||
).Count
|
|
||||||
|
|
||||||
Write-Verbose ("SourceFile:{0} | Line: {1} | Hits: {2} | Missed: {3}" -f $SourceFile, $LinePointer, $Hits, $Missed)
|
|
||||||
if ((-not $Hits -gt 0) -and (-not $Missed -gt 0)) {
|
|
||||||
$CoverageArray += 'null'
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
if ($Hits -gt 0) {
|
|
||||||
$CoverageArray += $Hits
|
|
||||||
}
|
|
||||||
elseif ($Missed -gt 0) {
|
|
||||||
$CoverageArray += 0
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
# Get rid of the quotation
|
|
||||||
$CoverageArray = $CoverageArray -Replace '"', ''
|
|
||||||
$CoverageSourceFile = [PSCustomObject]@{
|
|
||||||
name = $SourceFile.Replace($ModuleRoot, '').Replace('\', '/')
|
|
||||||
source_digest = (Get-FileHash -Path $SourceFile -Algorithm MD5).Hash
|
|
||||||
coverage = $CoverageArray
|
|
||||||
}
|
|
||||||
If ($CoverageSourceFile.Name.StartsWith('/')) {
|
|
||||||
$CoverageSourceFile.Name = $CoverageSourceFile.Name.Remove(0, 1)
|
|
||||||
}
|
|
||||||
$CoverReport.source_files += $CoverageSourceFile
|
|
||||||
}
|
|
||||||
|
|
||||||
# Find all untested files to create a null coverage file
|
|
||||||
$UnUsedFiles = $CodeCoverage.AnalyzedFiles | Where-Object {
|
|
||||||
$CodeCoverage.HitCommands.File -notcontains $_
|
|
||||||
}
|
|
||||||
|
|
||||||
foreach ($UnUsedFile in $UnUsedFiles) {
|
|
||||||
$Lines = (Get-Content -Path $UnUsedFile | Measure-Object).Count
|
|
||||||
$CoverageArray = @()
|
|
||||||
for ($LinePointer = 1; $LinePointer -le $Lines; $LinePointer++) {
|
|
||||||
$CoverageArray += '0'
|
|
||||||
}
|
|
||||||
$CoverageSourceFile = [PSCustomObject]@{
|
|
||||||
name = $UnUsedFile.Replace($ModuleRoot, '').Replace('\', '/')
|
|
||||||
source_digest = (Get-FileHash -Path $UnUsedFile -Algorithm MD5).Hash
|
|
||||||
coverage = $CoverageArray
|
|
||||||
}
|
|
||||||
if ($CoverageSourceFile.Name.StartsWith('/')) {
|
|
||||||
$CoverageSourceFile.Name = $CoverageSourceFile.Name.Remove(0, 1)
|
|
||||||
}
|
|
||||||
$CoverReport.source_files += $CoverageSourceFile
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
end {
|
|
||||||
Write-Output $CoverReport
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function Publish-CoverageReport () {
|
|
||||||
[CmdletBinding()]
|
|
||||||
param(
|
|
||||||
[Parameter(Mandatory = $True)]
|
|
||||||
[ValidateNotNullOrEmpty()]
|
|
||||||
[PSCustomObject]$CoverageReport
|
|
||||||
)
|
|
||||||
begin {
|
|
||||||
Add-Type -AssemblyName System.Net.Http
|
|
||||||
}
|
|
||||||
|
|
||||||
process {
|
|
||||||
$CoverageJSON = ConvertTo-Json $CoverageReport -Depth 5
|
|
||||||
# Try to fix null elements in coverage array.
|
|
||||||
$CoverageJSON = $CoverageJSON.Replace('"null"', 'null')
|
|
||||||
$stringContent = New-Object System.Net.Http.StringContent ($CoverageJSON)
|
|
||||||
$httpClient = New-Object System.Net.Http.Httpclient
|
|
||||||
$formdata = New-Object System.Net.Http.MultipartFormDataContent
|
|
||||||
$formData.Add($stringContent, "json_file", "coverage.json")
|
|
||||||
$result = $httpClient.PostAsync('https://coveralls.io/api/v1/jobs', $formData).Result
|
|
||||||
$content = $result.Content.ReadAsStringAsync()
|
|
||||||
}
|
|
||||||
|
|
||||||
end {
|
|
||||||
Write-Output $Content
|
|
||||||
}
|
|
||||||
}
|
|
Loading…
Reference in New Issue
Block a user