diff --git a/.github/workflows/sonarcloud.yml b/.github/workflows/sonarcloud.yml
new file mode 100644
index 00000000..79a5b9b3
--- /dev/null
+++ b/.github/workflows/sonarcloud.yml
@@ -0,0 +1,78 @@
+name: Sonarcloud
+on:
+ workflow_dispatch:
+ push:
+ branches:
+ - main
+ paths-ignore: ['**.md', '.vscode/**', '**.svg']
+ pull_request:
+ types: [opened, synchronize, reopened]
+ paths-ignore: ['**.md', '.vscode/**', '**.svg']
+
+env:
+ SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}
+
+jobs:
+ checksecret:
+ name: check if SONAR_TOKEN is set in github secrets
+ runs-on: ubuntu-latest
+ outputs:
+ is_SONAR_TOKEN_set: ${{ steps.checksecret_job.outputs.is_SONAR_TOKEN_set }}
+ steps:
+ - name: Check whether unity activation requests should be done
+ id: checksecret_job
+ run: |
+ echo "is_SONAR_TOKEN_set=${{ env.SONAR_TOKEN != '' }}" >> $GITHUB_OUTPUT
+ build:
+ needs: [checksecret]
+ if: needs.checksecret.outputs.is_SONAR_TOKEN_set == 'true'
+ name: Build
+ runs-on: ubuntu-latest
+ steps:
+ - name: Set up JDK 17
+ uses: actions/setup-java@v3
+ with:
+ distribution: 'adopt'
+ java-version: 17
+ - name: Setup .NET 5 # At the moment the scanner requires dotnet 5 https://www.nuget.org/packages/dotnet-sonarscanner
+ uses: actions/setup-dotnet@v3
+ with:
+ dotnet-version: 5.0.x
+ - name: Setup .NET
+ uses: actions/setup-dotnet@v3
+ with:
+ dotnet-version: 7.0.x
+ - uses: actions/checkout@v3
+ with:
+ fetch-depth: 0 # Shallow clones should be disabled for a better relevancy of analysis
+ - name: Cache SonarCloud packages
+ uses: actions/cache@v3
+ with:
+ path: ~/.sonar/cache
+ key: ${{ runner.os }}-sonar
+ restore-keys: ${{ runner.os }}-sonar
+ - name: Cache SonarCloud scanner
+ id: cache-sonar-scanner
+ uses: actions/cache@v3
+ with:
+ path: ./.sonar/scanner
+ key: ${{ runner.os }}-sonar-scanner
+ restore-keys: ${{ runner.os }}-sonar-scanner
+ - name: Install SonarCloud scanner
+ if: steps.cache-sonar-scanner.outputs.cache-hit != 'true'
+ shell: pwsh
+ run: |
+ New-Item -Path ./.sonar/scanner -ItemType Directory
+ dotnet tool update dotnet-sonarscanner --tool-path ./.sonar/scanner
+ - name: Build and analyze
+ env:
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} # Needed to get PR information, if any
+ CollectCoverage: true
+ CoverletOutputFormat: 'opencover' # https://github.com/microsoft/vstest/issues/4014#issuecomment-1307913682
+ shell: pwsh
+ run: |
+ ./.sonar/scanner/dotnet-sonarscanner begin /k:"microsoft_kiota-cli-commons" /o:"microsoft" /d:sonar.login="${{ secrets.SONAR_TOKEN }}" /d:sonar.host.url="https://sonarcloud.io" /d:sonar.cs.opencover.reportsPaths="**/*.Tests/**/coverage.opencover.xml"
+ dotnet workload restore
+ dotnet build
+ dotnet test Microsoft.Kiota.Cli.Commons.sln --no-build --verbosity normal /p:CollectCoverage=true /p:CoverletOutputFormat=opencover
+ ./.sonar/scanner/dotnet-sonarscanner end /d:sonar.login="${{ secrets.SONAR_TOKEN }}"
diff --git a/src/Microsoft.Graph.Cli.Core.Tests/Http/UriReplacementHandlerTests.cs b/src/Microsoft.Graph.Cli.Core.Tests/Http/UriReplacement/MeUriReplacementTests.cs
similarity index 93%
rename from src/Microsoft.Graph.Cli.Core.Tests/Http/UriReplacementHandlerTests.cs
rename to src/Microsoft.Graph.Cli.Core.Tests/Http/UriReplacement/MeUriReplacementTests.cs
index a95eb961..00d3b565 100644
--- a/src/Microsoft.Graph.Cli.Core.Tests/Http/UriReplacementHandlerTests.cs
+++ b/src/Microsoft.Graph.Cli.Core.Tests/Http/UriReplacement/MeUriReplacementTests.cs
@@ -1,8 +1,8 @@
using System;
-using Microsoft.Graph.Cli.Core.Http;
+using Microsoft.Graph.Cli.Core.Http.UriReplacement;
using Xunit;
-namespace Microsoft.Graph.Cli.Core.Tests.Http;
+namespace Microsoft.Graph.Cli.Core.Tests.Http.UriReplacement;
public class MeUriReplacementTests
{
diff --git a/src/Microsoft.Graph.Cli.Core/Http/UriReplacementHandler.cs b/src/Microsoft.Graph.Cli.Core/Http/UriReplacement/MeUrlReplacement.cs
similarity index 65%
rename from src/Microsoft.Graph.Cli.Core/Http/UriReplacementHandler.cs
rename to src/Microsoft.Graph.Cli.Core/Http/UriReplacement/MeUrlReplacement.cs
index 2aed76e3..14524d3b 100644
--- a/src/Microsoft.Graph.Cli.Core/Http/UriReplacementHandler.cs
+++ b/src/Microsoft.Graph.Cli.Core/Http/UriReplacement/MeUrlReplacement.cs
@@ -1,21 +1,4 @@
-using System;
-using System.Net.Http;
-using System.Threading.Tasks;
-
-namespace Microsoft.Graph.Cli.Core.Http;
-
-///
-/// Interface for making URI replacements.
-///
-public interface IUriReplacement
-{
- ///
- /// Accepts a URI and returns a new URI with all replacements applied.
- ///
- /// The URI to apply replacements to
- /// A new URI with all replacements applied.
- Uri? Replace(Uri? original);
-}
+namespace Microsoft.Graph.Cli.Core.Http.UriReplacement;
///
/// Specialized replacement for /[version]/users/me with /[version]/me
@@ -90,27 +73,3 @@ public struct MeUriReplacement : IUriReplacement
return newUrl.Uri;
}
}
-
-///
-/// Replaces a portion of the URL.
-///
-public class UriReplacementHandler : DelegatingHandler where TUriReplacement: IUriReplacement
-{
- private readonly TUriReplacement urlReplacement;
-
- ///
- /// Creates a new UriReplacementHandler.
- ///
- public UriReplacementHandler(TUriReplacement urlReplacement)
- {
- this.urlReplacement = urlReplacement;
- }
-
- ///
- protected override async Task SendAsync(
- HttpRequestMessage request, System.Threading.CancellationToken cancellationToken)
- {
- request.RequestUri = urlReplacement.Replace(request.RequestUri);
- return await base.SendAsync(request, cancellationToken);
- }
-}
diff --git a/src/Microsoft.Graph.Cli.Core/Microsoft.Graph.Cli.Core.csproj b/src/Microsoft.Graph.Cli.Core/Microsoft.Graph.Cli.Core.csproj
index e06bca93..478a919d 100644
--- a/src/Microsoft.Graph.Cli.Core/Microsoft.Graph.Cli.Core.csproj
+++ b/src/Microsoft.Graph.Cli.Core/Microsoft.Graph.Cli.Core.csproj
@@ -44,7 +44,7 @@
-
+