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 @@ - +