Skip to content

Commit

Permalink
Merge branch 'master' into exec-eng-dataloader
Browse files Browse the repository at this point in the history
  • Loading branch information
michaelstaib committed Jun 17, 2020
2 parents 938d6fb + 8761835 commit 8d2cba4
Show file tree
Hide file tree
Showing 131 changed files with 7,923 additions and 273 deletions.
11 changes: 11 additions & 0 deletions .build/.editorconfig
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
[*.cs]
dotnet_style_qualification_for_field = false:warning
dotnet_style_qualification_for_property = false:warning
dotnet_style_qualification_for_method = false:warning
dotnet_style_qualification_for_event = false:warning
dotnet_style_require_accessibility_modifiers = never:warning

csharp_style_expression_bodied_methods = true:silent
csharp_style_expression_bodied_properties = true:warning
csharp_style_expression_bodied_indexers = true:warning
csharp_style_expression_bodied_accessors = true:warning
24 changes: 24 additions & 0 deletions .build/.vscode/tasks.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
{
// See https://go.microsoft.com/fwlink/?LinkId=733558
// for the documentation about the tasks.json format
"version": "2.0.0",
"tasks": [
{
"label": "build",
"command": "dotnet",
"type": "shell",
"args": [
"build",
// Ask dotnet build to generate full paths for file names.
"/property:GenerateFullPaths=true",
// Do not generate summary otherwise it leads to duplicate errors in Problems panel
"/consoleloggerparameters:NoSummary"
],
"group": "build",
"presentation": {
"reveal": "silent"
},
"problemMatcher": "$msCompile"
}
]
}
12 changes: 12 additions & 0 deletions .build/Build.GitHub.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
using System;
using Nuke.Common;

partial class Build : NukeBuild
{
[Parameter] readonly string GitHubToken;
[Parameter] readonly string GitHubRef = Environment.GetEnvironmentVariable("GITHUB_REF");
[Parameter] readonly string GitHubRepository = Environment.GetEnvironmentVariable("GITHUB_REPOSITORY");
[Parameter] readonly string GitHubHeadRef = Environment.GetEnvironmentVariable("HC_GITHUB_HEAD_REF");
[Parameter] readonly string GitHubBaseRef = Environment.GetEnvironmentVariable("HC_GITHUB_BASE_REF");
}

7 changes: 7 additions & 0 deletions .build/Build.Sonar.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
using Nuke.Common;

partial class Build : NukeBuild
{
[Parameter] readonly string SonarToken;
[Parameter] readonly string SonarServer = "https://sonarcloud.io";
}
265 changes: 265 additions & 0 deletions .build/Build.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,265 @@
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;

[GitHubActions(
"sonar-pr-hotchocolate",
GitHubActionsImage.UbuntuLatest,
On = new[] { GitHubActionsTrigger.PullRequest },
InvokedTargets = new[] { nameof(SonarPr) },
ImportGitHubTokenAs = nameof(GitHubToken),
ImportSecrets = new[] { nameof(SonarToken) },
AutoGenerate = false)]
[GitHubActions(
"tests-pr-hotchocolate",
GitHubActionsImage.UbuntuLatest,
On = new[] { GitHubActionsTrigger.Push },
InvokedTargets = new[] { nameof(Test) },
ImportGitHubTokenAs = nameof(GitHubToken),
AutoGenerate = false)]
[CheckBuildProjectConfigurations]
[UnsetVisualStudioEnvironmentVariables]
partial class Build : NukeBuild
{
public static int Main() => Execute<Build>(x => x.CompileHC);

[Parameter("Configuration to build - Default is 'Debug' (local) or 'Release' (server)")]
readonly Configuration Configuration = IsLocalBuild ? Configuration.Debug : Configuration.Release;

AbsolutePath SourceDirectory => RootDirectory / "src";
AbsolutePath HotChocolateDirectory => SourceDirectory / "HotChocolate";
Solution HotChocolateSolution => ProjectModelTasks.ParseSolution(HotChocolateDirectory / "HotChocolate.sln");
AbsolutePath GreenDonutDirectory => SourceDirectory / "GreenDonut";
Solution GreenDonutSolution => ProjectModelTasks.ParseSolution(GreenDonutDirectory / "GreenDonut.sln");
AbsolutePath StrawberryShakeDirectory => SourceDirectory / "StrawberryShake";
Solution StrawberryShakeClientSolution => ProjectModelTasks.ParseSolution(StrawberryShakeDirectory / "Client" / "StrawberryShake.Client.sln");
Solution StrawberryShakeCodeGenerationSolution => ProjectModelTasks.ParseSolution(StrawberryShakeDirectory / "CodeGeneration" / "StrawberryShake.CodeGeneration.sln");

AbsolutePath OutputDirectory => RootDirectory / "output";

[GitRepository] readonly GitRepository GitRepository;
[GitVersion] readonly GitVersion GitVersion;

Target Clean => _ => _
.Before(Restore)
.Executes(() =>
{
});

Target Restore => _ => _
.Executes(() =>
{
DotNetRestore(c => c
.SetProjectFile(GreenDonutSolution));
DotNetRestore(c => c
.SetProjectFile(HotChocolateSolution));
DotNetRestore(c => c
.SetProjectFile(StrawberryShakeClientSolution));
DotNetRestore(c => c
.SetProjectFile(StrawberryShakeCodeGenerationSolution));
});

Target CompileHC => _ => _
.DependsOn(Restore)
.Executes(() =>
{
DotNetBuild(c => c
.SetProjectFile(HotChocolateSolution)
.SetNoRestore(InvokedTargets.Contains(Restore))
.SetConfiguration(Configuration)
.SetAssemblyVersion(GitVersion.AssemblySemVer)
.SetFileVersion(GitVersion.AssemblySemFileVer)
.SetInformationalVersion(GitVersion.InformationalVersion)
.SetVersion(GitVersion.SemVer));
});

[Partition(4)] readonly Partition TestPartition;
AbsolutePath TestResultDirectory => OutputDirectory / "test-results";

IEnumerable<Project> TestProjects => TestPartition.GetCurrent(
GreenDonutSolution.GetProjects("*.Tests").Concat(
HotChocolateSolution.GetProjects("*.Tests")).Concat(
StrawberryShakeClientSolution.GetProjects("*.Tests")).Concat(
StrawberryShakeCodeGenerationSolution.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);

string ChangelogFile => RootDirectory / "CHANGELOG.md";
AbsolutePath PackageDirectory => OutputDirectory / "packages";
// IEnumerable<string> ChangelogSectionNotes => ExtractChangelogSectionNotes(ChangelogFile);

Target PackHC => _ => _
.DependsOn(Restore)
.Executes(() =>
{
DotNetPack(_ => _
.SetProject(HotChocolateSolution)
.SetNoBuild(InvokedTargets.Contains(CompileHC))
.SetConfiguration(Configuration)
.SetOutputDirectory(PackageDirectory)
.SetVersion(GitVersion.SemVer));
//.SetPackageReleaseNotes(GetNuGetReleaseNotes(ChangelogFile, GitRepository)));
});

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(SonarBuildGreenDonut);
DotNetBuild(SonarBuildHotChocolate);
DotNetBuild(SonarBuildStrawberryShakeClient);
DotNetBuild(SonarBuildStrawberryShakeCodeGeneration);
SonarScannerEnd(SonarEndSettings);
});

Target SonarFull => _ => _
.DependsOn(Cover)
.Produces(TestResultDirectory / "*.trx")
.Produces(TestResultDirectory / "*.xml")
.Executes(() =>
{
Logger.Info("Creating Sonar analysis for version: {0}", GitVersion.SemVer);
SonarScannerBegin(SonarBeginFullSettings);
DotNetBuild(SonarBuildGreenDonut);
DotNetBuild(SonarBuildHotChocolate);
DotNetBuild(SonarBuildStrawberryShakeClient);
DotNetBuild(SonarBuildStrawberryShakeCodeGeneration);
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 SonarBuildGreenDonut(DotNetBuildSettings settings) =>
SonarBuildBaseSettings(settings)
.SetProjectFile(GreenDonutSolution);

DotNetBuildSettings SonarBuildHotChocolate(DotNetBuildSettings settings) =>
SonarBuildBaseSettings(settings)
.SetProjectFile(HotChocolateSolution);

DotNetBuildSettings SonarBuildStrawberryShakeClient(DotNetBuildSettings settings) =>
SonarBuildBaseSettings(settings)
.SetProjectFile(StrawberryShakeClientSolution);

DotNetBuildSettings SonarBuildStrawberryShakeCodeGeneration(DotNetBuildSettings settings) =>
SonarBuildBaseSettings(settings)
.SetProjectFile(StrawberryShakeCodeGenerationSolution);

DotNetBuildSettings SonarBuildBaseSettings(DotNetBuildSettings settings) =>
settings
.SetNoRestore(InvokedTargets.Contains(Restore))
.SetConfiguration(Configuration.Debug)
.SetWorkingDirectory(RootDirectory);
}

19 changes: 19 additions & 0 deletions .build/Build.csproj
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
<Project Sdk="Microsoft.NET.Sdk">

<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>netcoreapp3.0</TargetFramework>
<RootNamespace></RootNamespace>
<NoWarn>CS0649;CS0169</NoWarn>
<NukeRootDirectory>..</NukeRootDirectory>
<NukeScriptDirectory>..</NukeScriptDirectory>
</PropertyGroup>

<ItemGroup>
<PackageReference Include="Nuke.Common" Version="0.24.11" />
<PackageDownload Include="GitVersion.Tool" Version="[5.1.1]" />
<PackageDownload Include="NuGet.CommandLine" Version="[5.5.1]" />
<PackageDownload Include="dotnet-sonarscanner" Version="[4.7.1]" />
</ItemGroup>

</Project>
27 changes: 27 additions & 0 deletions .build/Build.csproj.DotSettings
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
<wpf:ResourceDictionary xml:space="preserve" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:s="clr-namespace:System;assembly=mscorlib" xmlns:ss="urn:shemas-jetbrains-com:settings-storage-xaml" xmlns:wpf="http://schemas.microsoft.com/winfx/2006/xaml/presentation">
<s:String x:Key="/Default/CodeInspection/Highlighting/InspectionSeverities/=HeapView_002EDelegateAllocation/@EntryIndexedValue">DO_NOT_SHOW</s:String>
<s:String x:Key="/Default/CodeInspection/Highlighting/InspectionSeverities/=VariableHidesOuterVariable/@EntryIndexedValue">DO_NOT_SHOW</s:String>
<s:String x:Key="/Default/CodeInspection/Highlighting/InspectionSeverities/=ClassNeverInstantiated_002EGlobal/@EntryIndexedValue">DO_NOT_SHOW</s:String>
<s:String x:Key="/Default/CodeInspection/Highlighting/InspectionSeverities/=MemberCanBeMadeStatic_002ELocal/@EntryIndexedValue">DO_NOT_SHOW</s:String>
<s:String x:Key="/Default/CodeStyle/CodeFormatting/CSharpCodeStyle/DEFAULT_INTERNAL_MODIFIER/@EntryValue">Implicit</s:String>
<s:String x:Key="/Default/CodeStyle/CodeFormatting/CSharpCodeStyle/DEFAULT_PRIVATE_MODIFIER/@EntryValue">Implicit</s:String>
<s:String x:Key="/Default/CodeStyle/CodeFormatting/CSharpCodeStyle/METHOD_OR_OPERATOR_BODY/@EntryValue">ExpressionBody</s:String>
<s:String x:Key="/Default/CodeStyle/CodeFormatting/CSharpCodeStyle/ThisQualifier/INSTANCE_MEMBERS_QUALIFY_MEMBERS/@EntryValue">0</s:String>
<s:String x:Key="/Default/CodeStyle/CodeFormatting/CSharpFormat/ANONYMOUS_METHOD_DECLARATION_BRACES/@EntryValue">NEXT_LINE</s:String>
<s:Boolean x:Key="/Default/CodeStyle/CodeFormatting/CSharpFormat/KEEP_USER_LINEBREAKS/@EntryValue">True</s:Boolean>
<s:Boolean x:Key="/Default/CodeStyle/CodeFormatting/CSharpFormat/WRAP_AFTER_INVOCATION_LPAR/@EntryValue">False</s:Boolean>
<s:Int64 x:Key="/Default/CodeStyle/CodeFormatting/CSharpFormat/MAX_ATTRIBUTE_LENGTH_FOR_SAME_LINE/@EntryValue">120</s:Int64>
<s:String x:Key="/Default/CodeStyle/CodeFormatting/CSharpFormat/PLACE_FIELD_ATTRIBUTE_ON_SAME_LINE_EX/@EntryValue">IF_OWNER_IS_SINGLE_LINE</s:String>
<s:String x:Key="/Default/CodeStyle/CodeFormatting/CSharpFormat/WRAP_ARGUMENTS_STYLE/@EntryValue">WRAP_IF_LONG</s:String>
<s:Boolean x:Key="/Default/CodeStyle/CodeFormatting/CSharpFormat/PLACE_SIMPLE_ANONYMOUSMETHOD_ON_SINGLE_LINE/@EntryValue">False</s:Boolean>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/PredefinedNamingRules/=PrivateInstanceFields/@EntryIndexedValue">&lt;Policy Inspect="True" Prefix="" Suffix="" Style="AaBb" /&gt;</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/PredefinedNamingRules/=PrivateStaticFields/@EntryIndexedValue">&lt;Policy Inspect="True" Prefix="" Suffix="" Style="AaBb" /&gt;</s:String>
<s:Boolean x:Key="/Default/Environment/SettingsMigration/IsMigratorApplied/=JetBrains_002EReSharper_002EPsi_002ECSharp_002ECodeStyle_002ECSharpAttributeForSingleLineMethodUpgrade/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/Environment/SettingsMigration/IsMigratorApplied/=JetBrains_002EReSharper_002EPsi_002ECSharp_002ECodeStyle_002ECSharpKeepExistingMigration/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/Environment/SettingsMigration/IsMigratorApplied/=JetBrains_002EReSharper_002EPsi_002ECSharp_002ECodeStyle_002ECSharpPlaceEmbeddedOnSameLineMigration/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/Environment/SettingsMigration/IsMigratorApplied/=JetBrains_002EReSharper_002EPsi_002ECSharp_002ECodeStyle_002ECSharpRenamePlacementToArrangementMigration/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/Environment/SettingsMigration/IsMigratorApplied/=JetBrains_002EReSharper_002EPsi_002ECSharp_002ECodeStyle_002ECSharpUseContinuousIndentInsideBracesMigration/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/Environment/SettingsMigration/IsMigratorApplied/=JetBrains_002EReSharper_002EPsi_002ECSharp_002ECodeStyle_002ESettingsUpgrade_002EAddAccessorOwnerDeclarationBracesMigration/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/Environment/SettingsMigration/IsMigratorApplied/=JetBrains_002EReSharper_002EPsi_002ECSharp_002ECodeStyle_002ESettingsUpgrade_002ECSharpPlaceAttributeOnSameLineMigration/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/Environment/SettingsMigration/IsMigratorApplied/=JetBrains_002EReSharper_002EPsi_002ECSharp_002ECodeStyle_002ESettingsUpgrade_002EMigrateBlankLinesAroundFieldToBlankLinesAroundProperty/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/Environment/SettingsMigration/IsMigratorApplied/=JetBrains_002EReSharper_002EPsi_002ECSharp_002ECodeStyle_002ESettingsUpgrade_002EMigrateThisQualifierSettings/@EntryIndexedValue">True</s:Boolean></wpf:ResourceDictionary>
6 changes: 6 additions & 0 deletions .config/dotnet-tools.json
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,12 @@
"commands": [
"dotnet-sonarscanner"
]
},
"nuke.globaltool": {
"version": "0.24.11",
"commands": [
"nuke"
]
}
}
}
Loading

0 comments on commit 8d2cba4

Please sign in to comment.