9ab8c6df4c
* Corrected the opencover option to merge the output file - Delete temporary zip file. - Remove CodeCov uploading through cygwin. - Add code to use Invoke-WebRequest to upload to CodeCov * Codecov settings - Wait for 1 build to start analysis. - Do not wait for CI. - Disable comments in PR. * Addressed code review comments
194 lines
7.6 KiB
PowerShell
194 lines
7.6 KiB
PowerShell
param(
|
|
[Parameter(Mandatory = $true, Position = 0)] $coverallsToken,
|
|
[Parameter(Mandatory = $true, Position = 1)] $codecovToken,
|
|
[Parameter(Position = 2)] $azureLogDrive = "L:\"
|
|
)
|
|
|
|
function Write-LogPassThru
|
|
{
|
|
Param(
|
|
[Parameter(Mandatory=$true, ValueFromPipeline=$true, Position = 0)]
|
|
[string] $Message,
|
|
$Path = "$env:Temp\CodeCoverageRunLogs.txt"
|
|
)
|
|
|
|
$message = "{0:d} - {0:t} : {1}" -f ([datetime]::now),$message
|
|
Add-Content -Path $Path -Value $Message -PassThru -Force
|
|
}
|
|
|
|
function Push-CodeCovData
|
|
{
|
|
param (
|
|
[Parameter(Mandatory=$true)]$file,
|
|
[Parameter(Mandatory=$true)]$CommitID,
|
|
[Parameter(Mandatory=$false)]$token,
|
|
[Parameter(Mandatory=$false)]$Branch = "master"
|
|
)
|
|
$VERSION="64c1150"
|
|
$url="https://codecov.io"
|
|
|
|
$query = "package=bash-${VERSION}&token=${token}&branch=${Branch}&commit=${CommitID}&build=&build_url=&tag=&slug=&yaml=&service=&flags=&pr=&job="
|
|
|
|
$CodeCovHeader = @{ Accept = "text/plain" }
|
|
$uri = "$url/upload/v4?${query}"
|
|
$response = Invoke-WebRequest -Method POST -Uri $uri -Headers $CodeCovHeader
|
|
if ( $response.StatusCode -ne 200 )
|
|
{
|
|
Write-LogPassThru -Message "Could not get upload url for request $uri"
|
|
throw "Could not get upload url"
|
|
}
|
|
$uploaduri = $response.content.split("`n")[-1]
|
|
|
|
$UploadHeader = @{ "Content-Type" = "text/plain"; "x-amz-acl" = "public-read"; "x-amz-storage-class" = "REDUCED_REDUNDANCY" }
|
|
$response = Invoke-WebRequest -Method Put -Uri $uploaduri -InFile $file -Headers $UploadHeader
|
|
if ( $response.StatusCode -ne 200 )
|
|
{
|
|
Write-LogPassThru -Message "Upload failed for upload uri: $uploaduri"
|
|
throw "upload failed"
|
|
}
|
|
}
|
|
|
|
Write-LogPassThru -Message "***** New Run *****"
|
|
|
|
Write-LogPassThru -Message "Forcing winrm quickconfig as it is required for remoting tests."
|
|
winrm quickconfig -force
|
|
|
|
$codeCoverageZip = 'https://ci.appveyor.com/api/projects/PowerShell/powershell-f975h/artifacts/CodeCoverage.zip'
|
|
$testContentZip = 'https://ci.appveyor.com/api/projects/PowerShell/powershell-f975h/artifacts/tests.zip'
|
|
$openCoverZip = 'https://ci.appveyor.com/api/projects/PowerShell/powershell-f975h/artifacts/OpenCover.zip'
|
|
|
|
Write-LogPassThru -Message "codeCoverageZip: $codeCoverageZip"
|
|
Write-LogPassThru -Message "testcontentZip: $testContentZip"
|
|
Write-LogPassThru -Message "openCoverZip: $openCoverZip"
|
|
|
|
$outputBaseFolder = "$env:Temp\CC"
|
|
$null = New-Item -ItemType Directory -Path $outputBaseFolder -Force
|
|
|
|
$openCoverPath = "$outputBaseFolder\OpenCover"
|
|
$testPath = "$outputBaseFolder\tests"
|
|
$psBinPath = "$outputBaseFolder\PSCodeCoverage"
|
|
$openCoverTargetDirectory = "$outputBaseFolder\OpenCoverToolset"
|
|
$outputLog = "$outputBaseFolder\CodeCoverageOutput.xml"
|
|
$psCodeZip = "$outputBaseFolder\PSCode.zip"
|
|
$psCodePath = "$outputBaseFolder\PSCode"
|
|
$elevatedLogs = "$outputBaseFolder\TestResults_Elevated.xml"
|
|
$unelevatedLogs = "$outputBaseFolder\TestResults_Unelevated.xml"
|
|
|
|
try
|
|
{
|
|
$oldErrorActionPreference = $ErrorActionPreference
|
|
$ErrorActionPreference = 'Stop'
|
|
Write-LogPassThru -Message "Starting downloads."
|
|
Invoke-WebRequest -uri $codeCoverageZip -outfile "$outputBaseFolder\PSCodeCoverage.zip"
|
|
Invoke-WebRequest -uri $testContentZip -outfile "$outputBaseFolder\tests.zip"
|
|
Invoke-WebRequest -uri $openCoverZip -outfile "$outputBaseFolder\OpenCover.zip"
|
|
Write-LogPassThru -Message "Downloads complete. Starting expansion"
|
|
|
|
Expand-Archive -path "$outputBaseFolder\PSCodeCoverage.zip" -destinationpath "$psBinPath" -Force
|
|
Expand-Archive -path "$outputBaseFolder\tests.zip" -destinationpath $testPath -Force
|
|
Expand-Archive -path "$outputBaseFolder\OpenCover.zip" -destinationpath $openCoverPath -Force
|
|
|
|
## Download Coveralls.net uploader
|
|
$coverallsToolsUrl = 'https://github.com/csMACnz/coveralls.net/releases/download/0.7.0/coveralls.net.0.7.0.nupkg'
|
|
$coverallsPath = "$outputBaseFolder\coveralls"
|
|
|
|
## Saving the nupkg as zip so we can expand it.
|
|
Invoke-WebRequest -uri $coverallsToolsUrl -outfile "$outputBaseFolder\coveralls.zip"
|
|
Expand-Archive -Path "$outputBaseFolder\coveralls.zip" -DestinationPath $coverallsPath -Force
|
|
|
|
Write-LogPassThru -Message "Expansion complete."
|
|
|
|
Import-Module "$openCoverPath\OpenCover" -Force
|
|
Install-OpenCover -TargetDirectory $openCoverTargetDirectory -force
|
|
Write-LogPassThru -Message "OpenCover installed."
|
|
|
|
Write-LogPassThru -Message "TestDirectory : $testPath"
|
|
Write-LogPassThru -Message "openCoverPath : $openCoverTargetDirectory\OpenCover"
|
|
Write-LogPassThru -Message "psbinpath : $psBinPath"
|
|
Write-LogPassThru -Message "elevatedLog : $elevatedLogs"
|
|
Write-LogPassThru -Message "unelevatedLog : $unelevatedLogs"
|
|
|
|
$openCoverParams = @{outputlog = $outputLog;
|
|
TestDirectory = $testPath;
|
|
OpenCoverPath = "$openCoverTargetDirectory\OpenCover";
|
|
PowerShellExeDirectory = "$psBinPath\publish";
|
|
PesterLogElevated = $elevatedLogs;
|
|
PesterLogUnelevated = $unelevatedLogs;
|
|
}
|
|
|
|
$openCoverParams | Out-String | Write-LogPassThru
|
|
Write-LogPassThru -Message "Starting test run."
|
|
|
|
if(Test-Path $outputLog)
|
|
{
|
|
Remove-Item $outputLog -Force -ErrorAction SilentlyContinue
|
|
}
|
|
|
|
Invoke-OpenCover @openCoverParams
|
|
|
|
if(Test-Path $outputLog)
|
|
{
|
|
Write-LogPassThru -Message (get-childitem $outputLog).FullName
|
|
}
|
|
|
|
Write-LogPassThru -Message "Test run done."
|
|
|
|
$gitCommitId = & "$psBinPath\publish\powershell.exe" -noprofile -command { $PSVersiontable.GitCommitId }
|
|
$commitId = $gitCommitId.substring($gitCommitId.LastIndexOf('-g') + 2)
|
|
|
|
Write-LogPassThru -Message $commitId
|
|
|
|
$coverallsPath = "$outputBaseFolder\coveralls"
|
|
|
|
$commitInfo = Invoke-RestMethod -Method Get "https://api.github.com/repos/powershell/powershell/git/commits/$commitId"
|
|
$message = ($commitInfo.message).replace("`n", " ")
|
|
$author = $commitInfo.author.name
|
|
$email = $commitInfo.author.email
|
|
|
|
$coverallsExe = Join-Path $coverallsPath "tools\csmacnz.Coveralls.exe"
|
|
$coverallsParams = @("--opencover",
|
|
"-i $outputLog",
|
|
"--repoToken $coverallsToken",
|
|
"--commitId $commitId",
|
|
"--commitBranch master",
|
|
"--commitAuthor `"$author`"",
|
|
"--commitEmail $email",
|
|
"--commitMessage `"$message`""
|
|
)
|
|
|
|
$coverallsParams | ForEach-Object { Write-LogPassThru -Message $_ }
|
|
|
|
Write-LogPassThru -Message "Uploading to CoverAlls"
|
|
& $coverallsExe """$coverallsParams"""
|
|
|
|
Write-LogPassThru -Message "Uploading to CodeCov"
|
|
Push-CodeCovData -file $outputLog -CommitID $commitId -token $codecovToken -Branch 'master'
|
|
|
|
Write-LogPassThru -Message "Upload complete."
|
|
}
|
|
catch
|
|
{
|
|
Write-LogPassThru -Message $_
|
|
}
|
|
finally
|
|
{
|
|
## See if Azure log directory is mounted
|
|
if(Test-Path $azureLogDrive)
|
|
{
|
|
##Create yyyy-dd folder
|
|
$monthFolder = "{0:yyyy-MM}" -f [datetime]::Now
|
|
$monthFolderFullPath = New-Item -Path (Join-Path $azureLogDrive $monthFolder) -ItemType Directory -Force
|
|
$windowsFolderPath = New-Item (Join-Path $monthFolderFullPath "Windows") -ItemType Directory -Force
|
|
|
|
$destinationPath = Join-Path $env:Temp ("CodeCoverageLogs-{0:yyyy_MM_dd}-{0:hh_mm_ss}.zip" -f [datetime]::Now)
|
|
Compress-Archive -Path $elevatedLogs,$unelevatedLogs,$outputLog -DestinationPath $destinationPath
|
|
Copy-Item $destinationPath $windowsFolderPath -Force -ErrorAction SilentlyContinue
|
|
|
|
Remove-Item -Path $destinationPath -Force -ErrorAction SilentlyContinue
|
|
}
|
|
|
|
## Disable the cleanup till we stabilize.
|
|
#Remove-Item -recurse -force -path $outputBaseFolder
|
|
$ErrorActionPreference = $oldErrorActionPreference
|
|
}
|