name: SonarQube on: push: branches: - master pull_request: types: [opened, synchronize, reopened] jobs: build: name: Build and analyze runs-on: ubuntu-latest env: PATH: ${{ env.PATH }}:/root/.dotnet/tools steps: - uses: actions/checkout@v4 with: fetch-depth: 0 # Shallow clones should be disabled for a better relevancy of analysis - name: Setup .NET uses: actions/setup-dotnet@v4 with: dotnet-version: '9.0.x' - name: Install SonarQube Cloud scanner run: | mkdir -p ~/.sonar/scanner dotnet tool install dotnet-sonarscanner --tool-path ~/.sonar/scanner - name: Install coverlet.collector run: | dotnet tool install --global coverlet.console echo "Adding .dotnet/tools to PATH..." export PATH="$PATH:/root/.dotnet/tools" echo "Coverlet installed at:" which coverlet || echo "Coverlet not found, trying full path..." ls -la /root/.dotnet/tools/ | grep coverlet || echo "No coverlet in tools directory" - name: Restore dependencies run: dotnet restore --verbosity normal - name: SonarQube begin env: SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }} run: | echo "Starting SonarQube analysis..." echo "Current directory: $(pwd)" echo "Listing files:" ls -la echo "Installing SonarQube scanner..." ~/.sonar/scanner/dotnet-sonarscanner begin /k:"mrleo1nid_chatbot" /o:"mrleo1nid" /d:sonar.token="${{ secrets.SONAR_TOKEN }}" /d:sonar.cs.opencover.reportsPaths=coverage.xml /d:sonar.cs.vscoveragexml.reportsPaths=coverage.xml - name: Build project run: | echo "Building project..." dotnet build --verbosity normal - name: Run tests with coverage run: | echo "Running tests with coverage..." echo "Current directory: $(pwd)" echo "PATH: $PATH" echo "Coverlet location:" which coverlet || echo "Coverlet not found in PATH" echo "Checking test project structure..." find . -name "*.Tests.dll" -type f | head -5 echo "Trying to run coverlet..." if coverlet ./ChatBot.Tests/bin/Debug/net9.0/ChatBot.Tests.dll --target "dotnet" --targetargs "test --no-build" -f=opencover -o="coverage.xml"; then echo "Coverlet succeeded" elif /root/.dotnet/tools/coverlet ./ChatBot.Tests/bin/Debug/net9.0/ChatBot.Tests.dll --target "dotnet" --targetargs "test --no-build" -f=opencover -o="coverage.xml"; then echo "Coverlet succeeded with full path" else echo "Coverlet failed, trying built-in coverage collection..." dotnet test --collect:"XPlat Code Coverage" --results-directory ./TestResults echo "Looking for coverage files..." find ./TestResults -name "*.xml" -exec echo "Found: {}" \; # Convert to OpenCover format if needed find ./TestResults -name "coverage.cobertura.xml" -exec cp {} coverage.xml \; fi - name: SonarQube end env: SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }} run: | echo "Ending SonarQube analysis..." ~/.sonar/scanner/dotnet-sonarscanner end /d:sonar.token="${{ secrets.SONAR_TOKEN }}"