name: SonarCloud code analysis
on:
    push:
        branches:
            - main
    pull_request:
        types: [opened, synchronize, reopened]
jobs:
    build:
        name: Build and analyze
        runs-on: windows-latest
        steps:
            - name: Set up JDK 17
              uses: actions/setup-java@v3
              with:
                  java-version: 17
                  distribution: 'zulu' # Alternative distribution options are available.
            - 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: powershell
              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
                  SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}
              shell: powershell
              run: |
                  .\.sonar\scanner\dotnet-sonarscanner begin /k:"lanedirt_AliasVault" /o:"lanedirt" /d:sonar.token="${{ secrets.SONAR_TOKEN }}" /d:sonar.host.url="https://sonarcloud.io" /d:sonar.cs.opencover.reportsPaths="**/coverage.opencover.xml" /d:sonar.coverage.exclusions="**Tests*.cs"
                  dotnet build
                  dotnet test -c Release /p:CollectCoverage=true /p:CoverletOutput=coverage /p:CoverletOutputFormat=opencover --filter 'FullyQualifiedName!~AliasVault.E2ETests'
                  .\.sonar\scanner\dotnet-sonarscanner end /d:sonar.token="${{ secrets.SONAR_TOKEN }}"
