From c9e8efa65c969e055ef6fa297dccd51379e6c9b9 Mon Sep 17 00:00:00 2001 From: dalibor Date: Thu, 25 Nov 2021 17:48:54 +0100 Subject: [PATCH 1/8] Add Sonar draft --- .build/Build..cs | 7 ++++ .build/Build.Init.cs | 1 + .build/Build.Sonar.cs | 73 +++++++++++++++++++++++++++++++++++++ .build/_build.csproj | 2 + .github/workflows/sonar.yml | 37 +++++++++++++++++++ .nuke/build.schema.json | 11 ++++++ 6 files changed, 131 insertions(+) create mode 100644 .build/Build.Sonar.cs create mode 100644 .github/workflows/sonar.yml diff --git a/.build/Build..cs b/.build/Build..cs index 6eaddbf..99a725e 100644 --- a/.build/Build..cs +++ b/.build/Build..cs @@ -45,6 +45,13 @@ // }, // OnPushBranches = new[] { "main" }, // AutoGenerate = false)] +[GitHubActions( + "sonar", + GitHubActionsImage.WindowsLatest, + On = new[] { GitHubActionsTrigger.PullRequest }, + InvokedTargets = new[] { nameof(Sonar) }, + ImportSecrets = new[] { nameof(SonarToken) }, + AutoGenerate = false)] [CheckBuildProjectConfigurations] [ShutdownDotNetAfterServerBuild] partial class Build : NukeBuild diff --git a/.build/Build.Init.cs b/.build/Build.Init.cs index 58ef028..dbab9b4 100644 --- a/.build/Build.Init.cs +++ b/.build/Build.Init.cs @@ -21,6 +21,7 @@ partial class Build : NukeBuild AbsolutePath Scheduler_DB_Cfg => RootDirectory / "Docker" / "PostgresSql" / "SchedulerDB.sh"; string postgres_db_name = "trouble_db"; + //--------------- // Build process //--------------- diff --git a/.build/Build.Sonar.cs b/.build/Build.Sonar.cs new file mode 100644 index 0000000..f17f2b3 --- /dev/null +++ b/.build/Build.Sonar.cs @@ -0,0 +1,73 @@ + +using Nuke.Common; +using Nuke.Common.Tools.SonarScanner; +using static Nuke.Common.Tools.SonarScanner.SonarScannerTasks; + +partial class Build : NukeBuild +{ + + //--------------- + // Enviroment + //--------------- + + [Parameter] readonly string SonarToken; + const string SonarProjectKey = "trouble-training"; + + [Parameter("Sonar server")] + readonly string SonarServer = IsLocalBuild ? "https://sonarcloud.io" : "https://sonarcloud.io"; // change url for local server + + string[] sonar_path_exclude = new string[]{ + "**/Generated/**/*", + "**/*.generated.cs", + "**/*.js", + "**/*.ts", + "**/*.tsx", + "**/*.html", + "**/*.css", + "**/*.cmd", + "**/*.ps1", + "**/*.json", + "**/*.sh", + "**/*.md", + "**/bin/*", + "**/obj/*", + "**/Tests/*", + "**/Test/*", + "**/node_modules/**/*" + }; + + //--------------- + // Build process + //--------------- + + Target SonarBegin => _ => _ + .Before( + API_Compile, + BFF_Compile, + Identity_Compile, + Frontend_Restore + ) + .Requires(() => SonarToken) + .Unlisted() + .Executes(() => + { + SonarScannerBegin(s => s + .SetLogin(SonarToken) + .SetProjectKey(SonarProjectKey) + .SetServer(SonarServer) + .AddSourceExclusions(sonar_path_exclude) + .SetOpenCoverPaths(ArtifactsDirectory / "coverage.xml")); + }); + + Target Sonar => _ => _ + .DependsOn(SonarBegin, All) + .Requires(() => SonarToken) + .AssuredAfterFailure() + .Executes(() => + { + SonarScannerEnd(s => s + .SetLogin(SonarToken) + .SetFramework("net5.0")); + }); + +} \ No newline at end of file diff --git a/.build/_build.csproj b/.build/_build.csproj index 6f75fb0..08c6c94 100644 --- a/.build/_build.csproj +++ b/.build/_build.csproj @@ -15,6 +15,8 @@ + + diff --git a/.github/workflows/sonar.yml b/.github/workflows/sonar.yml new file mode 100644 index 0000000..5cd8b79 --- /dev/null +++ b/.github/workflows/sonar.yml @@ -0,0 +1,37 @@ +# ------------------------------------------------------------------------------ +# +# +# This code was generated. +# +# - To turn off auto-generation set: +# +# [GitHubActions (AutoGenerate = false)] +# +# - To trigger manual generation invoke: +# +# nuke --generate-configuration GitHubActions_sonar --host GitHubActions +# +# +# ------------------------------------------------------------------------------ + +name: sonar + +on: [pull_request] + +jobs: + windows-latest: + name: windows-latest + runs-on: windows-latest + steps: + - uses: actions/checkout@v1 + - name: Cache .nuke/temp, ~/.nuget/packages + uses: actions/cache@v2 + with: + path: | + .nuke/temp + ~/.nuget/packages + key: ${{ runner.os }}-${{ hashFiles('**/global.json', '**/*.csproj') }} + - name: Run './build.cmd All' + run: ./build.cmd All + env: + SonarToken: ${{ secrets.SONAR_TOKEN }} diff --git a/.nuke/build.schema.json b/.nuke/build.schema.json index 5927607..646c984 100644 --- a/.nuke/build.schema.json +++ b/.nuke/build.schema.json @@ -117,6 +117,8 @@ "SetupCertificates_CI", "SetupCertificates_Local", "SetupDevCertificates", + "Sonar", + "SonarBegin", "Start_API_Server", "Start_BFF_Server", "Start_Identity_Server", @@ -132,6 +134,13 @@ "type": "string", "description": "Path to a solution file that is automatically loaded" }, + "SonarServer": { + "type": "string", + "description": "Sonar server" + }, + "SonarToken": { + "type": "string" + }, "Target": { "type": "array", "description": "List of targets to be invoked. Default is '{default_target}'", @@ -181,6 +190,8 @@ "SetupCertificates_CI", "SetupCertificates_Local", "SetupDevCertificates", + "Sonar", + "SonarBegin", "Start_API_Server", "Start_BFF_Server", "Start_Identity_Server", From 1018c633dcf437a9cb6d855be2e5bf0b1e60a36d Mon Sep 17 00:00:00 2001 From: dalibor Date: Thu, 25 Nov 2021 18:09:30 +0100 Subject: [PATCH 2/8] Add separate build for Backend --- .build/Build..cs | 11 ++++++++--- .build/Build.Sonar.cs | 5 ++--- 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/.build/Build..cs b/.build/Build..cs index 99a725e..d54715c 100644 --- a/.build/Build..cs +++ b/.build/Build..cs @@ -138,6 +138,13 @@ protected override void OnBuildInitialized() Identity_Compile ); + Target Backend_All => _ => _ + .DependsOn( + API_All, + BFF_All, + Identity_All + ); + Target Frontend_All => _ => _ .DependsOn( Frontend_Clean, @@ -149,9 +156,7 @@ protected override void OnBuildInitialized() Target All => _ => _ .DependsOn( - API_All, - BFF_All, - Identity_All, + Backend_All, Frontend_All, Restore_Tools ); diff --git a/.build/Build.Sonar.cs b/.build/Build.Sonar.cs index f17f2b3..0c9b8df 100644 --- a/.build/Build.Sonar.cs +++ b/.build/Build.Sonar.cs @@ -44,8 +44,7 @@ partial class Build : NukeBuild .Before( API_Compile, BFF_Compile, - Identity_Compile, - Frontend_Restore + Identity_Compile ) .Requires(() => SonarToken) .Unlisted() @@ -60,7 +59,7 @@ partial class Build : NukeBuild }); Target Sonar => _ => _ - .DependsOn(SonarBegin, All) + .DependsOn(SonarBegin, Backend_All) .Requires(() => SonarToken) .AssuredAfterFailure() .Executes(() => From 596c540a3eef2e64360516f5e70085aaadcf587b Mon Sep 17 00:00:00 2001 From: dalibor Date: Thu, 25 Nov 2021 18:13:45 +0100 Subject: [PATCH 3/8] Rewrite sonar yaml --- .build/Build..cs | 4 ++-- .github/workflows/sonar.yml | 8 ++++---- .nuke/build.schema.json | 2 ++ 3 files changed, 8 insertions(+), 6 deletions(-) diff --git a/.build/Build..cs b/.build/Build..cs index d54715c..e1e453b 100644 --- a/.build/Build..cs +++ b/.build/Build..cs @@ -46,12 +46,12 @@ // OnPushBranches = new[] { "main" }, // AutoGenerate = false)] [GitHubActions( - "sonar", + "Sonar", GitHubActionsImage.WindowsLatest, On = new[] { GitHubActionsTrigger.PullRequest }, InvokedTargets = new[] { nameof(Sonar) }, ImportSecrets = new[] { nameof(SonarToken) }, - AutoGenerate = false)] + AutoGenerate = true)] [CheckBuildProjectConfigurations] [ShutdownDotNetAfterServerBuild] partial class Build : NukeBuild diff --git a/.github/workflows/sonar.yml b/.github/workflows/sonar.yml index 5cd8b79..9e6aad4 100644 --- a/.github/workflows/sonar.yml +++ b/.github/workflows/sonar.yml @@ -9,12 +9,12 @@ # # - To trigger manual generation invoke: # -# nuke --generate-configuration GitHubActions_sonar --host GitHubActions +# nuke --generate-configuration GitHubActions_Sonar --host GitHubActions # # # ------------------------------------------------------------------------------ -name: sonar +name: Sonar on: [pull_request] @@ -31,7 +31,7 @@ jobs: .nuke/temp ~/.nuget/packages key: ${{ runner.os }}-${{ hashFiles('**/global.json', '**/*.csproj') }} - - name: Run './build.cmd All' - run: ./build.cmd All + - name: Run './build.cmd Sonar' + run: ./build.cmd Sonar env: SonarToken: ${{ secrets.SONAR_TOKEN }} diff --git a/.nuke/build.schema.json b/.nuke/build.schema.json index 646c984..74f8ac9 100644 --- a/.nuke/build.schema.json +++ b/.nuke/build.schema.json @@ -86,6 +86,7 @@ "API_Restore", "API_Test", "API_UnitTest", + "Backend_All", "BFF_All", "BFF_Clean", "BFF_Compile", @@ -159,6 +160,7 @@ "API_Restore", "API_Test", "API_UnitTest", + "Backend_All", "BFF_All", "BFF_Clean", "BFF_Compile", From ac6fbfa1e4c092f6c0f50e3f0ec622f7f76e8e30 Mon Sep 17 00:00:00 2001 From: dalibor Date: Thu, 25 Nov 2021 18:25:57 +0100 Subject: [PATCH 4/8] Restore tools --- .build/Build.Sonar.cs | 4 +++- .config/dotnet-tools.json | 6 ++++++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/.build/Build.Sonar.cs b/.build/Build.Sonar.cs index 0c9b8df..7c70d02 100644 --- a/.build/Build.Sonar.cs +++ b/.build/Build.Sonar.cs @@ -46,6 +46,7 @@ partial class Build : NukeBuild BFF_Compile, Identity_Compile ) + .DependsOn(Restore_Tools) .Requires(() => SonarToken) .Unlisted() .Executes(() => @@ -55,7 +56,8 @@ partial class Build : NukeBuild .SetProjectKey(SonarProjectKey) .SetServer(SonarServer) .AddSourceExclusions(sonar_path_exclude) - .SetOpenCoverPaths(ArtifactsDirectory / "coverage.xml")); + .SetOpenCoverPaths(ArtifactsDirectory / "coverage.xml") + .SetFramework("net5.0")); }); Target Sonar => _ => _ diff --git a/.config/dotnet-tools.json b/.config/dotnet-tools.json index 9bb94e9..852c74a 100644 --- a/.config/dotnet-tools.json +++ b/.config/dotnet-tools.json @@ -25,6 +25,12 @@ "commands": [ "dotnet-format" ] + }, + "dotnet-sonarscanner": { + "version": "5.3.2", + "commands": [ + "dotnet-sonarscanner" + ] } } } \ No newline at end of file From 278da4d77e04d32ef3c43f4ceabcf24b2d7a2630 Mon Sep 17 00:00:00 2001 From: dalibor Date: Thu, 25 Nov 2021 18:37:13 +0100 Subject: [PATCH 5/8] Fix organization name --- .build/Build.Sonar.cs | 1 + .vscode/settings.json | 6 +++++- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/.build/Build.Sonar.cs b/.build/Build.Sonar.cs index 7c70d02..9adc885 100644 --- a/.build/Build.Sonar.cs +++ b/.build/Build.Sonar.cs @@ -54,6 +54,7 @@ partial class Build : NukeBuild SonarScannerBegin(s => s .SetLogin(SonarToken) .SetProjectKey(SonarProjectKey) + .SetOrganization("damikun") .SetServer(SonarServer) .AddSourceExclusions(sonar_path_exclude) .SetOpenCoverPaths(ArtifactsDirectory / "coverage.xml") diff --git a/.vscode/settings.json b/.vscode/settings.json index 42cd03f..3ecf521 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -5,5 +5,9 @@ "editor.semanticHighlighting.enabled": true, "csharp.semanticHighlighting.enabled": true, "omnisharp.enableEditorConfigSupport": true, - "omnisharp.useGlobalMono": "always" + "omnisharp.useGlobalMono": "always", + "search.exclude": { + "**/node_modules": true, + "**/tmp": true + } } \ No newline at end of file From b5f191f5ffe76c5d2fb0d0e49eebd65771ef6a9d Mon Sep 17 00:00:00 2001 From: dalibor Date: Thu, 25 Nov 2021 18:50:05 +0100 Subject: [PATCH 6/8] Sonar exclude paths --- .build/Build.Sonar.cs | 8 +++++--- Src/APIServer/API/Hangfire.db | Bin 323584 -> 323584 bytes Src/APIServer/Persistence/api.db | Bin 53248 -> 53248 bytes Src/IdentityServer/Persistence/identity.db | Bin 446464 -> 466944 bytes 4 files changed, 5 insertions(+), 3 deletions(-) diff --git a/.build/Build.Sonar.cs b/.build/Build.Sonar.cs index 9adc885..6a5d6c8 100644 --- a/.build/Build.Sonar.cs +++ b/.build/Build.Sonar.cs @@ -12,10 +12,12 @@ partial class Build : NukeBuild [Parameter] readonly string SonarToken; const string SonarProjectKey = "trouble-training"; + string Github_Organization_Name = "damikun"; [Parameter("Sonar server")] readonly string SonarServer = IsLocalBuild ? "https://sonarcloud.io" : "https://sonarcloud.io"; // change url for local server + string[] sonar_path_exclude = new string[]{ "**/Generated/**/*", "**/*.generated.cs", @@ -29,8 +31,8 @@ partial class Build : NukeBuild "**/*.json", "**/*.sh", "**/*.md", - "**/bin/*", - "**/obj/*", + // "**/bin/*", + // "**/obj/*", "**/Tests/*", "**/Test/*", "**/node_modules/**/*" @@ -54,7 +56,7 @@ partial class Build : NukeBuild SonarScannerBegin(s => s .SetLogin(SonarToken) .SetProjectKey(SonarProjectKey) - .SetOrganization("damikun") + .SetOrganization(Github_Organization_Name) .SetServer(SonarServer) .AddSourceExclusions(sonar_path_exclude) .SetOpenCoverPaths(ArtifactsDirectory / "coverage.xml") diff --git a/Src/APIServer/API/Hangfire.db b/Src/APIServer/API/Hangfire.db index 13fa0ec79dd1b992f81067a32d0b6b7b113d7ebd..db8a974fc10d32dd872ebb2f610d32a168f64a2c 100644 GIT binary patch delta 16095 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 diff --git a/Src/APIServer/Persistence/api.db b/Src/APIServer/Persistence/api.db index 00663549b34f1c29f772d43a21ab44c0f86ef00e..a2808e2a9324ddb09f3136223a26496eacd71105 100644 GIT binary patch delta 196 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 delta 2833 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 XCAw_X#^1&*mUx$1*`_P*%^&;++c&oz From e23e8e6783bcd4dd2469f5e54607042a593b3456 Mon Sep 17 00:00:00 2001 From: dalibor Date: Thu, 25 Nov 2021 19:07:39 +0100 Subject: [PATCH 7/8] Add java to sonar yaml --- .build/Build..cs | 2 +- .build/Build.Sonar.cs | 5 ++++- .github/workflows/sonar.yml | 3 +++ 3 files changed, 8 insertions(+), 2 deletions(-) diff --git a/.build/Build..cs b/.build/Build..cs index e1e453b..ea711f1 100644 --- a/.build/Build..cs +++ b/.build/Build..cs @@ -51,7 +51,7 @@ On = new[] { GitHubActionsTrigger.PullRequest }, InvokedTargets = new[] { nameof(Sonar) }, ImportSecrets = new[] { nameof(SonarToken) }, - AutoGenerate = true)] + AutoGenerate = false)] [CheckBuildProjectConfigurations] [ShutdownDotNetAfterServerBuild] partial class Build : NukeBuild diff --git a/.build/Build.Sonar.cs b/.build/Build.Sonar.cs index 6a5d6c8..07aecef 100644 --- a/.build/Build.Sonar.cs +++ b/.build/Build.Sonar.cs @@ -2,6 +2,8 @@ using Nuke.Common; using Nuke.Common.Tools.SonarScanner; using static Nuke.Common.Tools.SonarScanner.SonarScannerTasks; +using Nuke.Common.Tooling; +using Nuke.Common.Tools.DotNet; partial class Build : NukeBuild { @@ -71,7 +73,8 @@ partial class Build : NukeBuild { SonarScannerEnd(s => s .SetLogin(SonarToken) - .SetFramework("net5.0")); + .SetFramework("net5.0") + .SetProcessWorkingDirectory(RootDirectory)); }); } \ No newline at end of file diff --git a/.github/workflows/sonar.yml b/.github/workflows/sonar.yml index 9e6aad4..9fd28f9 100644 --- a/.github/workflows/sonar.yml +++ b/.github/workflows/sonar.yml @@ -23,6 +23,9 @@ jobs: name: windows-latest runs-on: windows-latest steps: + - uses: actions/setup-java@v1 + with: + java-version: "11" - uses: actions/checkout@v1 - name: Cache .nuke/temp, ~/.nuget/packages uses: actions/cache@v2 From fab3d391ceca83356406fa39342449e2edc9546e Mon Sep 17 00:00:00 2001 From: dalibor Date: Fri, 26 Nov 2021 10:07:31 +0100 Subject: [PATCH 8/8] Add java info --- .build/Build.Sonar.cs | 4 ++-- .github/workflows/sonar.yml | 16 ++++++++++++++++ 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/.build/Build.Sonar.cs b/.build/Build.Sonar.cs index 07aecef..5d3cabc 100644 --- a/.build/Build.Sonar.cs +++ b/.build/Build.Sonar.cs @@ -1,9 +1,9 @@ using Nuke.Common; -using Nuke.Common.Tools.SonarScanner; -using static Nuke.Common.Tools.SonarScanner.SonarScannerTasks; using Nuke.Common.Tooling; using Nuke.Common.Tools.DotNet; +using Nuke.Common.Tools.SonarScanner; +using static Nuke.Common.Tools.SonarScanner.SonarScannerTasks; partial class Build : NukeBuild { diff --git a/.github/workflows/sonar.yml b/.github/workflows/sonar.yml index 9fd28f9..08de1b9 100644 --- a/.github/workflows/sonar.yml +++ b/.github/workflows/sonar.yml @@ -18,6 +18,22 @@ name: Sonar on: [pull_request] +############################################################# +# The only prerequisite for running SonarQube is to have Java +# (Oracle JRE 11 or OpenJDK 11) installed on your machine. +############################################################# +# Java version info +# 50 = Java 6 +# 51 = Java 7 +# 52 = Java 8 +# 53 = Java 9 +# 54 = Java 10 +# 55 = Java 11 +# 56 = Java 12 +# 57 = Java 13 + +# The V55 = Java 11 prevents ("EnvironmentInformation has been compiled by a more recent version of the Java Runtime") + jobs: windows-latest: name: windows-latest