Skip to content

Commit

Permalink
Refined Build (ChilliCream#2075)
Browse files Browse the repository at this point in the history
  • Loading branch information
michaelstaib authored Jun 18, 2020
1 parent 28e0b45 commit f7fe8b5
Show file tree
Hide file tree
Showing 10 changed files with 389 additions and 193 deletions.
12 changes: 12 additions & 0 deletions .build/Build.Environment.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
using System;
using Nuke.Common;
using Nuke.Common.IO;

partial class Build : NukeBuild
{
AbsolutePath SourceDirectory => RootDirectory / "src";
AbsolutePath AllSolutionFile => SourceDirectory / "All.sln";
AbsolutePath OutputDirectory => RootDirectory / "output";
AbsolutePath TestResultDirectory => OutputDirectory / "test-results";
}

11 changes: 11 additions & 0 deletions .build/Build.GitRepository.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
using System;
using Nuke.Common;
using Nuke.Common.Git;
using Nuke.Common.Tools.GitVersion;

partial class Build : NukeBuild
{
[GitRepository] readonly GitRepository GitRepository;
[GitVersion] readonly GitVersion GitVersion;
}

59 changes: 59 additions & 0 deletions .build/Build.Publish.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using Nuke.Common;
using Nuke.Common.CI;
using Nuke.Common.CI.AppVeyor;
using Nuke.Common.CI.AzurePipelines;
using Nuke.Common.CI.GitHubActions;
using Nuke.Common.CI.TeamCity;
using Nuke.Common.Execution;
using Nuke.Common.Git;
using Nuke.Common.IO;
using Nuke.Common.ProjectModel;
using Nuke.Common.Tooling;
using Nuke.Common.Tools.Coverlet;
using Nuke.Common.Tools.DotCover;
using Nuke.Common.Tools.DotNet;
using Nuke.Common.Tools.GitVersion;
using Nuke.Common.Tools.InspectCode;
using Nuke.Common.Tools.ReportGenerator;
using Nuke.Common.Tools.Slack;
using Nuke.Common.Tools.SonarScanner;
using Nuke.Common.Utilities;
using Nuke.Common.Utilities.Collections;
using static Nuke.Common.ChangeLog.ChangelogTasks;
using static Nuke.Common.ControlFlow;
using static Nuke.Common.Gitter.GitterTasks;
using static Nuke.Common.IO.CompressionTasks;
using static Nuke.Common.Tools.DotNet.DotNetTasks;
using static Nuke.Common.Tools.Git.GitTasks;
using static Nuke.Common.Tools.InspectCode.InspectCodeTasks;
using static Nuke.Common.IO.FileSystemTasks;
using static Nuke.Common.Tools.ReportGenerator.ReportGeneratorTasks;
using static Nuke.Common.Tools.Slack.SlackTasks;
using static Nuke.Common.Tools.SonarScanner.SonarScannerTasks;
using static Helpers;


partial class Build : NukeBuild
{
string ChangelogFile => RootDirectory / "CHANGELOG.md";
AbsolutePath PackageDirectory => OutputDirectory / "packages";
// IEnumerable<string> ChangelogSectionNotes => ExtractChangelogSectionNotes(ChangelogFile);

Target Pack => _ => _
.DependsOn(Restore)
.Executes(() =>
{
DotNetPack(_ => _
.SetProject(AllSolutionFile)
.SetNoBuild(InvokedTargets.Contains(Compile))
.SetConfiguration(Configuration)
.SetOutputDirectory(PackageDirectory)
.SetVersion(GitVersion.SemVer));
//.SetPackageReleaseNotes(GetNuGetReleaseNotes(ChangelogFile, GitRepository)));
});
}
82 changes: 82 additions & 0 deletions .build/Build.Sonar.cs
Original file line number Diff line number Diff line change
@@ -1,7 +1,89 @@
using Nuke.Common;
using Nuke.Common.CI;
using Nuke.Common.Tooling;
using Nuke.Common.Tools.DotNet;
using Nuke.Common.Tools.SonarScanner;
using static Nuke.Common.Tools.DotNet.DotNetTasks;
using static Nuke.Common.Tools.SonarScanner.SonarScannerTasks;

partial class Build : NukeBuild
{
[Parameter] readonly string SonarToken;
[Parameter] readonly string SonarServer = "https://sonarcloud.io";

Target SonarPr => _ => _
.DependsOn(Cover)
.Produces(TestResultDirectory / "*.trx")
.Produces(TestResultDirectory / "*.xml")
.Executes(() =>
{
string[] gitHubRefParts = GitHubRef.Split('/');
if (gitHubRefParts.Length < 4)
{
Logger.Error("The GitHub_Ref variable has not the expected structure. {0}", GitHubRef);
return;
}

SonarScannerBegin(c => SonarBeginPrSettings(c, gitHubRefParts[^2]));
DotNetBuild(SonarBuildAll);
SonarScannerEnd(SonarEndSettings);
});

Target Sonar => _ => _
.DependsOn(Cover)
.Produces(TestResultDirectory / "*.trx")
.Produces(TestResultDirectory / "*.xml")
.Executes(() =>
{
Logger.Info("Creating Sonar analysis for version: {0} ...", GitVersion.SemVer);
SonarScannerBegin(SonarBeginFullSettings);
DotNetBuild(SonarBuildAll);
SonarScannerEnd(SonarEndSettings);
});

SonarScannerBeginSettings SonarBeginPrSettings(SonarScannerBeginSettings settings, string gitHubPrNumber) =>
SonarBeginBaseSettings(settings)
.SetArgumentConfigurator(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}", "true"));

SonarScannerBeginSettings SonarBeginFullSettings(SonarScannerBeginSettings settings) =>
SonarBeginBaseSettings(settings).SetVersion(GitVersion.SemVer);

SonarScannerBeginSettings SonarBeginBaseSettings(SonarScannerBeginSettings settings) =>
SonarBaseSettings(settings)
.SetProjectKey("HotChocolate")
.SetName("HotChocolate")
.SetServer(SonarServer)
.SetLogin(SonarToken)
.AddOpenCoverPaths(TestResultDirectory / "*.xml")
.SetVSTestReports(TestResultDirectory / "*.trx")
.SetArgumentConfigurator(t => t
.Add("/o:{0}", "chillicream")
.Add("/d:sonar.cs.roslyn.ignoreIssues={0}", "true"));

SonarScannerBeginSettings SonarBaseSettings(SonarScannerBeginSettings settings) =>
settings
.SetLogin(SonarToken)
.SetWorkingDirectory(RootDirectory);

SonarScannerEndSettings SonarEndSettings(SonarScannerEndSettings settings) =>
settings
.SetLogin(SonarToken)
.SetWorkingDirectory(RootDirectory);

DotNetBuildSettings SonarBuildAll(DotNetBuildSettings settings) =>
SonarBuildBaseSettings(settings)
.SetProjectFile(AllSolutionFile);

DotNetBuildSettings SonarBuildBaseSettings(DotNetBuildSettings settings) =>
settings
.SetNoRestore(InvokedTargets.Contains(Restore))
.SetConfiguration(Configuration.Debug)
.SetWorkingDirectory(RootDirectory);
}
82 changes: 82 additions & 0 deletions .build/Build.Tests.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,82 @@
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using Nuke.Common;
using Nuke.Common.CI;
using Nuke.Common.CI.AppVeyor;
using Nuke.Common.CI.AzurePipelines;
using Nuke.Common.CI.GitHubActions;
using Nuke.Common.CI.TeamCity;
using Nuke.Common.Execution;
using Nuke.Common.Git;
using Nuke.Common.IO;
using Nuke.Common.ProjectModel;
using Nuke.Common.Tooling;
using Nuke.Common.Tools.Coverlet;
using Nuke.Common.Tools.DotCover;
using Nuke.Common.Tools.DotNet;
using Nuke.Common.Tools.GitVersion;
using Nuke.Common.Tools.InspectCode;
using Nuke.Common.Tools.ReportGenerator;
using Nuke.Common.Tools.Slack;
using Nuke.Common.Tools.SonarScanner;
using Nuke.Common.Utilities;
using Nuke.Common.Utilities.Collections;
using static Nuke.Common.ChangeLog.ChangelogTasks;
using static Nuke.Common.ControlFlow;
using static Nuke.Common.Gitter.GitterTasks;
using static Nuke.Common.IO.CompressionTasks;
using static Nuke.Common.Tools.DotNet.DotNetTasks;
using static Nuke.Common.Tools.Git.GitTasks;
using static Nuke.Common.Tools.InspectCode.InspectCodeTasks;
using static Nuke.Common.IO.FileSystemTasks;
using static Nuke.Common.Tools.ReportGenerator.ReportGeneratorTasks;
using static Nuke.Common.Tools.Slack.SlackTasks;
using static Nuke.Common.Tools.SonarScanner.SonarScannerTasks;
using static Helpers;


partial class Build : NukeBuild
{
[Partition(4)] readonly Partition TestPartition;

IEnumerable<Project> TestProjects => TestPartition.GetCurrent(
ProjectModelTasks.ParseSolution(AllSolutionFile).GetProjects("*.Tests"));

Target Test => _ => _
.DependsOn(Restore)
.Produces(TestResultDirectory / "*.trx")
.Partition(() => TestPartition)
.Executes(() => DotNetTest(TestSettings));

Target Cover => _ => _.DependsOn(Restore)
.Produces(TestResultDirectory / "*.trx")
.Produces(TestResultDirectory / "*.xml")
.Partition(() => TestPartition)
.Executes(() => DotNetTest(CoverSettings));

IEnumerable<DotNetTestSettings> TestSettings(DotNetTestSettings settings) =>
TestBaseSettings(settings)
.CombineWith(TestProjects, (_, v) => _
.SetProjectFile(v)
.SetLogger($"trx;LogFileName={v.Name}.trx"));

IEnumerable<DotNetTestSettings> CoverSettings(DotNetTestSettings settings) =>
TestBaseSettings(settings)
.EnableCollectCoverage()
.SetCoverletOutputFormat(CoverletOutputFormat.opencover)
.SetExcludeByFile("*.Generated.cs")
.CombineWith(TestProjects, (_, v) => _
.SetProjectFile(v)
.SetLogger($"trx;LogFileName={v.Name}.trx")
.SetCoverletOutput(TestResultDirectory / $"{v.Name}.xml"));

DotNetTestSettings TestBaseSettings(DotNetTestSettings settings) =>
settings
.SetConfiguration(Configuration.Debug)
.SetNoRestore(InvokedTargets.Contains(Restore))
.ResetVerbosity()
.SetResultsDirectory(TestResultDirectory);
}
Loading

0 comments on commit f7fe8b5

Please sign in to comment.