tasks/dotnet.tasks.ps1
# Control flags $CleanBuild = $false $EnableCoverage = $true # Options $SolutionToBuild = $false $ProjectsToPublish = @() $SkipSolutionPackages = $false $SkipProjectPublishPackages = $false $FoldersToClean = @("bin", "obj", "TestResults", "_codeCoverage", "_packages") $ReportGeneratorToolVersion = "4.8.3" $TestReportTypes = "Cobertura" $DotNetTestLogger = "console;verbosity=$LogLevel" # Synopsis: Clean .NET solution task CleanSolution -If {$CleanBuild -and $SolutionToBuild} { exec { dotnet clean $SolutionToBuild ` --configuration $Configuration ` --verbosity $LogLevel } # Delete output folders Write-Build White "Deleting output folders..." $FoldersToClean | ForEach-Object { Get-ChildItem -Path (Split-Path -Parent $SolutionToBuild) ` -Filter $_ ` -Recurse ` | Where-Object { $_.PSIsContainer } } | Remove-Item -Recurse -Force } # Synopsis: Build .NET solution task BuildSolution -If {$SolutionToBuild} GitVersion,CleanSolution,RestorePackages,{ exec { dotnet build $SolutionToBuild ` --no-restore ` --configuration $Configuration ` /p:Version="$(($script:GitVersion).SemVer)" ` /p:EndjinRepositoryUrl="$BuildRepositoryUri" ` --verbosity $LogLevel } } # Synopsis: Restore .NET Solution Packages task RestorePackages -If {$SolutionToBuild} CleanSolution,{ exec { dotnet restore $SolutionToBuild ` --verbosity $LogLevel } } # Synopsis: Build .NET solution packages task BuildSolutionPackages -If {!$SkipSolutionPackages -and $SolutionToBuild} GitVersion,{ exec { dotnet pack $SolutionToBuild ` --configuration $Configuration ` --no-build ` --no-restore ` --output $PackagesDir ` /p:EndjinRepositoryUrl="$BuildRepositoryUri" ` /p:PackageVersion="$(($script:GitVersion).SemVer)" ` --verbosity $LogLevel } } # Synopsis: Run .NET solution tests task RunTests -If {!$SkipTests -and $SolutionToBuild} { exec { dotnet test $SolutionToBuild ` --configuration $Configuration ` --no-build ` --no-restore ` /p:CollectCoverage="$EnableCoverage" ` /p:CoverletOutputFormat=cobertura ` /p:ExcludeByFile="$($ExcludeFilesFromCodeCoverage.Replace(",","%2C"))" ` --verbosity $LogLevel ` --logger $DotNetTestLogger } } # Synopsis: Generate test report file task GenerateTestReport -If {!$SkipTests -and !$SkipTestReport -and $SolutionToBuild} { Install-DotNetTool -Name "dotnet-reportgenerator-globaltool" -Version $ReportGeneratorToolVersion exec { reportgenerator "-reports:$SourcesDir/**/**/coverage.cobertura.xml" ` "-targetdir:$CoverageDir" ` "-reporttypes:$TestReportTypes" } } # Synopsis: Build publish packages for selected projects task BuildProjectPublishPackages -If {!$SkipProjectPublishPackages -and $ProjectsToPublish} GitVersion,{ foreach ($project in $ProjectsToPublish) { exec { dotnet publish $project ` --configuration $Configuration ` --no-build ` --no-restore ` /p:EndjinRepositoryUrl="$BuildRepositoryUri" ` /p:PackageVersion="$(($script:GitVersion).SemVer)" ` --verbosity $LogLevel } } } |