Skip to content

Instantly share code, notes, and snippets.

@guibranco
Last active July 19, 2024 12:22
Show Gist options
  • Save guibranco/b6d02f06b8c77e61c082e2e45ee6ee1a to your computer and use it in GitHub Desktop.
Save guibranco/b6d02f06b8c77e61c082e2e45ee6ee1a to your computer and use it in GitHub Desktop.
GitHub Actions workflow to build, test, and report to SonarCloud a .NET project.
name: SonarCloud Analysis
on:
push:
branches:
- main
pull_request:
types: [opened, synchronize, reopened]
jobs:
SonarCloudAnalysis:
name: SonarCloud Analysis
runs-on: windows-latest
steps:
- name: Set up Java
uses: actions/setup-java@v4
with:
distribution: 'temurin' # Use whatever distribution you want. I prefer Temurin or Zulu. Feel free to use any other (check SonarCloud for supported distributions and versions).
java-version: 21
- uses: actions/checkout@v4
with:
fetch-depth: 0 # Shallow clones should be disabled for a better relevancy of analysis
- name: Cache SonarCloud packages
uses: actions/cache@v4
with:
path: ~\sonar\cache
key: ${{ runner.os }}-sonar
restore-keys: ${{ runner.os }}-sonar
- name: Cache SonarCloud scanner
id: cache-sonar-scanner
uses: actions/cache@v4
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: Set SonarCloud variables
shell: bash
run: |
KEY="${{ github.repository_owner }}_${{ github.event.repository.name }}"
ORG="${{ github.repository_owner }}"
echo "KEY=${KEY}" >> "${GITHUB_ENV}" # Keep the variable KEY as it
echo "ORG=${ORG@L}" >> "${GITHUB_ENV}" # Lowercase the ORG variable
- 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:"${{ env.KEY }}" /o:"${{ env.ORG }}" /d:sonar.token="${{ secrets.SONAR_TOKEN }}" /d:sonar.host.url="https://sonarcloud.io"
dotnet build -c Release --verbosity minimal
dotnet test -c Release --verbosity minimal --no-build --no-restore /p:CollectCoverage=true /p:CoverletOutputFormat="cobertura"
.\.sonar\scanner\dotnet-sonarscanner end /d:sonar.token="${{ secrets.SONAR_TOKEN }}"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment