Public/New-CoverallsReport.ps1

<#
.SYNOPSIS
Creates a Coveralls.io report from the Code Coverage report from Pester.

.DESCRIPTION
Creates a Coveralls.io report from the Code Coverage report from Pester.

.PARAMETER Coverage
The Pester test report that contains the CodeCoverage

.PARAMETER ServiceName
The Name of which CI Service the report is being generated
Examples are: appveyor, travis-ci, github-actions, jenkins, etc

.PARAMETER BranchName
The Name of the branch for which the report is being generated

.PARAMETER RootFolder
Optional root folder path

.EXAMPLE
$report = New-CoverallsReport -Coverage $PesterReport.CodeCoverage -ServiceName 'github-actions' -BranchName master
#>

function New-CoverallsReport
{
    [CmdletBinding()]
    [OutputType([hashtable])]
    param(
        [Parameter(Mandatory=$true)]
        $Coverage,

        [Parameter(Mandatory=$true)]
        [ValidateSet('appveyor', 'github-actions', 'jenkins', 'travis-ci', 'travis-pro')]
        [string]
        $ServiceName,

        [Parameter()]
        [string]
        $BranchName,

        [Parameter()]
        [string]
        $RootFolder = $pwd
    )

    $coverageData = @()

    foreach ($file in $Coverage.AnalyzedFiles) {
        $hitcommands = Get-CoverallsCommandsForFile -Commands $Coverage.HitCommands -File $file
        $missedCommands = Get-CoverallsCommandsForFile -Commands $Coverage.MissedCommands -File $file
        $coverageResult = Merge-CoverallsCoverageResult -HitCommands $hitcommands -MissedCommands $missedCommands -File $file
        $coverageArray = Get-CoverallsCoverage -CoverageResult $coverageResult -File $file
        $coverageData += (Format-CoverallsFileCoverage -Coverage $coverageArray -File $file -RootFolder $RootFolder)
    }

    return @{
        commit_sha = (Get-CoverallsGitCommit)
        git = (Get-CoverallsGitInfo -BranchName $BranchName)
        service_name = $ServiceName
        source_files = $coverageData
    }
}