forked from ChilliCream/graphql-platform
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathBuild.Sonar.cs
109 lines (93 loc) · 4.53 KB
/
Build.Sonar.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
using Nuke.Common;
using Nuke.Common.Tooling;
using Nuke.Common.Tools.DotNet;
using Nuke.Common.Tools.SonarScanner;
using Serilog;
using static System.IO.Path;
using static Nuke.Common.Tools.DotNet.DotNetTasks;
using static Nuke.Common.Tools.SonarScanner.SonarScannerTasks;
using static Helpers;
partial class Build
{
[Parameter] readonly string SonarToken;
[Parameter] readonly string SonarServer = "https://sonarcloud.io";
Target SonarPr => _ => _
.Requires(() => GitHubRepository != null)
.Requires(() => GitHubHeadRef != null)
.Requires(() => GitHubBaseRef != null)
.Requires(() => GitHubPRNumber != null)
.Executes(() =>
{
Log.Information($"GitHubRepository: {GitHubRepository}");
Log.Information($"GitHubHeadRef: {GitHubHeadRef}");
Log.Information($"GitHubBaseRef: {GitHubBaseRef}");
Log.Information($"GitHubPRNumber: {GitHubPRNumber}");
DotNetBuildSonarSolution(AllSolutionFile);
DotNetRestore(c => c
.SetProjectFile(AllSolutionFile)
.SetProcessWorkingDirectory(RootDirectory));
SonarScannerBegin(SonarBeginPrSettings);
DotNetBuild(SonarBuildAll);
SonarScannerEnd(SonarEndSettings);
});
Target Sonar => _ => _
.Executes(() =>
{
DotNetBuildSonarSolution(AllSolutionFile);
DotNetRestore(c => c
.SetProjectFile(AllSolutionFile)
.SetProcessWorkingDirectory(RootDirectory));
Log.Information("Creating Sonar analysis for version: {0} ...", SemVersion);
SonarScannerBegin(SonarBeginFullSettings);
DotNetBuild(SonarBuildAll);
SonarScannerEnd(SonarEndSettings);
});
SonarScannerBeginSettings SonarBeginPrSettings(SonarScannerBeginSettings settings) =>
SonarBeginBaseSettings(settings)
.SetProcessArgumentConfigurator(t => t
.Add("/o:{0}", "chillicream")
.Add("/d:sonar.pullrequest.provider={0}", "github")
.Add("/d:sonar.pullrequest.github.repository={0}", GitHubRepository)
.Add("/d:sonar.pullrequest.key={0}", GitHubPRNumber)
.Add("/d:sonar.pullrequest.branch={0}", GitHubHeadRef)
.Add("/d:sonar.pullrequest.base={0}", GitHubBaseRef)
.Add("/d:sonar.cs.roslyn.ignoreIssues={0}", "false"))
.SetFramework(Net50);
SonarScannerBeginSettings SonarBeginFullSettings(SonarScannerBeginSettings settings) =>
SonarBeginBaseSettings(settings)
.SetVersion(SemVersion)
.SetFramework(Net50);
SonarScannerBeginSettings SonarBeginBaseSettings(SonarScannerBeginSettings settings) =>
SonarBaseSettings(settings)
.SetProjectKey("HotChocolate")
.SetName("HotChocolate")
.SetServer(SonarServer)
.SetLogin(SonarToken)
.AddOpenCoverPaths(TestResultDirectory / "*.xml")
.SetVSTestReports(TestResultDirectory / "*.trx")
.AddSourceExclusions("**/Generated/**/*.*,**/*.Designer.cs,**/*.generated.cs,**/*.js,**/*.html,**/*.css,**/Sample/**/*.*,**/Samples.*/**/*.*,**/*Tools.*/**/*.*,**/Program.Dev.cs, **/Program.cs,**/*.ts,**/*.tsx,**/*EventSource.cs,**/*EventSources.cs,**/*.Samples.cs,**/*Tests.*/**/*.*,**/*Test.*/**/*.*")
.SetProcessArgumentConfigurator(t => t
.Add("/o:{0}", "chillicream")
.Add("/d:sonar.cs.roslyn.ignoreIssues={0}", "false"));
SonarScannerBeginSettings SonarBaseSettings(SonarScannerBeginSettings settings) =>
settings
.SetLogin(SonarToken)
.SetProcessWorkingDirectory(RootDirectory);
SonarScannerEndSettings SonarEndSettings(SonarScannerEndSettings settings) =>
settings
.SetLogin(SonarToken)
.SetProcessWorkingDirectory(RootDirectory)
.SetFramework(Net50);
DotNetBuildSettings SonarBuildAll(DotNetBuildSettings settings) =>
settings
.SetProjectFile(AllSolutionFile)
.SetNoRestore(true)
.SetConfiguration(Debug)
.SetProcessWorkingDirectory(RootDirectory);
bool IsRelevantForSonar(string fileName)
=> !ExcludedCover.Contains(GetFileNameWithoutExtension(fileName)) &&
!fileName.Contains("example") &&
!fileName.Contains("sample") &&
!fileName.Contains("HotChocolate.Types.Analyzers") &&
!fileName.Contains("StrawberryShake.CodeGeneration.CSharp.Analyzers");
}