diff --git a/.github/workflows/sonar.yml b/.github/workflows/sonar.yml new file mode 100644 index 00000000..c856c98c --- /dev/null +++ b/.github/workflows/sonar.yml @@ -0,0 +1,52 @@ +name: SonarQube Analysis + +on: + push: # Trigger on push to any branch + pull_request: # Trigger on pull request to any branch + +jobs: + sonarQube: + runs-on: ubuntu-latest + + steps: + - name: Checkout code + uses: actions/checkout@v2 + + - name: Set up Go + uses: actions/setup-go@v3 + with: + go-version: '1.17' + + - name: Cache Go modules + uses: actions/cache@v2 + with: + path: | + ~/.cache/go-build + ~/go/pkg/mod + key: ${{ runner.os }}-go-${{ hashFiles('**/go.sum') }} + restore-keys: | + ${{ runner.os }}-go- + + - name: Install SonarQube Scanner + run: | + curl -sSLo sonar-scanner.zip https://binaries.sonarsource.com/Distribution/sonar-scanner-cli/sonar-scanner-cli-4.6.2.2472-linux.zip + unzip sonar-scanner.zip -d $HOME + export PATH="$HOME/sonar-scanner-4.6.2.2472-linux/bin:$PATH" + + - name: Run tests and generate coverage + run: | + go test -v ./... -coverprofile=coverage.out + go tool cover -func=coverage.out + + - name: SonarQube Scan + env: + SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }} + run: | + sonar-scanner \ + -Dsonar.projectKey= \ + -Dsonar.organization= \ # For SonarCloud only + -Dsonar.host.url=https://sonarcloud.io \ # Use your SonarQube URL if using SonarQube + -Dsonar.login=$SONAR_TOKEN \ + -Dsonar.sources=. \ + -Dsonar.tests=. \ + -Dsonar.go.coverage.reportPaths=coverage.out