11// Install tools.
2- #tool dotnet : ? package= GitVersion . Tool & version = 5.8 .2
2+ #tool dotnet : ? package= GitVersion . Tool & version = 5.10 .3
3+ #tool dotnet: ? package = coveralls . net & version = 4.0 .0
34#tool nuget: ? package = GitReleaseManager & version = 0.13 .0
4- #tool nuget: ? package = OpenCover & version = 4.7 .1221
5- #tool nuget: ? package = ReportGenerator & version = 5.0 .4
6- #tool nuget: ? package = coveralls . io & version = 1.4 .2
5+ #tool nuget: ? package = ReportGenerator & version = 5.1 .9
76#tool nuget: ? package = xunit . runner . console & version = 2.4 .1
7+ #tool nuget: ? package = Codecov & version = 1.13 .0
88
99// Install addins.
1010#addin nuget: ? package = Cake . Coveralls & version = 1.1 .0
1111#addin nuget: ? package = Cake . Git & version = 2.0 .0
12+ #addin nuget: ? package = Cake . Codecov & version = 1.0 .1
1213
1314
1415///////////////////////////////////////////////////////////////////////////////
@@ -28,9 +29,24 @@ if (IsRunningOnUnix()) target = "Run-Unit-Tests";
2829var libraryName = "HttpMultipartParser";
2930var gitHubRepo = "Http-Multipart-Data-Parser" ;
3031
31- var testCoverageFilter = "+[HttpMultipartParser]* -[HttpMultipartParser]HttpMultipartParser.Properties.* -[HttpMultipartParser]HttpMultipartParser.Models.*" ;
32- var testCoverageExcludeByAttribute = "*.ExcludeFromCodeCoverage*" ;
33- var testCoverageExcludeByFile = "*/*Designer.cs;*/*AssemblyInfo.cs" ;
32+ var testCoverageFilters = new [ ]
33+ {
34+ "+[HttpMultipartParser]*" ,
35+ "-[HttpMultipartParser]HttpMultipartParser.Properties.*" ,
36+ "-[HttpMultipartParser]HttpMultipartParser.Models.*" ,
37+ "-[HttpMultipartParser]*System.Text.Json.SourceGeneration*"
38+ } ;
39+ var testCoverageExcludeAttributes = new [ ]
40+ {
41+ "Obsolete" ,
42+ "GeneratedCodeAttribute" ,
43+ "CompilerGeneratedAttribute" ,
44+ "ExcludeFromCodeCoverageAttribute"
45+ } ;
46+ var testCoverageExcludeFiles = new [ ]
47+ {
48+ "**/AssemblyInfo.cs"
49+ } ;
3450
3551var nuGetApiUrl = Argument< string > ( "NUGET_API_URL" , EnvironmentVariable ( "NUGET_API_URL" ) ) ;
3652var nuGetApiKey = Argument< string > ( "NUGET_API_KEY" , EnvironmentVariable ( "NUGET_API_KEY" ) ) ;
@@ -43,6 +59,9 @@ var gitHubUserName = Argument<string>("GITHUB_USERNAME", EnvironmentVariable("GI
4359var gitHubPassword = Argument< string > ( "GITHUB_PASSWORD" , EnvironmentVariable ( "GITHUB_PASSWORD" ) ) ;
4460var gitHubRepoOwner = Argument< string > ( "GITHUB_REPOOWNER" , EnvironmentVariable ( "GITHUB_REPOOWNER" ) ?? gitHubUserName ) ;
4561
62+ var coverallsToken = Argument< string > ( "COVERALLS_REPO_TOKEN" , EnvironmentVariable ( "COVERALLS_REPO_TOKEN" ) ) ;
63+ var codecovToken = Argument < string > ( "CODECOV_TOKEN" , EnvironmentVariable ( "CODECOV_TOKEN" ) ) ;
64+
4665var sourceFolder = "./Source/" ;
4766var outputDir = "./artifacts/" ;
4867var codeCoverageDir = $"{outputDir}CodeCoverage/" ;
@@ -72,7 +91,14 @@ var isBenchmarkProjectPresent = FileExists(benchmarkProject);
7291// - when running unit tests on Ubuntu
7392// - when calculating code coverage
7493// FYI, this will cause an error if the source project and/or the unit test project are not configured to target this desired framework:
75- var desiredFramework = IsRunningOnWindows( ) ? null : "net5.0 ";
94+ const string DefaultFramework = "net6.0" ;
95+ var desiredFramework = (
96+ ! IsRunningOnWindows ( ) ||
97+ target . Equals ( "Coverage" , StringComparison . OrdinalIgnoreCase ) ||
98+ target . Equals ( "Run-Code-Coverage" , StringComparison . OrdinalIgnoreCase ) ||
99+ target . Equals ( "Generate-Code-Coverage-Report" , StringComparison . OrdinalIgnoreCase ) ||
100+ target . Equals ( "Upload-Coverage-Result" , StringComparison . OrdinalIgnoreCase )
101+ ) ? DefaultFramework : null ;
76102
77103
78104///////////////////////////////////////////////////////////////////////////////
@@ -225,7 +251,7 @@ Task("Build")
225251 AssemblyVersion = versionInfo . MajorMinorPatch ,
226252 FileVersion = versionInfo . MajorMinorPatch ,
227253 InformationalVersion = versionInfo . InformationalVersion ,
228- ContinuousIntegrationBuild = ! BuildSystem . IsLocalBuild
254+ ContinuousIntegrationBuild = true
229255 }
230256 } ) ;
231257} ) ;
@@ -247,26 +273,26 @@ Task("Run-Code-Coverage")
247273 . IsDependentOn ( "Build" )
248274 . Does ( ( ) =>
249275{
250- Action < ICakeContext > testAction = ctx => ctx . DotNetTest ( unitTestsProject , new DotNetTestSettings
276+ var testSettings = new DotNetTestSettings
251277 {
252278 NoBuild = true ,
253279 NoRestore = true ,
254280 Configuration = configuration ,
255- Framework = desiredFramework
256- } ) ;
257-
258- OpenCover ( testAction ,
259- $ " { codeCoverageDir } coverage.xml" ,
260- new OpenCoverSettings
261- {
262- OldStyle = true ,
263- MergeOutput = true ,
264- ArgumentCustomization = args => args . Append ( "-returntargetcode " )
265- }
266- . WithFilter ( testCoverageFilter )
267- . ExcludeByAttribute ( testCoverageExcludeByAttribute )
268- . ExcludeByFile ( testCoverageExcludeByFile )
269- ) ;
281+ Framework = DefaultFramework ,
282+
283+ // The following assumes that coverlet.msbuild has been added to the unit testing project
284+ ArgumentCustomization = args => args
285+ . Append ( "/p:CollectCoverage=true" )
286+ . Append ( "/p:CoverletOutputFormat=opencover" )
287+ . Append ( $ "/p:CoverletOutput= { MakeAbsolute ( Directory ( codeCoverageDir ) ) } /coverage.xml" ) // The name of the framework will be inserted between "coverage" and "xml". This is important to know when uploading the XML file to coveralls/codecov and when generating the HTML report
288+ . Append ( $ "/p:ExcludeByAttribute= { string . Join ( "%2c" , testCoverageExcludeAttributes ) } " )
289+ . Append ( $ "/p:ExcludeByFile= { string . Join ( "%2c" , testCoverageExcludeFiles ) } " )
290+ . Append ( $ "/p:Exclude= { string . Join ( "%2c" , testCoverageFilters . Where ( filter => filter . StartsWith ( "-" ) ) . Select ( filter => filter . TrimStart ( "-" , StringComparison . OrdinalIgnoreCase ) ) ) } ")
291+ . Append ( $ "/p:Include= { string . Join ( "%2c" , testCoverageFilters . Where ( filter => filter . StartsWith ( "+" ) ) . Select ( filter => filter . TrimStart ( "+" , StringComparison . OrdinalIgnoreCase ) ) ) } " )
292+ . Append ( "/p:SkipAutoProps=true" )
293+ } ;
294+
295+ DotNetTest ( unitTestsProject , testSettings ) ;
270296} ) ;
271297
272298Task( "Upload-Coverage-Result" )
@@ -275,7 +301,19 @@ Task("Upload-Coverage-Result")
275301{
276302 try
277303 {
278- CoverallsIo ( $ "{ codeCoverageDir } coverage.xml") ;
304+ CoverallsNet ( new FilePath ( $ "{ codeCoverageDir } coverage.{ DefaultFramework } .xml") , CoverallsNetReportType . OpenCover , new CoverallsNetSettings ( )
305+ {
306+ RepoToken = coverallsToken
307+ } ) ;
308+ }
309+ catch ( Exception e )
310+ {
311+ Warning ( e . Message ) ;
312+ }
313+
314+ try
315+ {
316+ Codecov ( $ "{ codeCoverageDir } coverage.{ DefaultFramework } .xml", codecovToken ) ;
279317 }
280318 catch ( Exception e )
281319 {
@@ -288,7 +326,7 @@ Task("Generate-Code-Coverage-Report")
288326 . Does ( ( ) =>
289327{
290328 ReportGenerator (
291- new FilePath ( $ "{ codeCoverageDir } coverage.xml") ,
329+ new FilePath ( $ "{ codeCoverageDir } coverage.{ DefaultFramework } . xml") ,
292330 codeCoverageDir ,
293331 new ReportGeneratorSettings ( ) {
294332 ClassFilters = new [ ] { "*.UnitTests*" }
@@ -381,20 +419,19 @@ Task("Publish-MyGet")
381419Task( "Create-Release-Notes" )
382420 . Does ( ( ) =>
383421{
384- var settings = new GitReleaseManagerCreateSettings
385- {
386- Name = milestone ,
387- Milestone = milestone ,
388- Prerelease = false ,
389- TargetCommitish = "main"
390- } ;
391-
392422 if ( string . IsNullOrEmpty ( gitHubToken ) )
393423 {
394424 throw new InvalidOperationException ( "GitHub token was not provided." ) ;
395425 }
396426
397- GitReleaseManagerCreate ( gitHubToken , gitHubRepoOwner , gitHubRepo , settings ) ;
427+ GitReleaseManagerCreate ( gitHubToken , gitHubRepoOwner , gitHubRepo , new GitReleaseManagerCreateSettings
428+ {
429+ Name = milestone ,
430+ Milestone = milestone ,
431+ Prerelease = false ,
432+ TargetCommitish = "main" ,
433+ Verbose = true
434+ } ) ;
398435} ) ;
399436
400437Task( "Publish-GitHub-Release" )
@@ -410,7 +447,10 @@ Task("Publish-GitHub-Release")
410447 throw new InvalidOperationException ( "GitHub token was not provided." ) ;
411448 }
412449
413- GitReleaseManagerClose ( gitHubToken , gitHubRepoOwner , gitHubRepo , milestone ) ;
450+ GitReleaseManagerClose ( gitHubToken , gitHubRepoOwner , gitHubRepo , milestone , new GitReleaseManagerCloseMilestoneSettings
451+ {
452+ Verbose = true
453+ } ) ;
414454} ) ;
415455
416456Task( "Generate-Benchmark-Report" )
0 commit comments