Skills DirectorySkills Directory
SkillsLearnSecurityCategoriesDocsBlogPro
Sign InSubmit Skill
Skills Directory

Security-tested agent skills for Claude, coding agents, and AI workflows.

Directory

  • Browse Skills
  • All Skills A–Z
  • Claude Skills
  • Claude Code Skills
  • Agent Skills
  • Categories
  • Authors
  • Submit a Skill

Learn

  • Learn Hub
  • Install Claude Skills
  • Write SKILL.md
  • Skills vs MCP
  • Directories Compared

Security

  • Security
  • Methodology
  • Secure Claude Skills
  • Security Badges
  • Chrome Extension
  • Skill Manager

Company

  • About
  • Community
  • Blog
  • API Docs
  • Advertise

2026 Skills Directory. All rights reserved.

ProTermsPrivacyRefunds
Back to skills

Sonarqube

ASecurity

Expert agent for SonarQube and SonarCloud. Covers quality gates, quality profiles, Clean Code taxonomy, SonarScanner setup, branch analysis, PR decoration, Security Hotspots, taint analysis, and OWASP/CWE mappings. WHEN: \"SonarQube\", \"SonarCloud\", \"SonarLint\", \"quality gate\", \"quality profile\", \"sonar-project.properties\", \"SonarScanner\", \"Security Hotspot\", \"new code period\", \"clean code\".

4 stars
0 votes
0 copies
0 views
Added 9/24/2026
devopsgojavabashsqlexpressdjangoflaskazuregitdatabase

Security Analysis

A100/100

Pro scans all 2 files and shows the line behind each finding

Scanned 9/24/2026

$npx -y skills add chrishuffman5/domain-expert --skill sonarqube --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Sonarqube?

Add the live security badge to your README — it updates automatically with every re-scan.

Security grade badge for Sonarqube
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/chrishuffman5-sonarqube/badge)](https://www.skillsdirectory.com/skills/chrishuffman5-sonarqube)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
Files
SKILL.md
---
name: sonarqube
description: "Expert agent for SonarQube and SonarCloud. Covers quality gates, quality profiles, Clean Code taxonomy, SonarScanner setup, branch analysis, PR decoration, Security Hotspots, taint analysis, and OWASP/CWE mappings. WHEN: \"SonarQube\", \"SonarCloud\", \"SonarLint\", \"quality gate\", \"quality profile\", \"sonar-project.properties\", \"SonarScanner\", \"Security Hotspot\", \"new code period\", \"clean code\"."
license: MIT
---

# SonarQube / SonarCloud

This skill covers SonarQube (self-managed) and SonarCloud (SaaS). It covers SonarQube Community through Enterprise editions, current releases (2026.x), and the LTA (Long-Term Active) release model. You also cover SonarLint for IDE integration.

## How to Approach Tasks

1. **Identify deployment type** -- SonarQube (self-managed) or SonarCloud (SaaS)? Edition matters for features (Community → Developer → Enterprise → Data Center).
2. **Identify the task type:**
   - **Setup/Scanner** -- Scanner configuration, CI/CD integration, sonar-project.properties
   - **Quality Gates** -- Gate definition, pass/fail conditions, new code period
   - **Quality Profiles** -- Rule activation, custom rules, language-specific settings
   - **Security** -- Vulnerability vs. Hotspot classification, taint rules, OWASP mappings
   - **Architecture** -- Load `references/architecture.md` for internals
3. **Apply version context** -- Some features (AI fix suggestions, taint across files) require specific editions or versions.

## Core Concepts

### Clean Code Taxonomy

SonarQube's quality classification framework (introduced to replace the older technical debt model):

**Four attributes of Clean Code:**
- **Consistency:** Code follows language and project conventions; predictable patterns
- **Intentionality:** Code is clear, well-named; intent is obvious without comments
- **Adaptability:** Code is modular, low coupling; easy to change without risk
- **Responsibility:** Code handles errors properly, protects data, respects security boundaries

**Issue categories under Clean Code:**
- **Reliability:** Bugs that will or likely will cause incorrect behavior
- **Security:** Vulnerabilities that can be exploited; Hotspots that require human review
- **Maintainability:** Code smells affecting adaptability and consistency
- **Coverage:** Test coverage gaps
- **Duplication:** Code duplication metrics

**Issue severity levels (post-2023 taxonomy):**
- **Blocker** → Likely to impact reliability/security in production
- **Critical** → May impact reliability/security
- **Major** → Low impact quality issue with significant developer effort to fix
- **Minor** → Low impact quality issue
- **Info** → Non-impactful quality observation

### Security Vulnerabilities vs. Security Hotspots

This distinction is critical for correct workflow:

**Security Vulnerability:**
- SonarQube is confident this is a real security issue
- Requires fixing (failing quality gate if active rule)
- Examples: SQL injection, XSS, path traversal confirmed by taint analysis
- Action: Fix the code

**Security Hotspot:**
- Code that is security-sensitive and requires human review
- Not necessarily a vulnerability — may be a legitimate use
- Examples: `Math.random()` use, `//NOSONAR`, hardcoded IP addresses
- Action: Review, then mark as "Safe" or "To Review" or convert to Vulnerability

**Why the distinction matters:** Hotspots have a separate workflow. They never block quality gates by themselves — only Vulnerabilities do. Teams should review Hotspots during code review, not treat them as build failures.

### Quality Gates

A quality gate is a set of conditions that must pass before code is considered release-ready. It answers: "Is this code good enough to ship?"

**Default Sonar Way gate conditions (New Code focus):**
- Security Rating = A (no new Vulnerabilities)
- Reliability Rating = A (no new Bugs)
- Maintainability Rating = A (no new Code Smells)
- Coverage ≥ 80% (on new code)
- Duplicated Lines (%) ≤ 3%

**Configuring quality gates:**

In SonarQube UI: Administration → Quality Gates → Create / Edit

Key decisions:
- **New Code vs. Overall Code:** Best practice is to gate on new code only. This allows teams to address legacy debt gradually while preventing new issues.
- **Rating vs. Count:** Rating (A-E) is relative; Count (number of issues) is absolute. Rating is generally more appropriate.
- **Conditions to add:** Consider adding specific OWASP/CWE rules that are business-critical.

```
# Example quality gate policy:
New Code:
  Security Vulnerabilities: 0
  Bugs: 0
  Code Smells: Rating A (≤5% of new lines)
  Test Coverage: ≥ 70%
  Security Hotspots Reviewed: 100%
```

**Failure handling in CI:**
When a quality gate fails, the CI pipeline should fail. This requires `sonar.qualitygate.wait=true` in scanner properties.

### New Code Period

The "new code period" defines what SonarQube considers "new" for quality gate evaluation:

- **Previous version** (default): Code changed since the last project version was set. Set version via `sonar.projectVersion` in scanner.
- **Number of days:** Rolling window (e.g., last 30 days of changes).
- **Specific date:** Fixed baseline date.
- **Reference branch** (Developer Edition+): Compare against a branch (e.g., main).

**Best practice:** Use "Reference branch" for feature branch analysis (compare to main). Use "Previous version" for release pipeline gates.

### Quality Profiles

A quality profile is the set of rules activated for a specific language. Every project uses one quality profile per language.

**Built-in profiles:**
- **Sonar way:** The recommended profile. Conservative, well-tuned defaults.
- **Sonar way for Security:** More security rules activated (available in some editions).

**Custom profiles:**
1. Inherit from "Sonar way" (recommended) — you get future rule updates
2. Activate additional rules as needed
3. Change rule severity for organizational context
4. Deactivate rules that generate persistent false positives for your codebase

**Rule parameters:** Many rules have configurable parameters. Example: `java:S5131` (XSS) has configurable sanitizer methods — add your custom sanitizer.

```
Administration → Quality Profiles → [Language] → [Profile] → Activate Rules
```

### SonarScanner Setup

#### Project Configuration (sonar-project.properties)

```properties
# Required
sonar.projectKey=my-org_my-project
sonar.projectName=My Project
sonar.sources=src

# Optional but recommended
sonar.projectVersion=1.0.0
sonar.sourceEncoding=UTF-8
sonar.java.binaries=target/classes
sonar.tests=src/test
sonar.coverage.jacoco.xmlReportPaths=target/site/jacoco/jacoco.xml
sonar.exclusions=**/generated/**,**/vendor/**,**/*.min.js

# Quality gate
sonar.qualitygate.wait=true
```

#### CI Integration Examples

**GitHub Actions:**
```yaml
- name: SonarQube Scan
  uses: SonarSource/sonarqube-scan-action@master
  env:
    SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}
    SONAR_HOST_URL: ${{ vars.SONAR_HOST_URL }}
  with:
    args: >
      -Dsonar.projectKey=${{ env.PROJECT_KEY }}
      -Dsonar.qualitygate.wait=true
      -Dsonar.pullrequest.key=${{ github.event.pull_request.number }}
      -Dsonar.pullrequest.branch=${{ github.head_ref }}
      -Dsonar.pullrequest.base=${{ github.base_ref }}
```

**Maven:**
```xml
<!-- pom.xml plugin -->
<plugin>
  <groupId>org.sonarsource.scanner.maven</groupId>
  <artifactId>sonar-maven-plugin</artifactId>
  <version>4.0.0.4121</version>
</plugin>
```
```bash
mvn verify sonar:sonar \
  -Dsonar.projectKey=my-project \
  -Dsonar.host.url=https://sonarqube.example.com \
  -Dsonar.token=$SONAR_TOKEN
```

**Gradle:**
```groovy
// build.gradle
plugins {
  id "org.sonarqube" version "5.1.0.4882"
}
sonar {
  properties {
    property "sonar.projectKey", "my-project"
    property "sonar.host.url", "https://sonarqube.example.com"
  }
}
```
```bash
./gradlew sonar -Dsonar.token=$SONAR_TOKEN
```

**.NET:**
```bash
dotnet sonarscanner begin \
  /k:"my-project" \
  /d:sonar.host.url="https://sonarqube.example.com" \
  /d:sonar.token="$SONAR_TOKEN"
dotnet build
dotnet sonarscanner end /d:sonar.token="$SONAR_TOKEN"
```

### Branch Analysis and PR Decoration

Branch analysis requires **Developer Edition or higher** (self-managed) or SonarCloud.

**Branch types:**
- **Main branch:** The primary tracked branch (defaults to `main` or `master`)
- **Long-lived branches:** Release branches, tracked independently (`release/v2.0`)
- **Short-lived branches:** Feature branches, compared against main, deleted after merge

**PR decoration:** SonarQube/SonarCloud posts analysis results as a PR comment and status check. Requires:
1. ALM (Application Lifecycle Management) integration configured in Administration → DevOps Platform Integrations
2. Token with PR read/write permissions
3. Scanner configured with PR parameters (`sonar.pullrequest.key`, `sonar.pullrequest.branch`, `sonar.pullrequest.base`)

### Taint Analysis

Available in SonarQube Enterprise Edition and SonarCloud.

Taint analysis tracks user-controlled data flows from sources to sinks, detecting injection vulnerabilities:

- **Sources:** HttpServletRequest, Flask request, Express req, Django request, etc.
- **Sinks:** JDBC execute, subprocess, eval, innerHTML assignment, etc.
- **Sanitizers:** Framework-specific validation and encoding functions

**OWASP/SANS/CWE rule mappings:**
SonarQube rules are tagged with security standards:
- `owasp-a3` → OWASP A03 Injection
- `cwe-89` → SQL Injection
- `sans-top25-risky` → SANS Top 25 Risky Resources

Filter rules by tag in Quality Profile to focus on specific standards.

### SonarCloud Specifics

SonarCloud is the SaaS version of SonarQube, hosted by Sonar.

**Key differences from self-managed:**
- No infrastructure management
- Automatic version updates
- Built-in GitHub/GitLab/Bitbucket/Azure DevOps integration (no ALM configuration needed)
- Free for public repositories; licensed per lines of code for private repositories
- Organization-based project organization (mirrors GitHub organizations)

**SonarCloud setup (GitHub):**
1. Install SonarCloud GitHub App
2. Create organization in SonarCloud (links to GitHub org)
3. Analyze projects — SonarCloud creates `sonar-project.properties` automatically
4. Add `SONAR_TOKEN` to GitHub secrets
5. Configure GitHub Actions workflow

### Suppressions and Exclusions

**Issue-level suppression (inline):**
```java
String query = "SELECT * FROM users WHERE id = " + userId; // NOSONAR
```
Use sparingly — NOSONAR suppresses ALL rules on that line.

**File/directory exclusions:**
```properties
sonar.exclusions=**/generated/**,**/test/**,**/*.min.js
sonar.coverage.exclusions=**/*Config*.java,**/*Application.java
```

**Issue-specific suppression in UI:**
Mark issues as "Won't Fix" or "False Positive" in the SonarQube interface. These persist across scans.

### Common Issues and Troubleshooting

**Quality gate always passes even with issues:**
- Check: Is `sonar.qualitygate.wait=true` set?
- Check: Is the project analyzing to the correct branch?
- Check: Are issues on "new code" or "overall code"? Gate may be configured for new code only.

**Missing coverage:**
- Ensure test framework generates XML report before scanner runs
- Verify `sonar.coverage.jacoco.xmlReportPaths` (Java) or equivalent points to correct path
- Coverage reports must exist before scanner reads them

**PR decoration not appearing:**
- Verify ALM integration configuration in Administration
- Check that scanner is passing the correct PR parameters
- Confirm token has PR comment/status write permissions

**Analysis takes too long:**
- Enable incremental analysis for PRs
- Exclude generated code and vendor directories
- For Java: ensure compiled classes are available (sonar.java.binaries)

## Edition Comparison

| Feature | Community | Developer | Enterprise | Data Center |
|---|---|---|---|---|
| Branch analysis | No (main only) | Yes | Yes | Yes |
| PR decoration | No | Yes | Yes | Yes |
| Taint analysis | Basic | Enhanced | Full | Full |
| Security reports | No | No | Yes (portfolio) | Yes |
| High availability | No | No | No | Yes |
| SonarCloud equivalent | Free tier | Team | Business | — |

## Reference Files

- `references/architecture.md` — SonarQube internals: analysis server, Compute Engine, database model, quality gate evaluation pipeline, SonarCloud architecture comparison

Attribution

chrishuffman5chrishuffman5
View sourceSee grades on GitHubMore from chrishuffman5 →
SSkills DirectorySkills Directory

Ship a skill? Prove it's safe.

Free 120-pattern security scan, letter grade, and an embeddable README badge.

Submit a skill

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments (0)

No comments yet. Be the first to comment!

SSkills DirectorySkills Directory

Ship a skill? Prove it's safe.

Free 120-pattern security scan, letter grade, and an embeddable README badge.

Submit a skill

Related Skills

Terraform Module Library

Build reusable Terraform modules for AWS, Azure, and GCP infrastructure following infrastructure-as-code best practices. Use when creating infrastructure modules, standardizing cloud provisioning, or implementing reusable IaC components.

401991 votes

sematext-otel

Wire a service's OpenTelemetry output to Sematext Cloud. Walks through region, App-type, instrumentation flow (managed OTLP endpoint vs Sematext Agent), and signal selection (traces/metrics/logs), then produces the exact env-var block and points at a runnable reference example in this repo. Invoke when instrumenting a new app for Sematext.

01 votes

Deployment Patterns

Deployment workflows, CI/CD pipeline patterns, Docker containerization, health checks, rollback strategies, and production readiness checklists for web applications. Use when setting up deployment infrastructure or planning releases.

2699140 votes

Babysit

Watch a pull request or review cycle until it is ready to merge. Use when asked to babysit, monitor, or keep checking PR comments, reviews, and CI until all actionable issues are resolved.

971540 votes

V7 Roster

Interact with the Paperclip control plane API for task coordination and governance. Use when checking assignments, updating issue status, posting comments, delegating work, managing routines, or calling Paperclip API endpoints.

953190 votes
View all in devops →