forge-workflow 0.0.2 → 0.0.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude/commands/dev.md +26 -0
- package/.claude/commands/plan.md +141 -9
- package/.claude/commands/premerge.md +0 -3
- package/.claude/commands/rollback.md +4 -4
- package/.claude/commands/ship.md +71 -41
- package/.claude/commands/status.md +9 -38
- package/.claude/commands/validate.md +47 -2
- package/.cline/workflows/dev.md +337 -0
- package/.cline/workflows/plan.md +518 -0
- package/.cline/workflows/premerge.md +173 -0
- package/.cline/workflows/research.md +39 -0
- package/.cline/workflows/review.md +439 -0
- package/.cline/workflows/rollback.md +718 -0
- package/.cline/workflows/ship.md +161 -0
- package/.cline/workflows/sonarcloud.md +146 -0
- package/.cline/workflows/status.md +45 -0
- package/.cline/workflows/validate.md +279 -0
- package/.cline/workflows/verify.md +218 -0
- package/.codex/config.toml +11 -0
- package/.codex/skills/dev/SKILL.md +340 -0
- package/.codex/skills/plan/SKILL.md +521 -0
- package/.codex/skills/premerge/SKILL.md +176 -0
- package/.codex/skills/research/SKILL.md +42 -0
- package/.codex/skills/review/SKILL.md +442 -0
- package/.codex/skills/rollback/SKILL.md +721 -0
- package/.codex/skills/ship/SKILL.md +164 -0
- package/.codex/skills/sonarcloud/SKILL.md +149 -0
- package/.codex/skills/status/SKILL.md +48 -0
- package/.codex/skills/validate/SKILL.md +282 -0
- package/.codex/skills/verify/SKILL.md +221 -0
- package/.cursor/commands/dev.md +337 -0
- package/.cursor/commands/plan.md +518 -0
- package/.cursor/commands/premerge.md +173 -0
- package/.cursor/commands/research.md +39 -0
- package/.cursor/commands/review.md +439 -0
- package/.cursor/commands/rollback.md +718 -0
- package/.cursor/commands/ship.md +161 -0
- package/.cursor/commands/sonarcloud.md +146 -0
- package/.cursor/commands/status.md +45 -0
- package/.cursor/commands/validate.md +279 -0
- package/.cursor/commands/verify.md +218 -0
- package/.cursor/hooks/state/continual-learning-index.json +19 -0
- package/.cursor/hooks/state/continual-learning.json +8 -0
- package/.cursor/rules/permissions-guidance.mdc +37 -0
- package/.github/prompts/dev.prompt.md +342 -0
- package/.github/prompts/plan.prompt.md +523 -0
- package/.github/prompts/premerge.prompt.md +178 -0
- package/.github/prompts/research.prompt.md +44 -0
- package/.github/prompts/review.prompt.md +444 -0
- package/.github/prompts/rollback.prompt.md +723 -0
- package/.github/prompts/ship.prompt.md +166 -0
- package/.github/prompts/sonarcloud.prompt.md +151 -0
- package/.github/prompts/status.prompt.md +50 -0
- package/.github/prompts/validate.prompt.md +284 -0
- package/.github/prompts/verify.prompt.md +223 -0
- package/.kilocode/workflows/dev.md +341 -0
- package/.kilocode/workflows/plan.md +522 -0
- package/.kilocode/workflows/premerge.md +177 -0
- package/.kilocode/workflows/research.md +43 -0
- package/.kilocode/workflows/review.md +443 -0
- package/.kilocode/workflows/rollback.md +722 -0
- package/.kilocode/workflows/ship.md +165 -0
- package/.kilocode/workflows/sonarcloud.md +150 -0
- package/.kilocode/workflows/status.md +49 -0
- package/.kilocode/workflows/validate.md +283 -0
- package/.kilocode/workflows/verify.md +222 -0
- package/.opencode/commands/dev.md +340 -0
- package/.opencode/commands/plan.md +521 -0
- package/.opencode/commands/premerge.md +176 -0
- package/.opencode/commands/research.md +42 -0
- package/.opencode/commands/review.md +442 -0
- package/.opencode/commands/rollback.md +721 -0
- package/.opencode/commands/ship.md +164 -0
- package/.opencode/commands/sonarcloud.md +149 -0
- package/.opencode/commands/status.md +48 -0
- package/.opencode/commands/validate.md +282 -0
- package/.opencode/commands/verify.md +221 -0
- package/.roo/commands/dev.md +341 -0
- package/.roo/commands/plan.md +522 -0
- package/.roo/commands/premerge.md +177 -0
- package/.roo/commands/research.md +43 -0
- package/.roo/commands/review.md +443 -0
- package/.roo/commands/rollback.md +722 -0
- package/.roo/commands/ship.md +165 -0
- package/.roo/commands/sonarcloud.md +150 -0
- package/.roo/commands/status.md +49 -0
- package/.roo/commands/validate.md +283 -0
- package/.roo/commands/verify.md +222 -0
- package/AGENTS.md +7 -1
- package/CLAUDE.md +5 -4
- package/README.md +21 -19
- package/bin/{forge-validate.js → forge-preflight.js} +21 -15
- package/bin/forge.js +209 -138
- package/docs/AGENT_INSTALL_PROMPT.md +1 -1
- package/docs/BEADS_GITHUB_SYNC.md +251 -0
- package/docs/ENHANCED_ONBOARDING.md +8 -8
- package/docs/EXAMPLES.md +4 -4
- package/docs/GREPTILE_SETUP.md +1 -1
- package/docs/MANUAL_REVIEW_GUIDE.md +1 -1
- package/docs/ROADMAP.md +6 -6
- package/docs/SETUP.md +1 -2
- package/docs/TOOLCHAIN.md +15 -234
- package/docs/VALIDATION.md +11 -11
- package/install.sh +33 -39
- package/lib/agents-config.js +3 -3
- package/lib/commands/plan.js +11 -15
- package/lib/commands/recommend.js +2 -2
- package/lib/dep-guard/analyzer.js +294 -0
- package/lib/dep-guard/behavior-detector.js +98 -0
- package/lib/dep-guard/contract-detector.js +162 -0
- package/lib/dep-guard/import-detector.js +498 -0
- package/lib/dep-guard/path-utils.js +13 -0
- package/lib/dep-guard/rubric.js +120 -0
- package/lib/dep-guard/task-parser.js +318 -0
- package/lib/detect-agent.js +191 -0
- package/lib/detect-worktree.js +47 -0
- package/lib/file-hash.js +26 -0
- package/lib/plugin-catalog.js +18 -28
- package/lib/setup-action-log.js +139 -0
- package/lib/setup-summary-renderer.js +106 -0
- package/lib/setup.js +75 -1
- package/lib/workflow-profiles.js +5 -11
- package/package.json +17 -7
- package/skills/parallel-deep-research/SKILL.md +108 -0
- package/skills/parallel-deep-research/evals/README.md +27 -0
- package/skills/parallel-deep-research/evals/evals.json +62 -0
- package/skills/sonarcloud-analysis/SKILL.md +171 -0
- package/skills/sonarcloud-analysis/evals/README.md +27 -0
- package/skills/sonarcloud-analysis/evals/evals.json +50 -0
- package/skills/sonarcloud-analysis/references/api-reference.md +466 -0
- package/docs/WORKFLOW.md +0 -400
- package/docs/planning/PROGRESS.md +0 -396
- package/docs/plans/.gitkeep +0 -0
- package/docs/plans/2026-02-27-forge-test-suite-v2-decisions.md +0 -21
- package/docs/plans/2026-02-27-forge-test-suite-v2-design.md +0 -362
- package/docs/plans/2026-02-27-forge-test-suite-v2-tasks.md +0 -343
- package/docs/plans/2026-03-02-superpowers-gaps-decisions.md +0 -26
- package/docs/plans/2026-03-02-superpowers-gaps-design.md +0 -239
- package/docs/plans/2026-03-02-superpowers-gaps-tasks.md +0 -260
- package/docs/plans/2026-03-04-agent-command-parity-design.md +0 -163
- package/docs/plans/2026-03-04-verify-worktree-cleanup-decisions.md +0 -7
- package/docs/plans/2026-03-04-verify-worktree-cleanup-design.md +0 -165
- package/docs/plans/2026-03-05-forge-uto-decisions.md +0 -6
- package/docs/plans/2026-03-05-forge-uto-design.md +0 -116
- package/docs/plans/2026-03-05-forge-uto-tasks.md +0 -244
- package/docs/plans/2026-03-10-command-creator-and-eval-decisions.md +0 -52
- package/docs/plans/2026-03-10-command-creator-and-eval-design.md +0 -350
- package/docs/plans/2026-03-10-command-creator-and-eval-tasks.md +0 -426
- package/docs/plans/2026-03-10-stale-workflow-refs-decisions.md +0 -8
- package/docs/plans/2026-03-10-stale-workflow-refs-design.md +0 -80
- package/docs/plans/2026-03-10-stale-workflow-refs-tasks.md +0 -90
- package/docs/plans/2026-03-14-beads-plan-context-decisions.md +0 -9
- package/docs/plans/2026-03-14-beads-plan-context-design.md +0 -171
- package/docs/plans/2026-03-14-beads-plan-context-tasks.md +0 -160
- package/docs/plans/2026-03-14-skill-eval-loop-decisions.md +0 -33
- package/docs/plans/2026-03-14-skill-eval-loop-design.md +0 -118
- package/docs/plans/2026-03-14-skill-eval-loop-results.md +0 -78
- package/docs/plans/2026-03-14-skill-eval-loop-tasks.md +0 -160
- package/docs/plans/2026-03-15-agent-command-parity-v2-decisions.md +0 -11
- package/docs/plans/2026-03-15-agent-command-parity-v2-design.md +0 -145
- package/docs/plans/2026-03-15-agent-command-parity-v2-tasks.md +0 -211
- package/docs/research/TEMPLATE.md +0 -292
- package/docs/research/advanced-testing.md +0 -297
- package/docs/research/agent-permissions.md +0 -167
- package/docs/research/dependency-chain.md +0 -328
- package/docs/research/forge-workflow-v2.md +0 -550
- package/docs/research/plugin-architecture.md +0 -772
- package/docs/research/pr4-cli-automation.md +0 -326
- package/docs/research/premerge-verify-restructure.md +0 -205
- package/docs/research/skills-restructure.md +0 -508
- package/docs/research/sonarcloud-perfection-plan.md +0 -166
- package/docs/research/sonarcloud-quality-gate.md +0 -184
- package/docs/research/superpowers-integration.md +0 -403
- package/docs/research/superpowers.md +0 -319
- package/docs/research/test-environment.md +0 -519
|
@@ -0,0 +1,466 @@
|
|
|
1
|
+
# SonarCloud API Reference
|
|
2
|
+
|
|
3
|
+
Complete parameter and response documentation for all endpoints.
|
|
4
|
+
|
|
5
|
+
## Issues (`/api/issues/search`)
|
|
6
|
+
|
|
7
|
+
### Parameters
|
|
8
|
+
|
|
9
|
+
| Parameter | Description | Values |
|
|
10
|
+
| --------- | ----------- | ------ |
|
|
11
|
+
| `organization` | Org key | Required |
|
|
12
|
+
| `componentKeys` | Project key(s) | Comma-separated |
|
|
13
|
+
| `types` | Issue types | `BUG`, `VULNERABILITY`, `CODE_SMELL`, `SECURITY_HOTSPOT` |
|
|
14
|
+
| `severities` | Severity | `BLOCKER`, `CRITICAL`, `MAJOR`, `MINOR`, `INFO` |
|
|
15
|
+
| `statuses` | Status | `OPEN`, `CONFIRMED`, `REOPENED`, `RESOLVED`, `CLOSED` |
|
|
16
|
+
| `resolutions` | Resolution | `FALSE-POSITIVE`, `WONTFIX`, `FIXED`, `REMOVED` |
|
|
17
|
+
| `resolved` | Filter | `true`, `false` |
|
|
18
|
+
| `branch` | Branch name | String |
|
|
19
|
+
| `pullRequest` | PR number | String |
|
|
20
|
+
| `createdAfter` | Date filter | `YYYY-MM-DD` |
|
|
21
|
+
| `createdBefore` | Date filter | `YYYY-MM-DD` |
|
|
22
|
+
| `languages` | Languages | `java`, `typescript`, `python`, etc. |
|
|
23
|
+
| `rules` | Rule keys | Comma-separated |
|
|
24
|
+
| `tags` | Issue tags | Comma-separated |
|
|
25
|
+
| `assignees` | Assigned users | Comma-separated |
|
|
26
|
+
| `authors` | Code authors | Comma-separated |
|
|
27
|
+
| `scopes` | Scope | `MAIN`, `TEST` |
|
|
28
|
+
| `inNewCodePeriod` | New code only | `true`, `false` |
|
|
29
|
+
| `facets` | Aggregations | `severities`, `types`, `rules`, `tags` |
|
|
30
|
+
| `p` | Page number | Integer (1-based) |
|
|
31
|
+
| `ps` | Page size | Integer (max 500) |
|
|
32
|
+
| `s` | Sort field | `CREATION_DATE`, `UPDATE_DATE`, `SEVERITY` |
|
|
33
|
+
| `asc` | Sort order | `true`, `false` |
|
|
34
|
+
|
|
35
|
+
### Response
|
|
36
|
+
|
|
37
|
+
```json
|
|
38
|
+
{
|
|
39
|
+
"total": 150,
|
|
40
|
+
"paging": { "pageIndex": 1, "pageSize": 100, "total": 150 },
|
|
41
|
+
"issues": [{
|
|
42
|
+
"key": "AYx...",
|
|
43
|
+
"rule": "typescript:S1234",
|
|
44
|
+
"severity": "MAJOR",
|
|
45
|
+
"component": "my-project:src/file.ts",
|
|
46
|
+
"line": 42,
|
|
47
|
+
"message": "Remove this unused variable.",
|
|
48
|
+
"type": "CODE_SMELL",
|
|
49
|
+
"status": "OPEN",
|
|
50
|
+
"effort": "5min",
|
|
51
|
+
"tags": ["unused"],
|
|
52
|
+
"creationDate": "2024-01-15T10:30:00+0000"
|
|
53
|
+
}],
|
|
54
|
+
"facets": [{ "property": "severities", "values": [{ "val": "MAJOR", "count": 50 }] }]
|
|
55
|
+
}
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
---
|
|
59
|
+
|
|
60
|
+
## Metrics (`/api/measures/component`)
|
|
61
|
+
|
|
62
|
+
### Parameters
|
|
63
|
+
|
|
64
|
+
| Parameter | Description |
|
|
65
|
+
| --------- | ----------- |
|
|
66
|
+
| `component` | Project key (required) |
|
|
67
|
+
| `metricKeys` | Metrics (comma-separated) |
|
|
68
|
+
| `branch` | Branch name |
|
|
69
|
+
| `pullRequest` | PR number |
|
|
70
|
+
| `additionalFields` | `metrics`, `periods` |
|
|
71
|
+
|
|
72
|
+
### All Metric Keys
|
|
73
|
+
|
|
74
|
+
| Category | Keys |
|
|
75
|
+
| -------- | ---- |
|
|
76
|
+
| Size | `ncloc`, `lines`, `statements`, `functions`, `classes`, `files` |
|
|
77
|
+
| Complexity | `complexity`, `cognitive_complexity` |
|
|
78
|
+
| Coverage | `coverage`, `line_coverage`, `branch_coverage`, `tests`, `test_success_density`, `uncovered_lines`, `uncovered_conditions` |
|
|
79
|
+
| Duplication | `duplicated_lines`, `duplicated_lines_density`, `duplicated_blocks`, `duplicated_files` |
|
|
80
|
+
| Issues | `bugs`, `vulnerabilities`, `code_smells`, `security_hotspots` |
|
|
81
|
+
| Ratings | `sqale_rating`, `reliability_rating`, `security_rating`, `security_review_rating` (1=A to 5=E) |
|
|
82
|
+
| Debt | `sqale_index` (minutes), `sqale_debt_ratio` (%) |
|
|
83
|
+
| Quality Gate | `alert_status`, `quality_gate_details` |
|
|
84
|
+
| New Code | `new_bugs`, `new_vulnerabilities`, `new_code_smells`, `new_coverage`, `new_duplicated_lines_density` |
|
|
85
|
+
|
|
86
|
+
### Response
|
|
87
|
+
|
|
88
|
+
```json
|
|
89
|
+
{
|
|
90
|
+
"component": {
|
|
91
|
+
"key": "my-project",
|
|
92
|
+
"name": "My Project",
|
|
93
|
+
"measures": [
|
|
94
|
+
{ "metric": "bugs", "value": "12" },
|
|
95
|
+
{ "metric": "coverage", "value": "78.5" },
|
|
96
|
+
{ "metric": "sqale_rating", "value": "2.0" }
|
|
97
|
+
]
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
---
|
|
103
|
+
|
|
104
|
+
## Quality Gate (`/api/qualitygates/project_status`)
|
|
105
|
+
|
|
106
|
+
### Parameters
|
|
107
|
+
|
|
108
|
+
| Parameter | Description |
|
|
109
|
+
| --------- | ----------- |
|
|
110
|
+
| `projectKey` | Project key (required) |
|
|
111
|
+
| `branch` | Branch name |
|
|
112
|
+
| `pullRequest` | PR number |
|
|
113
|
+
|
|
114
|
+
### Response
|
|
115
|
+
|
|
116
|
+
```json
|
|
117
|
+
{
|
|
118
|
+
"projectStatus": {
|
|
119
|
+
"status": "ERROR",
|
|
120
|
+
"conditions": [{
|
|
121
|
+
"status": "ERROR",
|
|
122
|
+
"metricKey": "new_coverage",
|
|
123
|
+
"comparator": "LT",
|
|
124
|
+
"errorThreshold": "80",
|
|
125
|
+
"actualValue": "65.3"
|
|
126
|
+
}],
|
|
127
|
+
"ignoredConditions": false
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
---
|
|
133
|
+
|
|
134
|
+
## Security Hotspots (`/api/hotspots/search`)
|
|
135
|
+
|
|
136
|
+
### Parameters
|
|
137
|
+
|
|
138
|
+
| Parameter | Description | Values |
|
|
139
|
+
| --------- | ----------- | ------ |
|
|
140
|
+
| `projectKey` | Project key | Required |
|
|
141
|
+
| `branch` | Branch name | String |
|
|
142
|
+
| `pullRequest` | PR number | String |
|
|
143
|
+
| `status` | Status | `TO_REVIEW`, `REVIEWED` |
|
|
144
|
+
| `resolution` | Resolution | `FIXED`, `SAFE`, `ACKNOWLEDGED` |
|
|
145
|
+
| `inNewCodePeriod` | New code | `true`, `false` |
|
|
146
|
+
| `p` / `ps` | Pagination | Integer |
|
|
147
|
+
|
|
148
|
+
### Response
|
|
149
|
+
|
|
150
|
+
```json
|
|
151
|
+
{
|
|
152
|
+
"paging": { "total": 5 },
|
|
153
|
+
"hotspots": [{
|
|
154
|
+
"key": "...",
|
|
155
|
+
"component": "my-project:src/auth.ts",
|
|
156
|
+
"securityCategory": "sql-injection",
|
|
157
|
+
"vulnerabilityProbability": "HIGH",
|
|
158
|
+
"status": "TO_REVIEW",
|
|
159
|
+
"message": "Make sure this SQL query is safe.",
|
|
160
|
+
"line": 42
|
|
161
|
+
}]
|
|
162
|
+
}
|
|
163
|
+
```
|
|
164
|
+
|
|
165
|
+
---
|
|
166
|
+
|
|
167
|
+
## Projects (`/api/projects/search`)
|
|
168
|
+
|
|
169
|
+
### Parameters
|
|
170
|
+
|
|
171
|
+
| Parameter | Description |
|
|
172
|
+
| --------- | ----------- |
|
|
173
|
+
| `organization` | Org key |
|
|
174
|
+
| `q` | Search query |
|
|
175
|
+
| `qualifiers` | `TRK` (project), `APP` |
|
|
176
|
+
| `p` / `ps` | Pagination |
|
|
177
|
+
|
|
178
|
+
---
|
|
179
|
+
|
|
180
|
+
## Analysis History (`/api/project_analyses/search`)
|
|
181
|
+
|
|
182
|
+
### Parameters
|
|
183
|
+
|
|
184
|
+
| Parameter | Description |
|
|
185
|
+
| --------- | ----------- |
|
|
186
|
+
| `project` | Project key |
|
|
187
|
+
| `branch` | Branch name |
|
|
188
|
+
| `from` / `to` | Date range |
|
|
189
|
+
| `p` / `ps` | Pagination |
|
|
190
|
+
|
|
191
|
+
### Response
|
|
192
|
+
|
|
193
|
+
```json
|
|
194
|
+
{
|
|
195
|
+
"analyses": [{
|
|
196
|
+
"key": "AYx...",
|
|
197
|
+
"date": "2024-01-15T10:30:00+0000",
|
|
198
|
+
"projectVersion": "1.2.0",
|
|
199
|
+
"revision": "abc123def",
|
|
200
|
+
"events": [{ "category": "VERSION", "name": "1.2.0" }]
|
|
201
|
+
}]
|
|
202
|
+
}
|
|
203
|
+
```
|
|
204
|
+
|
|
205
|
+
---
|
|
206
|
+
|
|
207
|
+
## Metrics History (`/api/measures/search_history`)
|
|
208
|
+
|
|
209
|
+
### Parameters
|
|
210
|
+
|
|
211
|
+
| Parameter | Description |
|
|
212
|
+
| --------- | ----------- |
|
|
213
|
+
| `component` | Project key |
|
|
214
|
+
| `metrics` | Metric keys |
|
|
215
|
+
| `from` / `to` | Date range (`YYYY-MM-DD`) |
|
|
216
|
+
| `branch` | Branch name |
|
|
217
|
+
| `p` / `ps` | Pagination |
|
|
218
|
+
|
|
219
|
+
---
|
|
220
|
+
|
|
221
|
+
## Component Tree (`/api/components/tree`)
|
|
222
|
+
|
|
223
|
+
### Parameters
|
|
224
|
+
|
|
225
|
+
| Parameter | Description |
|
|
226
|
+
| --------- | ----------- |
|
|
227
|
+
| `component` | Project key |
|
|
228
|
+
| `branch` | Branch name |
|
|
229
|
+
| `qualifiers` | `FIL` (file), `DIR`, `UTS` (test) |
|
|
230
|
+
| `metricKeys` | Metrics per component |
|
|
231
|
+
| `strategy` | `children`, `leaves`, `all` |
|
|
232
|
+
| `q` | Search query |
|
|
233
|
+
| `s` / `asc` | Sort field / ascending |
|
|
234
|
+
| `metricSort` | Metric to sort by |
|
|
235
|
+
|
|
236
|
+
---
|
|
237
|
+
|
|
238
|
+
## Duplications (`/api/duplications/show`)
|
|
239
|
+
|
|
240
|
+
Get detailed duplicate code blocks for a specific file.
|
|
241
|
+
|
|
242
|
+
### Parameters
|
|
243
|
+
|
|
244
|
+
| Parameter | Description |
|
|
245
|
+
| --------- | ----------- |
|
|
246
|
+
| `key` | File key (required) - format: `project-key:path/to/file.ts` |
|
|
247
|
+
| `branch` | Branch name |
|
|
248
|
+
| `pullRequest` | PR number |
|
|
249
|
+
|
|
250
|
+
### Response
|
|
251
|
+
|
|
252
|
+
```json
|
|
253
|
+
{
|
|
254
|
+
"duplications": [
|
|
255
|
+
{
|
|
256
|
+
"blocks": [
|
|
257
|
+
{
|
|
258
|
+
"from": 1,
|
|
259
|
+
"size": 20,
|
|
260
|
+
"_ref": "1"
|
|
261
|
+
},
|
|
262
|
+
{
|
|
263
|
+
"from": 50,
|
|
264
|
+
"size": 20,
|
|
265
|
+
"_ref": "2"
|
|
266
|
+
}
|
|
267
|
+
]
|
|
268
|
+
}
|
|
269
|
+
],
|
|
270
|
+
"files": {
|
|
271
|
+
"1": {
|
|
272
|
+
"key": "my-project:src/utils/helpers.ts",
|
|
273
|
+
"name": "helpers.ts",
|
|
274
|
+
"projectName": "My Project"
|
|
275
|
+
},
|
|
276
|
+
"2": {
|
|
277
|
+
"key": "my-project:src/utils/common.ts",
|
|
278
|
+
"name": "common.ts",
|
|
279
|
+
"projectName": "My Project"
|
|
280
|
+
}
|
|
281
|
+
}
|
|
282
|
+
}
|
|
283
|
+
```
|
|
284
|
+
|
|
285
|
+
### Workflow: Find All Duplicates
|
|
286
|
+
|
|
287
|
+
```bash
|
|
288
|
+
# 1. Get files with most duplication
|
|
289
|
+
curl -H "Authorization: Bearer $TOKEN" \
|
|
290
|
+
"https://sonarcloud.io/api/components/tree?component=$PROJECT&qualifiers=FIL&metricKeys=duplicated_lines_density&s=metric&metricSort=duplicated_lines_density&asc=false&ps=20"
|
|
291
|
+
|
|
292
|
+
# 2. For each file, get duplicate blocks
|
|
293
|
+
curl -H "Authorization: Bearer $TOKEN" \
|
|
294
|
+
"https://sonarcloud.io/api/duplications/show?key=my-project:src/file.ts"
|
|
295
|
+
```
|
|
296
|
+
|
|
297
|
+
---
|
|
298
|
+
|
|
299
|
+
## Rules (`/api/rules/search`)
|
|
300
|
+
|
|
301
|
+
### Parameters
|
|
302
|
+
|
|
303
|
+
| Parameter | Description |
|
|
304
|
+
| --------- | ----------- |
|
|
305
|
+
| `languages` | Filter by language |
|
|
306
|
+
| `severities` | Filter by severity |
|
|
307
|
+
| `types` | Filter by type |
|
|
308
|
+
| `tags` | Filter by tags |
|
|
309
|
+
| `q` | Search query |
|
|
310
|
+
| `p` / `ps` | Pagination |
|
|
311
|
+
|
|
312
|
+
---
|
|
313
|
+
|
|
314
|
+
## Sources (`/api/sources/*`)
|
|
315
|
+
|
|
316
|
+
### Raw Source Code (`/api/sources/raw`)
|
|
317
|
+
|
|
318
|
+
| Parameter | Description |
|
|
319
|
+
| --------- | ----------- |
|
|
320
|
+
| `key` | File key (required) - format: `project:path/to/file.ts` |
|
|
321
|
+
| `branch` | Branch name |
|
|
322
|
+
|
|
323
|
+
```bash
|
|
324
|
+
curl -H "Authorization: Bearer $TOKEN" \
|
|
325
|
+
"https://sonarcloud.io/api/sources/raw?key=my-project:src/utils/helpers.ts"
|
|
326
|
+
```
|
|
327
|
+
|
|
328
|
+
### SCM Blame (`/api/sources/scm`)
|
|
329
|
+
|
|
330
|
+
| Parameter | Description |
|
|
331
|
+
| --------- | ----------- |
|
|
332
|
+
| `key` | File key (required) |
|
|
333
|
+
| `from` | Start line |
|
|
334
|
+
| `to` | End line |
|
|
335
|
+
|
|
336
|
+
```bash
|
|
337
|
+
curl -H "Authorization: Bearer $TOKEN" \
|
|
338
|
+
"https://sonarcloud.io/api/sources/scm?key=my-project:src/utils/helpers.ts"
|
|
339
|
+
```
|
|
340
|
+
|
|
341
|
+
**Response**: Returns author, date, and revision for each line.
|
|
342
|
+
|
|
343
|
+
---
|
|
344
|
+
|
|
345
|
+
## Compute Engine (`/api/ce/activity`)
|
|
346
|
+
|
|
347
|
+
Get background task status (analysis jobs).
|
|
348
|
+
|
|
349
|
+
| Parameter | Description |
|
|
350
|
+
| --------- | ----------- |
|
|
351
|
+
| `component` | Project key |
|
|
352
|
+
| `status` | `SUCCESS`, `FAILED`, `CANCELED`, `PENDING`, `IN_PROGRESS` |
|
|
353
|
+
| `type` | Task type (e.g., `REPORT`) |
|
|
354
|
+
| `minSubmittedAt` | Filter by submission date |
|
|
355
|
+
| `maxExecutedAt` | Filter by execution date |
|
|
356
|
+
| `p` / `ps` | Pagination |
|
|
357
|
+
|
|
358
|
+
```bash
|
|
359
|
+
curl -H "Authorization: Bearer $TOKEN" \
|
|
360
|
+
"https://sonarcloud.io/api/ce/activity?component=my-project&status=FAILED"
|
|
361
|
+
```
|
|
362
|
+
|
|
363
|
+
---
|
|
364
|
+
|
|
365
|
+
## Quality Profiles (`/api/qualityprofiles/search`)
|
|
366
|
+
|
|
367
|
+
| Parameter | Description |
|
|
368
|
+
| --------- | ----------- |
|
|
369
|
+
| `language` | Filter by language |
|
|
370
|
+
| `project` | Project key |
|
|
371
|
+
| `qualityProfile` | Profile name |
|
|
372
|
+
|
|
373
|
+
```bash
|
|
374
|
+
curl -H "Authorization: Bearer $TOKEN" \
|
|
375
|
+
"https://sonarcloud.io/api/qualityprofiles/search?language=ts"
|
|
376
|
+
```
|
|
377
|
+
|
|
378
|
+
---
|
|
379
|
+
|
|
380
|
+
## Languages (`/api/languages/list`)
|
|
381
|
+
|
|
382
|
+
List all supported languages.
|
|
383
|
+
|
|
384
|
+
```bash
|
|
385
|
+
curl -H "Authorization: Bearer $TOKEN" \
|
|
386
|
+
"https://sonarcloud.io/api/languages/list"
|
|
387
|
+
```
|
|
388
|
+
|
|
389
|
+
**Response**: `{ "languages": [{ "key": "ts", "name": "TypeScript" }, ...] }`
|
|
390
|
+
|
|
391
|
+
---
|
|
392
|
+
|
|
393
|
+
## Branches (`/api/project_branches/list`)
|
|
394
|
+
|
|
395
|
+
| Parameter | Description |
|
|
396
|
+
| --------- | ----------- |
|
|
397
|
+
| `project` | Project key (required) |
|
|
398
|
+
|
|
399
|
+
```bash
|
|
400
|
+
curl -H "Authorization: Bearer $TOKEN" \
|
|
401
|
+
"https://sonarcloud.io/api/project_branches/list?project=my-project"
|
|
402
|
+
```
|
|
403
|
+
|
|
404
|
+
**Response**: `{ "branches": [{ "name": "main", "isMain": true, "type": "LONG", "status": { "qualityGateStatus": "OK" } }] }`
|
|
405
|
+
|
|
406
|
+
---
|
|
407
|
+
|
|
408
|
+
## Badges (`/api/project_badges/*`)
|
|
409
|
+
|
|
410
|
+
### Measure Badge (`/api/project_badges/measure`)
|
|
411
|
+
|
|
412
|
+
| Parameter | Description |
|
|
413
|
+
| --------- | ----------- |
|
|
414
|
+
| `project` | Project key |
|
|
415
|
+
| `metric` | `bugs`, `coverage`, `code_smells`, `vulnerabilities`, etc. |
|
|
416
|
+
| `branch` | Branch name |
|
|
417
|
+
|
|
418
|
+
Returns SVG badge image.
|
|
419
|
+
|
|
420
|
+
```bash
|
|
421
|
+
curl "https://sonarcloud.io/api/project_badges/measure?project=my-project&metric=coverage"
|
|
422
|
+
```
|
|
423
|
+
|
|
424
|
+
### Quality Gate Badge (`/api/project_badges/quality_gate`)
|
|
425
|
+
|
|
426
|
+
| Parameter | Description |
|
|
427
|
+
| --------- | ----------- |
|
|
428
|
+
| `project` | Project key |
|
|
429
|
+
| `branch` | Branch name |
|
|
430
|
+
|
|
431
|
+
```bash
|
|
432
|
+
curl "https://sonarcloud.io/api/project_badges/quality_gate?project=my-project"
|
|
433
|
+
```
|
|
434
|
+
|
|
435
|
+
---
|
|
436
|
+
|
|
437
|
+
## Pagination Example
|
|
438
|
+
|
|
439
|
+
```bash
|
|
440
|
+
PAGE=1
|
|
441
|
+
while true; do
|
|
442
|
+
R=$(curl -s -H "Authorization: Bearer $TOKEN" \
|
|
443
|
+
"https://sonarcloud.io/api/issues/search?organization=$ORG&componentKeys=$PROJECT&p=$PAGE&ps=500")
|
|
444
|
+
echo $R | jq '.issues[]'
|
|
445
|
+
[ $((PAGE * 500)) -ge $(echo $R | jq '.total') ] && break
|
|
446
|
+
PAGE=$((PAGE + 1))
|
|
447
|
+
done
|
|
448
|
+
```
|
|
449
|
+
|
|
450
|
+
---
|
|
451
|
+
|
|
452
|
+
## Error Codes
|
|
453
|
+
|
|
454
|
+
| Code | Meaning | Fix |
|
|
455
|
+
| ---- | ------- | --- |
|
|
456
|
+
| 401 | Invalid token | Check `SONARCLOUD_TOKEN` |
|
|
457
|
+
| 403 | No permission | Verify project access |
|
|
458
|
+
| 404 | Not found | Check project/org key |
|
|
459
|
+
| 400 | Bad request | Check parameter values |
|
|
460
|
+
|
|
461
|
+
---
|
|
462
|
+
|
|
463
|
+
## References
|
|
464
|
+
|
|
465
|
+
- [SonarCloud Web API](https://sonarcloud.io/web_api)
|
|
466
|
+
- [SonarCloud Docs](https://docs.sonarsource.com/sonarcloud/)
|