devsecops-radar 0.3.7__tar.gz → 0.3.9__tar.gz

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.
Files changed (60) hide show
  1. {devsecops_radar-0.3.7/devsecops_radar.egg-info → devsecops_radar-0.3.9}/PKG-INFO +119 -75
  2. {devsecops_radar-0.3.7 → devsecops_radar-0.3.9}/README.md +119 -75
  3. {devsecops_radar-0.3.7 → devsecops_radar-0.3.9}/devsecops_radar/web/dashboard/routes.py +1 -1
  4. {devsecops_radar-0.3.7 → devsecops_radar-0.3.9/devsecops_radar.egg-info}/PKG-INFO +119 -75
  5. {devsecops_radar-0.3.7 → devsecops_radar-0.3.9}/pyproject.toml +1 -1
  6. {devsecops_radar-0.3.7 → devsecops_radar-0.3.9}/LICENSE +0 -0
  7. {devsecops_radar-0.3.7 → devsecops_radar-0.3.9}/MANIFEST.in +0 -0
  8. {devsecops_radar-0.3.7 → devsecops_radar-0.3.9}/devsecops_radar/__init__.py +0 -0
  9. {devsecops_radar-0.3.7 → devsecops_radar-0.3.9}/devsecops_radar/cli/__init__.py +0 -0
  10. {devsecops_radar-0.3.7 → devsecops_radar-0.3.9}/devsecops_radar/cli/scanner.py +0 -0
  11. {devsecops_radar-0.3.7 → devsecops_radar-0.3.9}/devsecops_radar/core/__init__.py +0 -0
  12. {devsecops_radar-0.3.7 → devsecops_radar-0.3.9}/devsecops_radar/core/analyzer.py +0 -0
  13. {devsecops_radar-0.3.7 → devsecops_radar-0.3.9}/devsecops_radar/core/attack_simulation.py +0 -0
  14. {devsecops_radar-0.3.7 → devsecops_radar-0.3.9}/devsecops_radar/core/auth.py +0 -0
  15. {devsecops_radar-0.3.7 → devsecops_radar-0.3.9}/devsecops_radar/core/database.py +0 -0
  16. {devsecops_radar-0.3.7 → devsecops_radar-0.3.9}/devsecops_radar/core/models.py +0 -0
  17. {devsecops_radar-0.3.7 → devsecops_radar-0.3.9}/devsecops_radar/core/parser.py +0 -0
  18. {devsecops_radar-0.3.7 → devsecops_radar-0.3.9}/devsecops_radar/core/rag.py +0 -0
  19. {devsecops_radar-0.3.7 → devsecops_radar-0.3.9}/devsecops_radar/core/remediation.py +0 -0
  20. {devsecops_radar-0.3.7 → devsecops_radar-0.3.9}/devsecops_radar/core/reporting.py +0 -0
  21. {devsecops_radar-0.3.7 → devsecops_radar-0.3.9}/devsecops_radar/core/rule_fusion.py +0 -0
  22. {devsecops_radar-0.3.7 → devsecops_radar-0.3.9}/devsecops_radar/core/sbom.py +0 -0
  23. {devsecops_radar-0.3.7 → devsecops_radar-0.3.9}/devsecops_radar/core/settings.py +0 -0
  24. {devsecops_radar-0.3.7 → devsecops_radar-0.3.9}/devsecops_radar/core/valuation.py +0 -0
  25. {devsecops_radar-0.3.7 → devsecops_radar-0.3.9}/devsecops_radar/plugins/__init__.py +0 -0
  26. {devsecops_radar-0.3.7 → devsecops_radar-0.3.9}/devsecops_radar/scanners/adapter.py +0 -0
  27. {devsecops_radar-0.3.7 → devsecops_radar-0.3.9}/devsecops_radar/scanners/base.py +0 -0
  28. {devsecops_radar-0.3.7 → devsecops_radar-0.3.9}/devsecops_radar/scanners/gitleaks.py +0 -0
  29. {devsecops_radar-0.3.7 → devsecops_radar-0.3.9}/devsecops_radar/scanners/poutine.py +0 -0
  30. {devsecops_radar-0.3.7 → devsecops_radar-0.3.9}/devsecops_radar/scanners/semgrep.py +0 -0
  31. {devsecops_radar-0.3.7 → devsecops_radar-0.3.9}/devsecops_radar/scanners/trivy.py +0 -0
  32. {devsecops_radar-0.3.7 → devsecops_radar-0.3.9}/devsecops_radar/scanners/zizmor.py +0 -0
  33. {devsecops_radar-0.3.7 → devsecops_radar-0.3.9}/devsecops_radar/web/__init__.py +0 -0
  34. {devsecops_radar-0.3.7 → devsecops_radar-0.3.9}/devsecops_radar/web/app.py +0 -0
  35. {devsecops_radar-0.3.7 → devsecops_radar-0.3.9}/devsecops_radar/web/attack_paths/__init__.py +0 -0
  36. {devsecops_radar-0.3.7 → devsecops_radar-0.3.9}/devsecops_radar/web/attack_paths/routes.py +0 -0
  37. {devsecops_radar-0.3.7 → devsecops_radar-0.3.9}/devsecops_radar/web/dashboard/__init__.py +0 -0
  38. {devsecops_radar-0.3.7 → devsecops_radar-0.3.9}/devsecops_radar/web/sentry/routes.py +0 -0
  39. {devsecops_radar-0.3.7 → devsecops_radar-0.3.9}/devsecops_radar/web/static/css/bootstrap.min.css +0 -0
  40. {devsecops_radar-0.3.7 → devsecops_radar-0.3.9}/devsecops_radar/web/static/css/style.css +0 -0
  41. {devsecops_radar-0.3.7 → devsecops_radar-0.3.9}/devsecops_radar/web/static/js/bootstrap.bundle.min.js +0 -0
  42. {devsecops_radar-0.3.7 → devsecops_radar-0.3.9}/devsecops_radar/web/static/js/chart.umd.min.js +0 -0
  43. {devsecops_radar-0.3.7 → devsecops_radar-0.3.9}/devsecops_radar/web/static/js/dashboard.js +0 -0
  44. {devsecops_radar-0.3.7 → devsecops_radar-0.3.9}/devsecops_radar/web/summary/__init__.py +0 -0
  45. {devsecops_radar-0.3.7 → devsecops_radar-0.3.9}/devsecops_radar/web/summary/routes.py +0 -0
  46. {devsecops_radar-0.3.7 → devsecops_radar-0.3.9}/devsecops_radar/web/templates/index.html +0 -0
  47. {devsecops_radar-0.3.7 → devsecops_radar-0.3.9}/devsecops_radar/web/topology/__init__.py +0 -0
  48. {devsecops_radar-0.3.7 → devsecops_radar-0.3.9}/devsecops_radar/web/topology/routes.py +0 -0
  49. {devsecops_radar-0.3.7 → devsecops_radar-0.3.9}/devsecops_radar.egg-info/SOURCES.txt +0 -0
  50. {devsecops_radar-0.3.7 → devsecops_radar-0.3.9}/devsecops_radar.egg-info/dependency_links.txt +0 -0
  51. {devsecops_radar-0.3.7 → devsecops_radar-0.3.9}/devsecops_radar.egg-info/entry_points.txt +0 -0
  52. {devsecops_radar-0.3.7 → devsecops_radar-0.3.9}/devsecops_radar.egg-info/requires.txt +0 -0
  53. {devsecops_radar-0.3.7 → devsecops_radar-0.3.9}/devsecops_radar.egg-info/top_level.txt +0 -0
  54. {devsecops_radar-0.3.7 → devsecops_radar-0.3.9}/setup.cfg +0 -0
  55. {devsecops_radar-0.3.7 → devsecops_radar-0.3.9}/tests/test_analyzer.py +0 -0
  56. {devsecops_radar-0.3.7 → devsecops_radar-0.3.9}/tests/test_api.py +0 -0
  57. {devsecops_radar-0.3.7 → devsecops_radar-0.3.9}/tests/test_cli.py +0 -0
  58. {devsecops_radar-0.3.7 → devsecops_radar-0.3.9}/tests/test_database.py +0 -0
  59. {devsecops_radar-0.3.7 → devsecops_radar-0.3.9}/tests/test_rule_fusion.py +0 -0
  60. {devsecops_radar-0.3.7 → devsecops_radar-0.3.9}/tests/test_scanners.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: devsecops-radar
3
- Version: 0.3.7
3
+ Version: 0.3.9
4
4
  Summary: Unified CI/CD Security Dashboard — Pipeline Sentinel
5
5
  Author-email: Mehrdoost <70381337+Mehrdoost@users.noreply.github.com>
6
6
  License-Expression: MIT
@@ -27,16 +27,16 @@ Requires-Dist: pytest>=8.0
27
27
  Requires-Dist: pytest-flask>=1.3
28
28
  Dynamic: license-file
29
29
 
30
- <!-- markdownlint-disable MD033 MD041 -->
31
30
  <div align="center">
32
31
 
33
32
  # 🛡️ Pipeline Sentinel
33
+
34
34
  **The Open‑Source DevSecOps Command Center — Unify, Analyse, Remediate.**
35
35
 
36
36
  [![PyPI version](https://img.shields.io/pypi/v/devsecops-radar?style=flat-square&color=blue)](https://pypi.org/project/devsecops-radar/)
37
37
  [![License](https://img.shields.io/github/license/Mehrdoost/devsecops-radar?style=flat-square)](LICENSE)
38
38
  [![GitHub release](https://img.shields.io/github/v/release/Mehrdoost/devsecops-radar?include_prereleases&style=flat-square)](https://github.com/Mehrdoost/devsecops-radar/releases)
39
- [![CI](https://img.shields.io/github/actions/workflow/status/Mehrdoost/devsecops-radar/test-action.yml?branch=main&style=flat-square)](https://github.com/Mehrdoost/devsecops-radar/actions)
39
+ [![CI](https://img.shields.io/github/actions/workflow/status/Mehrdoost/devsecops-radar/ci.yml?branch=main&style=flat-square)](https://github.com/Mehrdoost/devsecops-radar/actions)
40
40
  [![Stars](https://img.shields.io/github/stars/Mehrdoost/devsecops-radar?style=flat-square)](https://github.com/Mehrdoost/devsecops-radar/stargazers)
41
41
 
42
42
  </div>
@@ -46,21 +46,24 @@ Dynamic: license-file
46
46
  ---
47
47
 
48
48
  ## 📖 Table of Contents
49
+
49
50
  1. [What Is Pipeline Sentinel? (Simple Explanation)](#-what-is-pipeline-sentinel-simple-explanation)
50
51
  2. [Why You Need It](#-why-you-need-it)
51
52
  3. [Where to Run It in Your Network](#-where-to-run-it-in-your-network)
52
53
  4. [Dashboard Preview](#-dashboard-preview)
53
54
  5. [Quick Start](#-quick-start)
54
- 6. [Installation](#-installation)
55
- 7. [How to Use (Step‑by‑Step)](#-how-to-use-stepbystep)
56
- 8. [Complete Command Reference](#-complete-command-reference)
57
- 9. [Core Capabilities](#-core-capabilities)
58
- 10. [Architecture](#️-architecture)
59
- 11. [Roadmap](#️-roadmap)
60
- 12. [GitHub Action](#-github-action)
61
- 13. [Contributing](#-contributing)
62
- 14. [Author](#-author)
63
- 15. [License](#-license)
55
+ 6. [Prerequisites](#-prerequisites)
56
+ 7. [Installation](#-installation)
57
+ 8. [How to Use (Step‑by‑Step)](#-how-to-use-stepbystep)
58
+ 9. [Complete Command Reference](#-complete-command-reference)
59
+ 10. [Core Capabilities](#-core-capabilities)
60
+ 11. [Community Rules & Online Updates](#-community-rules--online-updates)
61
+ 12. [Architecture](#️-architecture)
62
+ 13. [Roadmap](#️-roadmap)
63
+ 14. [Testing & CI](#-testing--ci)
64
+ 15. [Contributing](#-contributing)
65
+ 16. [Author](#-author)
66
+ 17. [License](#-license)
64
67
 
65
68
  ---
66
69
 
@@ -79,13 +82,13 @@ Think of it as a **security camera system for your entire CI/CD pipeline** — i
79
82
  In 2026, **supply chain attacks** have become the #1 threat. Tools like Trivy themselves were compromised, and attackers now inject malicious code directly into build pipelines. **You can no longer just scan your code; you must scan your pipeline.**
80
83
 
81
84
  Pipeline Sentinel gives you:
82
- * **One screen for all scanners** – stop juggling log files.
83
- * **AI that understands attack chains** – “A leaked secret + an old library = a disaster.”
84
- * **Automatic fixes** – with a single flag, it patches files and opens a pull request.
85
- * **Human review mode** – inspect each fix before applying.
86
- * **Compliance reports** – generate a PDF for your boss or auditor.
87
- * **100% offline capable** – works in air‑gapped environments where security matters most.
88
- * **Interactive wizard** – one command to get everything running.
85
+ * **One screen for all scanners** – stop juggling log files.
86
+ * **AI that understands attack chains** – “A leaked secret + an old library = a disaster.”
87
+ * **Automatic fixes** – with a single flag, it patches files and opens a pull request.
88
+ * **Human review mode** – inspect each fix before applying.
89
+ * **Compliance reports** – generate a PDF for your boss or auditor.
90
+ * **100% offline capable** – works in air‑gapped environments where security matters most.
91
+ * **Interactive wizard** – one command to get everything running.
89
92
 
90
93
  ---
91
94
 
@@ -110,14 +113,15 @@ Pipeline Sentinel is designed to be **flexible** — you decide where it fits be
110
113
  [Gitleaks scan] ┘
111
114
  ```
112
115
 
113
- > **📌 Diagram Placeholder:**
114
- ![Network Flow Diagram](docs/architecture.png)
116
+ > **📌 Diagram Placeholder:** Add your network flow diagram here as `docs/network_flow.png`.
117
+ > `![Network Flow Diagram](docs/network_flow.png)`
115
118
 
116
119
  ---
117
120
 
118
121
  ## 📸 Dashboard Preview
119
122
 
120
123
  ![Pipeline Sentinel Dashboard](docs/Demo.gif)
124
+
121
125
  *(Severity doughnut, trend line chart, attack‑path graph (clickable nodes), topology view, executive summary — all fully offline.)*
122
126
 
123
127
  ---
@@ -144,6 +148,24 @@ devsecops-radar --wizard
144
148
 
145
149
  ---
146
150
 
151
+ ## 📋 Prerequisites
152
+
153
+ Pipeline Sentinel relies on external security tools to produce the JSON reports it consumes. You must install these tools separately according to your needs.
154
+
155
+ **Required for offline scanning:**
156
+ * Trivy (installation)
157
+ * Semgrep (installation)
158
+ * Poutine (installation)
159
+ * Zizmor (installation)
160
+ * Gitleaks (installation)
161
+
162
+ **Optional (for AI analysis):**
163
+ * Ollama (installation)
164
+
165
+ > 📖 **See `PREREQUISITES.md` for more details.**
166
+
167
+ ---
168
+
147
169
  ## 📦 Installation
148
170
 
149
171
  ### Option 1 — PyPI (Recommended)
@@ -199,19 +221,19 @@ gitleaks detect --source . --report-format json --report-path gitleaks.json
199
221
  ```bash
200
222
  devsecops-radar --trivy trivy.json --semgrep semgrep.json --poutine poutine.json --zizmor zizmor.json --gitleaks gitleaks.json
201
223
  ```
202
- This produces a single `findings.json` with all findings merged and normalised.
224
+ *This produces a single `findings.json` with all findings merged and normalised.*
203
225
 
204
226
  ### 3. View the Dashboard
205
227
  ```bash
206
228
  devsecops-radar-web
207
229
  ```
208
230
  The dashboard shows:
209
- * **Severity Breakdown** – Doughnut chart
210
- * **Trend Over Time** – Line chart from scan history
211
- * **Pipeline Security** – Poutine + Zizmor statistics card
212
- * **Attack Path Graph** – Interactive D3.js graph (click nodes for details)
213
- * **Executive Summary** – Risk score and AI‑generated summary
214
- * **Findings Table** – Searchable, filterable, paginated
231
+ * **Severity Breakdown** – Doughnut chart
232
+ * **Trend Over Time** – Line chart from scan history
233
+ * **Pipeline Security** – Poutine + Zizmor statistics card
234
+ * **Attack Path Graph** – Interactive D3.js graph (click nodes for details)
235
+ * **Executive Summary** – Risk score and AI‑generated summary
236
+ * **Findings Table** – Searchable, filterable, paginated
215
237
 
216
238
  ### 4. Enable AI Analysis (Optional)
217
239
  ```bash
@@ -220,10 +242,10 @@ devsecops-radar --trivy trivy.json --analyze
220
242
  devsecops-radar-web
221
243
  ```
222
244
  The LLM generates `findings_ai_summary.json` containing:
223
- * `executive_summary`, `risk_score`
224
- * `attack_paths` with MITRE ATT&CK tactics
225
- * `top_remediations` (some with `fix_diff`)
226
- * `false_positives_likely`
245
+ * `executive_summary`, `risk_score`
246
+ * `attack_paths` with MITRE ATT&CK tactics
247
+ * `top_remediations` (some with `fix_diff`)
248
+ * `false_positives_likely`
227
249
 
228
250
  ### 5. Auto‑Remediation (with Human Review)
229
251
  ```bash
@@ -233,7 +255,7 @@ devsecops-radar --trivy trivy.json --analyze --fix
233
255
  # Review each fix before applying
234
256
  devsecops-radar --trivy trivy.json --analyze --fix --review
235
257
  ```
236
- The tool creates a new git branch `auto-fix` and pushes it for review.
258
+ *The tool creates a new git branch `auto-fix` and pushes it for review.*
237
259
 
238
260
  ### 6. Policy Enforcement
239
261
  Create a `policy.json` file:
@@ -247,7 +269,7 @@ Create a `policy.json` file:
247
269
  ```bash
248
270
  devsecops-radar --trivy trivy.json --policy policy.json
249
271
  ```
250
- If critical findings exceed 5, the command exits with code 1 — perfect for CI/CD gates.
272
+ *If critical findings exceed 5, the command exits with code 1 — perfect for CI/CD gates.*
251
273
 
252
274
  ### 7. Generate Compliance Reports
253
275
  ```bash
@@ -312,18 +334,18 @@ Built‑in support for five scanners with a real plugin system. Third‑party sc
312
334
  | **Gitleaks**| Secrets detection | `--gitleaks` |
313
335
 
314
336
  ### 🧩 Hybrid RuleFusion Engine
315
- * **Offline** – Load custom JSON rules from any local directory (`--rules ~/my-rules/`)
316
- * **Online** – Pull community‑curated rules from a configurable Git repository (`--update-rules`)
317
- * Auto‑detects Trivy, Semgrep, Poutine, Zizmor, and plain‑list formats
318
- * Policy evaluation built directly into the engine
319
- * Community rules repo: `devsecops-radar-rules` (configurable via `COMMUNITY_RULES_REPO`)
337
+ * **Offline** – Load custom JSON rules from any local directory (`--rules ~/my-rules/`)
338
+ * **Online** – Pull community‑curated rules from a configurable Git repository (`--update-rules`)
339
+ * Auto‑detects Trivy, Semgrep, Poutine, Zizmor, and plain‑list formats
340
+ * Policy evaluation built directly into the engine
341
+ * Community rules repo: `devsecops-radar-rules` (configurable via `COMMUNITY_RULES_REPO`)
320
342
 
321
343
  ### 🧠 LLM‑Powered Analysis
322
- * Retry logic with exponential backoff for unstable endpoints
323
- * Few‑shot examples covering real‑world supply chain attack chains
324
- * Token‑aware selection (max items configurable via `ANALYZER_MAX_FINDINGS`)
325
- * Structured JSON output: `executive_summary`, `risk_score`, `attack_paths` (MITRE ATT&CK), `top_remediations`, `false_positives_likely`
326
- * Ollama (local, offline) and LiteLLM (OpenAI, Anthropic, etc.) support
344
+ * Retry logic with exponential backoff for unstable endpoints
345
+ * Few‑shot examples covering real‑world supply chain attack chains
346
+ * Token‑aware selection (max items configurable via `ANALYZER_MAX_FINDINGS`)
347
+ * Structured JSON output: `executive_summary`, `risk_score`, `attack_paths` (MITRE ATT&CK), `top_remediations`, `false_positives_likely`
348
+ * Ollama (local, offline) and LiteLLM (OpenAI, Anthropic, etc.) support
327
349
 
328
350
  ### 🕸️ Multi‑Step Attack Path Visualization
329
351
  Interactive D3.js force graph that chains findings into realistic attack scenarios. Click any node to see detailed finding information. Accepts a topology file to map findings onto your actual infrastructure, showing lateral movement across servers and subnets.
@@ -343,17 +365,17 @@ AI‑suggested fixes can be applied automatically (`--fix`) or reviewed one‑by
343
365
 
344
366
  ### 📊 Compliance & Executive Reports (with Redaction)
345
367
  Generate professional PDF reports (`--report report.pdf`) with:
346
- * Executive summary and risk score
347
- * Findings table (first 50 items)
348
- * Compliance mapping (CIS, PCI‑DSS, ISO 27001)
349
- * Automatic redaction of passwords, tokens, JWTs
368
+ * Executive summary and risk score
369
+ * Findings table (first 50 items)
370
+ * Compliance mapping (CIS, PCI‑DSS, ISO 27001)
371
+ * Automatic redaction of passwords, tokens, JWTs
350
372
 
351
373
  ### 📈 Scan History & Trends (with Pagination)
352
374
  SQLAlchemy‑backed database with server‑side pagination (`/api/findings?page=1&per_page=50`). Scan history is stored efficiently, enabling fast trend charts and historical comparisons.
353
375
 
354
376
  ### 🧪 SBOM & Dependency Confusion Detection
355
- * Generate a CycloneDX SBOM from your project using `syft`
356
- * Detect dependency confusion risks in `package.json` and `requirements.txt` — internal packages that could be impersonated by public registries
377
+ * Generate a CycloneDX SBOM from your project using `syft`
378
+ * Detect dependency confusion risks in `package.json` and `requirements.txt` — internal packages that could be impersonated by public registries
357
379
 
358
380
  ### 🔍 RAG‑Powered Security Search
359
381
  Ask natural language questions about your scan history: *“When was the last Log4j vulnerability found?”* The built‑in RAG endpoint (`/api/rag?q=...`) searches stored findings and returns matches.
@@ -368,10 +390,34 @@ Beyond CVSS, each finding gets a dynamic risk score based on asset exposure (fro
368
390
  A `--wizard` flag walks new users through installing dependencies, pulling AI models, and running their first scan — all in one go.
369
391
 
370
392
  ### 🔒 Privacy & Offline‑First
371
- * All assets (CSS, JS) are embedded — zero CDN calls
372
- * LLM analysis runs locally with Ollama; no data leaves your network
373
- * Optional API key authentication for the dashboard
374
- * Docker image runs as non‑root user
393
+ * All assets (CSS, JS) are embedded — zero CDN calls
394
+ * LLM analysis runs locally with Ollama; no data leaves your network
395
+ * Optional API key authentication for the dashboard (JWT supported)
396
+ * Docker image runs as non‑root user
397
+
398
+ ---
399
+
400
+ ## 🌍 Community Rules & Online Updates
401
+
402
+ Pipeline Sentinel features a community‑driven rule marketplace housed in a separate repository: `devsecops-radar-rules`.
403
+
404
+ ### How It Works
405
+ The repository contains curated JSON rule files for all supported scanners (Trivy, Semgrep, Poutine, Zizmor, Gitleaks) and generic compliance checks. Anyone can contribute by submitting a Pull Request with new or improved rules.
406
+
407
+ Users can pull the latest rules with a single command:
408
+ ```bash
409
+ devsecops-radar --update-rules
410
+ ```
411
+ Rules are stored locally in `~/.devsecops-radar/community-rules/`. To use them alongside your scanner results:
412
+ ```bash
413
+ devsecops-radar --trivy scan.json --rules ~/.devsecops-radar/community-rules/
414
+ ```
415
+ You can even point to your own fork or a private repository by setting the `COMMUNITY_RULES_REPO` environment variable. This turns Pipeline Sentinel into a living, community‑improved security platform — just like Nuclei Templates or Semgrep Registry.
416
+
417
+ ### Contributing a Rule
418
+ 1. Fork the `devsecops-radar-rules` repository.
419
+ 2. Add a new JSON file to the `rules/` directory (or modify an existing one). Follow the standard Pipeline Sentinel finding format (see the repo’s README).
420
+ 3. Open a Pull Request — our maintainers will review and merge.
375
421
 
376
422
  ---
377
423
 
@@ -421,44 +467,42 @@ devsecops_radar/
421
467
  | ✅ **Phase 3** | Human review mode (`--review`) | Done |
422
468
  | ✅ **Phase 3** | Gitleaks secret scanner | Done |
423
469
  | ✅ **Phase 3** | Security badge endpoint | Done |
470
+ | ✅ **Phase 3** | Full test suite & CI pipeline | Done |
424
471
  | 🔲 **Phase 4** | Jira / Slack integration | Planned |
425
472
  | 🔲 **Phase 4** | SARIF & CycloneDX support | Planned |
426
- | 🔲 **Phase 4** | Rule Marketplace (community YAML rules) | Planned |
427
473
  | 🔲 **Phase 4** | Pull Request assistant (GitHub App) | Planned |
428
474
 
429
- > See the [open issues](https://github.com/Mehrdoost/devsecops-radar/issues) for a full list of proposed features.
430
-
431
475
  ---
432
476
 
433
- ## 🤖 GitHub Action
434
-
435
- ```yaml
436
- - name: Pipeline Sentinel
437
- uses: Mehrdoost/devsecops-radar/action@main
438
- with:
439
- trivy_report: trivy-results.json
440
- semgrep_report: semgrep-results.json
441
- poutine_report: poutine-results.json
442
- zizmor_report: zizmor-results.json
443
- gitleaks_report: gitleaks-results.json
477
+ ## 🧪 Testing & CI
478
+
479
+ Pipeline Sentinel is thoroughly tested to ensure reliability for production use.
480
+ * **Unit & Integration Tests:** 23 tests covering scanners, rule engine, database, analyzer, API, and CLI.
481
+ * **CI Pipeline:** Every push and pull request triggers automated testing (pytest) and linting (ruff) via GitHub Actions.
482
+
483
+ You can run the tests locally:
484
+ ```bash
485
+ pip install -e .
486
+ pip install pytest pytest-flask ruff
487
+ pytest tests/ -v
488
+ ruff check .
444
489
  ```
445
- *The action merges findings, creates a job summary, and outputs CRITICAL/HIGH counts.*
446
490
 
447
491
  ---
448
492
 
449
493
  ## 🤝 Contributing
450
494
 
451
- Pull requests and issues are warmly welcome!
452
- If you would like to integrate a new scanner, open an issue with a sample of its JSON output.
453
- For permanent scanner plugins, extend the `ScannerPlugin` class and register it via entry points.
495
+ We welcome contributions of all kinds! Please read our `CONTRIBUTING.md` for detailed guidelines on how to set up the project, add new scanners, or submit rule changes. For contributing community rules, see the Community Rules section above.
454
496
 
455
497
  ---
456
498
 
457
499
  ## 👨‍💻 Author
458
500
 
459
- **Mehrdoost**
501
+ **ReverseForge** — ( Mehrdoost And Mi0r4 )
460
502
 
461
- [![GitHub](https://img.shields.io/badge/GitHub-Mehrdoost-181717?logo=github)](https://github.com/Mehrdoost)
503
+ [cite_start][![GitHub](https://img.shields.io/badge/GitHub-Mehrdoost-181717?logo=github)](https://github.com/ReverseForge)
504
+ [cite_start][![GitHub](https://img.shields.io/badge/GitHub-Mehrdoost-181717?logo=github)](https://github.com/Mehrdoost)
505
+ [cite_start][![GitHub](https://img.shields.io/badge/GitHub-Mehrdoost-181717?logo=github)](https://github.com/miora-sora)
462
506
 
463
507
 
464
508
  ---
@@ -1,13 +1,13 @@
1
- <!-- markdownlint-disable MD033 MD041 -->
2
1
  <div align="center">
3
2
 
4
3
  # 🛡️ Pipeline Sentinel
4
+
5
5
  **The Open‑Source DevSecOps Command Center — Unify, Analyse, Remediate.**
6
6
 
7
7
  [![PyPI version](https://img.shields.io/pypi/v/devsecops-radar?style=flat-square&color=blue)](https://pypi.org/project/devsecops-radar/)
8
8
  [![License](https://img.shields.io/github/license/Mehrdoost/devsecops-radar?style=flat-square)](LICENSE)
9
9
  [![GitHub release](https://img.shields.io/github/v/release/Mehrdoost/devsecops-radar?include_prereleases&style=flat-square)](https://github.com/Mehrdoost/devsecops-radar/releases)
10
- [![CI](https://img.shields.io/github/actions/workflow/status/Mehrdoost/devsecops-radar/test-action.yml?branch=main&style=flat-square)](https://github.com/Mehrdoost/devsecops-radar/actions)
10
+ [![CI](https://img.shields.io/github/actions/workflow/status/Mehrdoost/devsecops-radar/ci.yml?branch=main&style=flat-square)](https://github.com/Mehrdoost/devsecops-radar/actions)
11
11
  [![Stars](https://img.shields.io/github/stars/Mehrdoost/devsecops-radar?style=flat-square)](https://github.com/Mehrdoost/devsecops-radar/stargazers)
12
12
 
13
13
  </div>
@@ -17,21 +17,24 @@
17
17
  ---
18
18
 
19
19
  ## 📖 Table of Contents
20
+
20
21
  1. [What Is Pipeline Sentinel? (Simple Explanation)](#-what-is-pipeline-sentinel-simple-explanation)
21
22
  2. [Why You Need It](#-why-you-need-it)
22
23
  3. [Where to Run It in Your Network](#-where-to-run-it-in-your-network)
23
24
  4. [Dashboard Preview](#-dashboard-preview)
24
25
  5. [Quick Start](#-quick-start)
25
- 6. [Installation](#-installation)
26
- 7. [How to Use (Step‑by‑Step)](#-how-to-use-stepbystep)
27
- 8. [Complete Command Reference](#-complete-command-reference)
28
- 9. [Core Capabilities](#-core-capabilities)
29
- 10. [Architecture](#️-architecture)
30
- 11. [Roadmap](#️-roadmap)
31
- 12. [GitHub Action](#-github-action)
32
- 13. [Contributing](#-contributing)
33
- 14. [Author](#-author)
34
- 15. [License](#-license)
26
+ 6. [Prerequisites](#-prerequisites)
27
+ 7. [Installation](#-installation)
28
+ 8. [How to Use (Step‑by‑Step)](#-how-to-use-stepbystep)
29
+ 9. [Complete Command Reference](#-complete-command-reference)
30
+ 10. [Core Capabilities](#-core-capabilities)
31
+ 11. [Community Rules & Online Updates](#-community-rules--online-updates)
32
+ 12. [Architecture](#️-architecture)
33
+ 13. [Roadmap](#️-roadmap)
34
+ 14. [Testing & CI](#-testing--ci)
35
+ 15. [Contributing](#-contributing)
36
+ 16. [Author](#-author)
37
+ 17. [License](#-license)
35
38
 
36
39
  ---
37
40
 
@@ -50,13 +53,13 @@ Think of it as a **security camera system for your entire CI/CD pipeline** — i
50
53
  In 2026, **supply chain attacks** have become the #1 threat. Tools like Trivy themselves were compromised, and attackers now inject malicious code directly into build pipelines. **You can no longer just scan your code; you must scan your pipeline.**
51
54
 
52
55
  Pipeline Sentinel gives you:
53
- * **One screen for all scanners** – stop juggling log files.
54
- * **AI that understands attack chains** – “A leaked secret + an old library = a disaster.”
55
- * **Automatic fixes** – with a single flag, it patches files and opens a pull request.
56
- * **Human review mode** – inspect each fix before applying.
57
- * **Compliance reports** – generate a PDF for your boss or auditor.
58
- * **100% offline capable** – works in air‑gapped environments where security matters most.
59
- * **Interactive wizard** – one command to get everything running.
56
+ * **One screen for all scanners** – stop juggling log files.
57
+ * **AI that understands attack chains** – “A leaked secret + an old library = a disaster.”
58
+ * **Automatic fixes** – with a single flag, it patches files and opens a pull request.
59
+ * **Human review mode** – inspect each fix before applying.
60
+ * **Compliance reports** – generate a PDF for your boss or auditor.
61
+ * **100% offline capable** – works in air‑gapped environments where security matters most.
62
+ * **Interactive wizard** – one command to get everything running.
60
63
 
61
64
  ---
62
65
 
@@ -81,14 +84,15 @@ Pipeline Sentinel is designed to be **flexible** — you decide where it fits be
81
84
  [Gitleaks scan] ┘
82
85
  ```
83
86
 
84
- > **📌 Diagram Placeholder:**
85
- ![Network Flow Diagram](docs/architecture.png)
87
+ > **📌 Diagram Placeholder:** Add your network flow diagram here as `docs/network_flow.png`.
88
+ > `![Network Flow Diagram](docs/network_flow.png)`
86
89
 
87
90
  ---
88
91
 
89
92
  ## 📸 Dashboard Preview
90
93
 
91
94
  ![Pipeline Sentinel Dashboard](docs/Demo.gif)
95
+
92
96
  *(Severity doughnut, trend line chart, attack‑path graph (clickable nodes), topology view, executive summary — all fully offline.)*
93
97
 
94
98
  ---
@@ -115,6 +119,24 @@ devsecops-radar --wizard
115
119
 
116
120
  ---
117
121
 
122
+ ## 📋 Prerequisites
123
+
124
+ Pipeline Sentinel relies on external security tools to produce the JSON reports it consumes. You must install these tools separately according to your needs.
125
+
126
+ **Required for offline scanning:**
127
+ * Trivy (installation)
128
+ * Semgrep (installation)
129
+ * Poutine (installation)
130
+ * Zizmor (installation)
131
+ * Gitleaks (installation)
132
+
133
+ **Optional (for AI analysis):**
134
+ * Ollama (installation)
135
+
136
+ > 📖 **See `PREREQUISITES.md` for more details.**
137
+
138
+ ---
139
+
118
140
  ## 📦 Installation
119
141
 
120
142
  ### Option 1 — PyPI (Recommended)
@@ -170,19 +192,19 @@ gitleaks detect --source . --report-format json --report-path gitleaks.json
170
192
  ```bash
171
193
  devsecops-radar --trivy trivy.json --semgrep semgrep.json --poutine poutine.json --zizmor zizmor.json --gitleaks gitleaks.json
172
194
  ```
173
- This produces a single `findings.json` with all findings merged and normalised.
195
+ *This produces a single `findings.json` with all findings merged and normalised.*
174
196
 
175
197
  ### 3. View the Dashboard
176
198
  ```bash
177
199
  devsecops-radar-web
178
200
  ```
179
201
  The dashboard shows:
180
- * **Severity Breakdown** – Doughnut chart
181
- * **Trend Over Time** – Line chart from scan history
182
- * **Pipeline Security** – Poutine + Zizmor statistics card
183
- * **Attack Path Graph** – Interactive D3.js graph (click nodes for details)
184
- * **Executive Summary** – Risk score and AI‑generated summary
185
- * **Findings Table** – Searchable, filterable, paginated
202
+ * **Severity Breakdown** – Doughnut chart
203
+ * **Trend Over Time** – Line chart from scan history
204
+ * **Pipeline Security** – Poutine + Zizmor statistics card
205
+ * **Attack Path Graph** – Interactive D3.js graph (click nodes for details)
206
+ * **Executive Summary** – Risk score and AI‑generated summary
207
+ * **Findings Table** – Searchable, filterable, paginated
186
208
 
187
209
  ### 4. Enable AI Analysis (Optional)
188
210
  ```bash
@@ -191,10 +213,10 @@ devsecops-radar --trivy trivy.json --analyze
191
213
  devsecops-radar-web
192
214
  ```
193
215
  The LLM generates `findings_ai_summary.json` containing:
194
- * `executive_summary`, `risk_score`
195
- * `attack_paths` with MITRE ATT&CK tactics
196
- * `top_remediations` (some with `fix_diff`)
197
- * `false_positives_likely`
216
+ * `executive_summary`, `risk_score`
217
+ * `attack_paths` with MITRE ATT&CK tactics
218
+ * `top_remediations` (some with `fix_diff`)
219
+ * `false_positives_likely`
198
220
 
199
221
  ### 5. Auto‑Remediation (with Human Review)
200
222
  ```bash
@@ -204,7 +226,7 @@ devsecops-radar --trivy trivy.json --analyze --fix
204
226
  # Review each fix before applying
205
227
  devsecops-radar --trivy trivy.json --analyze --fix --review
206
228
  ```
207
- The tool creates a new git branch `auto-fix` and pushes it for review.
229
+ *The tool creates a new git branch `auto-fix` and pushes it for review.*
208
230
 
209
231
  ### 6. Policy Enforcement
210
232
  Create a `policy.json` file:
@@ -218,7 +240,7 @@ Create a `policy.json` file:
218
240
  ```bash
219
241
  devsecops-radar --trivy trivy.json --policy policy.json
220
242
  ```
221
- If critical findings exceed 5, the command exits with code 1 — perfect for CI/CD gates.
243
+ *If critical findings exceed 5, the command exits with code 1 — perfect for CI/CD gates.*
222
244
 
223
245
  ### 7. Generate Compliance Reports
224
246
  ```bash
@@ -283,18 +305,18 @@ Built‑in support for five scanners with a real plugin system. Third‑party sc
283
305
  | **Gitleaks**| Secrets detection | `--gitleaks` |
284
306
 
285
307
  ### 🧩 Hybrid RuleFusion Engine
286
- * **Offline** – Load custom JSON rules from any local directory (`--rules ~/my-rules/`)
287
- * **Online** – Pull community‑curated rules from a configurable Git repository (`--update-rules`)
288
- * Auto‑detects Trivy, Semgrep, Poutine, Zizmor, and plain‑list formats
289
- * Policy evaluation built directly into the engine
290
- * Community rules repo: `devsecops-radar-rules` (configurable via `COMMUNITY_RULES_REPO`)
308
+ * **Offline** – Load custom JSON rules from any local directory (`--rules ~/my-rules/`)
309
+ * **Online** – Pull community‑curated rules from a configurable Git repository (`--update-rules`)
310
+ * Auto‑detects Trivy, Semgrep, Poutine, Zizmor, and plain‑list formats
311
+ * Policy evaluation built directly into the engine
312
+ * Community rules repo: `devsecops-radar-rules` (configurable via `COMMUNITY_RULES_REPO`)
291
313
 
292
314
  ### 🧠 LLM‑Powered Analysis
293
- * Retry logic with exponential backoff for unstable endpoints
294
- * Few‑shot examples covering real‑world supply chain attack chains
295
- * Token‑aware selection (max items configurable via `ANALYZER_MAX_FINDINGS`)
296
- * Structured JSON output: `executive_summary`, `risk_score`, `attack_paths` (MITRE ATT&CK), `top_remediations`, `false_positives_likely`
297
- * Ollama (local, offline) and LiteLLM (OpenAI, Anthropic, etc.) support
315
+ * Retry logic with exponential backoff for unstable endpoints
316
+ * Few‑shot examples covering real‑world supply chain attack chains
317
+ * Token‑aware selection (max items configurable via `ANALYZER_MAX_FINDINGS`)
318
+ * Structured JSON output: `executive_summary`, `risk_score`, `attack_paths` (MITRE ATT&CK), `top_remediations`, `false_positives_likely`
319
+ * Ollama (local, offline) and LiteLLM (OpenAI, Anthropic, etc.) support
298
320
 
299
321
  ### 🕸️ Multi‑Step Attack Path Visualization
300
322
  Interactive D3.js force graph that chains findings into realistic attack scenarios. Click any node to see detailed finding information. Accepts a topology file to map findings onto your actual infrastructure, showing lateral movement across servers and subnets.
@@ -314,17 +336,17 @@ AI‑suggested fixes can be applied automatically (`--fix`) or reviewed one‑by
314
336
 
315
337
  ### 📊 Compliance & Executive Reports (with Redaction)
316
338
  Generate professional PDF reports (`--report report.pdf`) with:
317
- * Executive summary and risk score
318
- * Findings table (first 50 items)
319
- * Compliance mapping (CIS, PCI‑DSS, ISO 27001)
320
- * Automatic redaction of passwords, tokens, JWTs
339
+ * Executive summary and risk score
340
+ * Findings table (first 50 items)
341
+ * Compliance mapping (CIS, PCI‑DSS, ISO 27001)
342
+ * Automatic redaction of passwords, tokens, JWTs
321
343
 
322
344
  ### 📈 Scan History & Trends (with Pagination)
323
345
  SQLAlchemy‑backed database with server‑side pagination (`/api/findings?page=1&per_page=50`). Scan history is stored efficiently, enabling fast trend charts and historical comparisons.
324
346
 
325
347
  ### 🧪 SBOM & Dependency Confusion Detection
326
- * Generate a CycloneDX SBOM from your project using `syft`
327
- * Detect dependency confusion risks in `package.json` and `requirements.txt` — internal packages that could be impersonated by public registries
348
+ * Generate a CycloneDX SBOM from your project using `syft`
349
+ * Detect dependency confusion risks in `package.json` and `requirements.txt` — internal packages that could be impersonated by public registries
328
350
 
329
351
  ### 🔍 RAG‑Powered Security Search
330
352
  Ask natural language questions about your scan history: *“When was the last Log4j vulnerability found?”* The built‑in RAG endpoint (`/api/rag?q=...`) searches stored findings and returns matches.
@@ -339,10 +361,34 @@ Beyond CVSS, each finding gets a dynamic risk score based on asset exposure (fro
339
361
  A `--wizard` flag walks new users through installing dependencies, pulling AI models, and running their first scan — all in one go.
340
362
 
341
363
  ### 🔒 Privacy & Offline‑First
342
- * All assets (CSS, JS) are embedded — zero CDN calls
343
- * LLM analysis runs locally with Ollama; no data leaves your network
344
- * Optional API key authentication for the dashboard
345
- * Docker image runs as non‑root user
364
+ * All assets (CSS, JS) are embedded — zero CDN calls
365
+ * LLM analysis runs locally with Ollama; no data leaves your network
366
+ * Optional API key authentication for the dashboard (JWT supported)
367
+ * Docker image runs as non‑root user
368
+
369
+ ---
370
+
371
+ ## 🌍 Community Rules & Online Updates
372
+
373
+ Pipeline Sentinel features a community‑driven rule marketplace housed in a separate repository: `devsecops-radar-rules`.
374
+
375
+ ### How It Works
376
+ The repository contains curated JSON rule files for all supported scanners (Trivy, Semgrep, Poutine, Zizmor, Gitleaks) and generic compliance checks. Anyone can contribute by submitting a Pull Request with new or improved rules.
377
+
378
+ Users can pull the latest rules with a single command:
379
+ ```bash
380
+ devsecops-radar --update-rules
381
+ ```
382
+ Rules are stored locally in `~/.devsecops-radar/community-rules/`. To use them alongside your scanner results:
383
+ ```bash
384
+ devsecops-radar --trivy scan.json --rules ~/.devsecops-radar/community-rules/
385
+ ```
386
+ You can even point to your own fork or a private repository by setting the `COMMUNITY_RULES_REPO` environment variable. This turns Pipeline Sentinel into a living, community‑improved security platform — just like Nuclei Templates or Semgrep Registry.
387
+
388
+ ### Contributing a Rule
389
+ 1. Fork the `devsecops-radar-rules` repository.
390
+ 2. Add a new JSON file to the `rules/` directory (or modify an existing one). Follow the standard Pipeline Sentinel finding format (see the repo’s README).
391
+ 3. Open a Pull Request — our maintainers will review and merge.
346
392
 
347
393
  ---
348
394
 
@@ -392,44 +438,42 @@ devsecops_radar/
392
438
  | ✅ **Phase 3** | Human review mode (`--review`) | Done |
393
439
  | ✅ **Phase 3** | Gitleaks secret scanner | Done |
394
440
  | ✅ **Phase 3** | Security badge endpoint | Done |
441
+ | ✅ **Phase 3** | Full test suite & CI pipeline | Done |
395
442
  | 🔲 **Phase 4** | Jira / Slack integration | Planned |
396
443
  | 🔲 **Phase 4** | SARIF & CycloneDX support | Planned |
397
- | 🔲 **Phase 4** | Rule Marketplace (community YAML rules) | Planned |
398
444
  | 🔲 **Phase 4** | Pull Request assistant (GitHub App) | Planned |
399
445
 
400
- > See the [open issues](https://github.com/Mehrdoost/devsecops-radar/issues) for a full list of proposed features.
401
-
402
446
  ---
403
447
 
404
- ## 🤖 GitHub Action
405
-
406
- ```yaml
407
- - name: Pipeline Sentinel
408
- uses: Mehrdoost/devsecops-radar/action@main
409
- with:
410
- trivy_report: trivy-results.json
411
- semgrep_report: semgrep-results.json
412
- poutine_report: poutine-results.json
413
- zizmor_report: zizmor-results.json
414
- gitleaks_report: gitleaks-results.json
448
+ ## 🧪 Testing & CI
449
+
450
+ Pipeline Sentinel is thoroughly tested to ensure reliability for production use.
451
+ * **Unit & Integration Tests:** 23 tests covering scanners, rule engine, database, analyzer, API, and CLI.
452
+ * **CI Pipeline:** Every push and pull request triggers automated testing (pytest) and linting (ruff) via GitHub Actions.
453
+
454
+ You can run the tests locally:
455
+ ```bash
456
+ pip install -e .
457
+ pip install pytest pytest-flask ruff
458
+ pytest tests/ -v
459
+ ruff check .
415
460
  ```
416
- *The action merges findings, creates a job summary, and outputs CRITICAL/HIGH counts.*
417
461
 
418
462
  ---
419
463
 
420
464
  ## 🤝 Contributing
421
465
 
422
- Pull requests and issues are warmly welcome!
423
- If you would like to integrate a new scanner, open an issue with a sample of its JSON output.
424
- For permanent scanner plugins, extend the `ScannerPlugin` class and register it via entry points.
466
+ We welcome contributions of all kinds! Please read our `CONTRIBUTING.md` for detailed guidelines on how to set up the project, add new scanners, or submit rule changes. For contributing community rules, see the Community Rules section above.
425
467
 
426
468
  ---
427
469
 
428
470
  ## 👨‍💻 Author
429
471
 
430
- **Mehrdoost**
472
+ **ReverseForge** — ( Mehrdoost And Mi0r4 )
431
473
 
432
- [![GitHub](https://img.shields.io/badge/GitHub-Mehrdoost-181717?logo=github)](https://github.com/Mehrdoost)
474
+ [cite_start][![GitHub](https://img.shields.io/badge/GitHub-Mehrdoost-181717?logo=github)](https://github.com/ReverseForge)
475
+ [cite_start][![GitHub](https://img.shields.io/badge/GitHub-Mehrdoost-181717?logo=github)](https://github.com/Mehrdoost)
476
+ [cite_start][![GitHub](https://img.shields.io/badge/GitHub-Mehrdoost-181717?logo=github)](https://github.com/miora-sora)
433
477
 
434
478
 
435
479
  ---
@@ -440,4 +484,4 @@ MIT — see [LICENSE](LICENSE).
440
484
 
441
485
  <div align="center">
442
486
  ⭐ If this project helps your team ship safer software, drop a star — it makes a real difference.
443
- </div>
487
+ </div>
@@ -39,7 +39,7 @@ DASHBOARD_HTML = r"""
39
39
  <nav class="navbar navbar-dark border-bottom border-secondary mb-4" style="background:#1e293b;">
40
40
  <div class="container-fluid">
41
41
  <span class="navbar-brand mb-0 h1">🛡️ Pipeline Sentinel</span>
42
- <span class="text-muted">v0.3.3</span>
42
+ <span class="text-muted">v0.3.8</span>
43
43
  </div>
44
44
  </nav>
45
45
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: devsecops-radar
3
- Version: 0.3.7
3
+ Version: 0.3.9
4
4
  Summary: Unified CI/CD Security Dashboard — Pipeline Sentinel
5
5
  Author-email: Mehrdoost <70381337+Mehrdoost@users.noreply.github.com>
6
6
  License-Expression: MIT
@@ -27,16 +27,16 @@ Requires-Dist: pytest>=8.0
27
27
  Requires-Dist: pytest-flask>=1.3
28
28
  Dynamic: license-file
29
29
 
30
- <!-- markdownlint-disable MD033 MD041 -->
31
30
  <div align="center">
32
31
 
33
32
  # 🛡️ Pipeline Sentinel
33
+
34
34
  **The Open‑Source DevSecOps Command Center — Unify, Analyse, Remediate.**
35
35
 
36
36
  [![PyPI version](https://img.shields.io/pypi/v/devsecops-radar?style=flat-square&color=blue)](https://pypi.org/project/devsecops-radar/)
37
37
  [![License](https://img.shields.io/github/license/Mehrdoost/devsecops-radar?style=flat-square)](LICENSE)
38
38
  [![GitHub release](https://img.shields.io/github/v/release/Mehrdoost/devsecops-radar?include_prereleases&style=flat-square)](https://github.com/Mehrdoost/devsecops-radar/releases)
39
- [![CI](https://img.shields.io/github/actions/workflow/status/Mehrdoost/devsecops-radar/test-action.yml?branch=main&style=flat-square)](https://github.com/Mehrdoost/devsecops-radar/actions)
39
+ [![CI](https://img.shields.io/github/actions/workflow/status/Mehrdoost/devsecops-radar/ci.yml?branch=main&style=flat-square)](https://github.com/Mehrdoost/devsecops-radar/actions)
40
40
  [![Stars](https://img.shields.io/github/stars/Mehrdoost/devsecops-radar?style=flat-square)](https://github.com/Mehrdoost/devsecops-radar/stargazers)
41
41
 
42
42
  </div>
@@ -46,21 +46,24 @@ Dynamic: license-file
46
46
  ---
47
47
 
48
48
  ## 📖 Table of Contents
49
+
49
50
  1. [What Is Pipeline Sentinel? (Simple Explanation)](#-what-is-pipeline-sentinel-simple-explanation)
50
51
  2. [Why You Need It](#-why-you-need-it)
51
52
  3. [Where to Run It in Your Network](#-where-to-run-it-in-your-network)
52
53
  4. [Dashboard Preview](#-dashboard-preview)
53
54
  5. [Quick Start](#-quick-start)
54
- 6. [Installation](#-installation)
55
- 7. [How to Use (Step‑by‑Step)](#-how-to-use-stepbystep)
56
- 8. [Complete Command Reference](#-complete-command-reference)
57
- 9. [Core Capabilities](#-core-capabilities)
58
- 10. [Architecture](#️-architecture)
59
- 11. [Roadmap](#️-roadmap)
60
- 12. [GitHub Action](#-github-action)
61
- 13. [Contributing](#-contributing)
62
- 14. [Author](#-author)
63
- 15. [License](#-license)
55
+ 6. [Prerequisites](#-prerequisites)
56
+ 7. [Installation](#-installation)
57
+ 8. [How to Use (Step‑by‑Step)](#-how-to-use-stepbystep)
58
+ 9. [Complete Command Reference](#-complete-command-reference)
59
+ 10. [Core Capabilities](#-core-capabilities)
60
+ 11. [Community Rules & Online Updates](#-community-rules--online-updates)
61
+ 12. [Architecture](#️-architecture)
62
+ 13. [Roadmap](#️-roadmap)
63
+ 14. [Testing & CI](#-testing--ci)
64
+ 15. [Contributing](#-contributing)
65
+ 16. [Author](#-author)
66
+ 17. [License](#-license)
64
67
 
65
68
  ---
66
69
 
@@ -79,13 +82,13 @@ Think of it as a **security camera system for your entire CI/CD pipeline** — i
79
82
  In 2026, **supply chain attacks** have become the #1 threat. Tools like Trivy themselves were compromised, and attackers now inject malicious code directly into build pipelines. **You can no longer just scan your code; you must scan your pipeline.**
80
83
 
81
84
  Pipeline Sentinel gives you:
82
- * **One screen for all scanners** – stop juggling log files.
83
- * **AI that understands attack chains** – “A leaked secret + an old library = a disaster.”
84
- * **Automatic fixes** – with a single flag, it patches files and opens a pull request.
85
- * **Human review mode** – inspect each fix before applying.
86
- * **Compliance reports** – generate a PDF for your boss or auditor.
87
- * **100% offline capable** – works in air‑gapped environments where security matters most.
88
- * **Interactive wizard** – one command to get everything running.
85
+ * **One screen for all scanners** – stop juggling log files.
86
+ * **AI that understands attack chains** – “A leaked secret + an old library = a disaster.”
87
+ * **Automatic fixes** – with a single flag, it patches files and opens a pull request.
88
+ * **Human review mode** – inspect each fix before applying.
89
+ * **Compliance reports** – generate a PDF for your boss or auditor.
90
+ * **100% offline capable** – works in air‑gapped environments where security matters most.
91
+ * **Interactive wizard** – one command to get everything running.
89
92
 
90
93
  ---
91
94
 
@@ -110,14 +113,15 @@ Pipeline Sentinel is designed to be **flexible** — you decide where it fits be
110
113
  [Gitleaks scan] ┘
111
114
  ```
112
115
 
113
- > **📌 Diagram Placeholder:**
114
- ![Network Flow Diagram](docs/architecture.png)
116
+ > **📌 Diagram Placeholder:** Add your network flow diagram here as `docs/network_flow.png`.
117
+ > `![Network Flow Diagram](docs/network_flow.png)`
115
118
 
116
119
  ---
117
120
 
118
121
  ## 📸 Dashboard Preview
119
122
 
120
123
  ![Pipeline Sentinel Dashboard](docs/Demo.gif)
124
+
121
125
  *(Severity doughnut, trend line chart, attack‑path graph (clickable nodes), topology view, executive summary — all fully offline.)*
122
126
 
123
127
  ---
@@ -144,6 +148,24 @@ devsecops-radar --wizard
144
148
 
145
149
  ---
146
150
 
151
+ ## 📋 Prerequisites
152
+
153
+ Pipeline Sentinel relies on external security tools to produce the JSON reports it consumes. You must install these tools separately according to your needs.
154
+
155
+ **Required for offline scanning:**
156
+ * Trivy (installation)
157
+ * Semgrep (installation)
158
+ * Poutine (installation)
159
+ * Zizmor (installation)
160
+ * Gitleaks (installation)
161
+
162
+ **Optional (for AI analysis):**
163
+ * Ollama (installation)
164
+
165
+ > 📖 **See `PREREQUISITES.md` for more details.**
166
+
167
+ ---
168
+
147
169
  ## 📦 Installation
148
170
 
149
171
  ### Option 1 — PyPI (Recommended)
@@ -199,19 +221,19 @@ gitleaks detect --source . --report-format json --report-path gitleaks.json
199
221
  ```bash
200
222
  devsecops-radar --trivy trivy.json --semgrep semgrep.json --poutine poutine.json --zizmor zizmor.json --gitleaks gitleaks.json
201
223
  ```
202
- This produces a single `findings.json` with all findings merged and normalised.
224
+ *This produces a single `findings.json` with all findings merged and normalised.*
203
225
 
204
226
  ### 3. View the Dashboard
205
227
  ```bash
206
228
  devsecops-radar-web
207
229
  ```
208
230
  The dashboard shows:
209
- * **Severity Breakdown** – Doughnut chart
210
- * **Trend Over Time** – Line chart from scan history
211
- * **Pipeline Security** – Poutine + Zizmor statistics card
212
- * **Attack Path Graph** – Interactive D3.js graph (click nodes for details)
213
- * **Executive Summary** – Risk score and AI‑generated summary
214
- * **Findings Table** – Searchable, filterable, paginated
231
+ * **Severity Breakdown** – Doughnut chart
232
+ * **Trend Over Time** – Line chart from scan history
233
+ * **Pipeline Security** – Poutine + Zizmor statistics card
234
+ * **Attack Path Graph** – Interactive D3.js graph (click nodes for details)
235
+ * **Executive Summary** – Risk score and AI‑generated summary
236
+ * **Findings Table** – Searchable, filterable, paginated
215
237
 
216
238
  ### 4. Enable AI Analysis (Optional)
217
239
  ```bash
@@ -220,10 +242,10 @@ devsecops-radar --trivy trivy.json --analyze
220
242
  devsecops-radar-web
221
243
  ```
222
244
  The LLM generates `findings_ai_summary.json` containing:
223
- * `executive_summary`, `risk_score`
224
- * `attack_paths` with MITRE ATT&CK tactics
225
- * `top_remediations` (some with `fix_diff`)
226
- * `false_positives_likely`
245
+ * `executive_summary`, `risk_score`
246
+ * `attack_paths` with MITRE ATT&CK tactics
247
+ * `top_remediations` (some with `fix_diff`)
248
+ * `false_positives_likely`
227
249
 
228
250
  ### 5. Auto‑Remediation (with Human Review)
229
251
  ```bash
@@ -233,7 +255,7 @@ devsecops-radar --trivy trivy.json --analyze --fix
233
255
  # Review each fix before applying
234
256
  devsecops-radar --trivy trivy.json --analyze --fix --review
235
257
  ```
236
- The tool creates a new git branch `auto-fix` and pushes it for review.
258
+ *The tool creates a new git branch `auto-fix` and pushes it for review.*
237
259
 
238
260
  ### 6. Policy Enforcement
239
261
  Create a `policy.json` file:
@@ -247,7 +269,7 @@ Create a `policy.json` file:
247
269
  ```bash
248
270
  devsecops-radar --trivy trivy.json --policy policy.json
249
271
  ```
250
- If critical findings exceed 5, the command exits with code 1 — perfect for CI/CD gates.
272
+ *If critical findings exceed 5, the command exits with code 1 — perfect for CI/CD gates.*
251
273
 
252
274
  ### 7. Generate Compliance Reports
253
275
  ```bash
@@ -312,18 +334,18 @@ Built‑in support for five scanners with a real plugin system. Third‑party sc
312
334
  | **Gitleaks**| Secrets detection | `--gitleaks` |
313
335
 
314
336
  ### 🧩 Hybrid RuleFusion Engine
315
- * **Offline** – Load custom JSON rules from any local directory (`--rules ~/my-rules/`)
316
- * **Online** – Pull community‑curated rules from a configurable Git repository (`--update-rules`)
317
- * Auto‑detects Trivy, Semgrep, Poutine, Zizmor, and plain‑list formats
318
- * Policy evaluation built directly into the engine
319
- * Community rules repo: `devsecops-radar-rules` (configurable via `COMMUNITY_RULES_REPO`)
337
+ * **Offline** – Load custom JSON rules from any local directory (`--rules ~/my-rules/`)
338
+ * **Online** – Pull community‑curated rules from a configurable Git repository (`--update-rules`)
339
+ * Auto‑detects Trivy, Semgrep, Poutine, Zizmor, and plain‑list formats
340
+ * Policy evaluation built directly into the engine
341
+ * Community rules repo: `devsecops-radar-rules` (configurable via `COMMUNITY_RULES_REPO`)
320
342
 
321
343
  ### 🧠 LLM‑Powered Analysis
322
- * Retry logic with exponential backoff for unstable endpoints
323
- * Few‑shot examples covering real‑world supply chain attack chains
324
- * Token‑aware selection (max items configurable via `ANALYZER_MAX_FINDINGS`)
325
- * Structured JSON output: `executive_summary`, `risk_score`, `attack_paths` (MITRE ATT&CK), `top_remediations`, `false_positives_likely`
326
- * Ollama (local, offline) and LiteLLM (OpenAI, Anthropic, etc.) support
344
+ * Retry logic with exponential backoff for unstable endpoints
345
+ * Few‑shot examples covering real‑world supply chain attack chains
346
+ * Token‑aware selection (max items configurable via `ANALYZER_MAX_FINDINGS`)
347
+ * Structured JSON output: `executive_summary`, `risk_score`, `attack_paths` (MITRE ATT&CK), `top_remediations`, `false_positives_likely`
348
+ * Ollama (local, offline) and LiteLLM (OpenAI, Anthropic, etc.) support
327
349
 
328
350
  ### 🕸️ Multi‑Step Attack Path Visualization
329
351
  Interactive D3.js force graph that chains findings into realistic attack scenarios. Click any node to see detailed finding information. Accepts a topology file to map findings onto your actual infrastructure, showing lateral movement across servers and subnets.
@@ -343,17 +365,17 @@ AI‑suggested fixes can be applied automatically (`--fix`) or reviewed one‑by
343
365
 
344
366
  ### 📊 Compliance & Executive Reports (with Redaction)
345
367
  Generate professional PDF reports (`--report report.pdf`) with:
346
- * Executive summary and risk score
347
- * Findings table (first 50 items)
348
- * Compliance mapping (CIS, PCI‑DSS, ISO 27001)
349
- * Automatic redaction of passwords, tokens, JWTs
368
+ * Executive summary and risk score
369
+ * Findings table (first 50 items)
370
+ * Compliance mapping (CIS, PCI‑DSS, ISO 27001)
371
+ * Automatic redaction of passwords, tokens, JWTs
350
372
 
351
373
  ### 📈 Scan History & Trends (with Pagination)
352
374
  SQLAlchemy‑backed database with server‑side pagination (`/api/findings?page=1&per_page=50`). Scan history is stored efficiently, enabling fast trend charts and historical comparisons.
353
375
 
354
376
  ### 🧪 SBOM & Dependency Confusion Detection
355
- * Generate a CycloneDX SBOM from your project using `syft`
356
- * Detect dependency confusion risks in `package.json` and `requirements.txt` — internal packages that could be impersonated by public registries
377
+ * Generate a CycloneDX SBOM from your project using `syft`
378
+ * Detect dependency confusion risks in `package.json` and `requirements.txt` — internal packages that could be impersonated by public registries
357
379
 
358
380
  ### 🔍 RAG‑Powered Security Search
359
381
  Ask natural language questions about your scan history: *“When was the last Log4j vulnerability found?”* The built‑in RAG endpoint (`/api/rag?q=...`) searches stored findings and returns matches.
@@ -368,10 +390,34 @@ Beyond CVSS, each finding gets a dynamic risk score based on asset exposure (fro
368
390
  A `--wizard` flag walks new users through installing dependencies, pulling AI models, and running their first scan — all in one go.
369
391
 
370
392
  ### 🔒 Privacy & Offline‑First
371
- * All assets (CSS, JS) are embedded — zero CDN calls
372
- * LLM analysis runs locally with Ollama; no data leaves your network
373
- * Optional API key authentication for the dashboard
374
- * Docker image runs as non‑root user
393
+ * All assets (CSS, JS) are embedded — zero CDN calls
394
+ * LLM analysis runs locally with Ollama; no data leaves your network
395
+ * Optional API key authentication for the dashboard (JWT supported)
396
+ * Docker image runs as non‑root user
397
+
398
+ ---
399
+
400
+ ## 🌍 Community Rules & Online Updates
401
+
402
+ Pipeline Sentinel features a community‑driven rule marketplace housed in a separate repository: `devsecops-radar-rules`.
403
+
404
+ ### How It Works
405
+ The repository contains curated JSON rule files for all supported scanners (Trivy, Semgrep, Poutine, Zizmor, Gitleaks) and generic compliance checks. Anyone can contribute by submitting a Pull Request with new or improved rules.
406
+
407
+ Users can pull the latest rules with a single command:
408
+ ```bash
409
+ devsecops-radar --update-rules
410
+ ```
411
+ Rules are stored locally in `~/.devsecops-radar/community-rules/`. To use them alongside your scanner results:
412
+ ```bash
413
+ devsecops-radar --trivy scan.json --rules ~/.devsecops-radar/community-rules/
414
+ ```
415
+ You can even point to your own fork or a private repository by setting the `COMMUNITY_RULES_REPO` environment variable. This turns Pipeline Sentinel into a living, community‑improved security platform — just like Nuclei Templates or Semgrep Registry.
416
+
417
+ ### Contributing a Rule
418
+ 1. Fork the `devsecops-radar-rules` repository.
419
+ 2. Add a new JSON file to the `rules/` directory (or modify an existing one). Follow the standard Pipeline Sentinel finding format (see the repo’s README).
420
+ 3. Open a Pull Request — our maintainers will review and merge.
375
421
 
376
422
  ---
377
423
 
@@ -421,44 +467,42 @@ devsecops_radar/
421
467
  | ✅ **Phase 3** | Human review mode (`--review`) | Done |
422
468
  | ✅ **Phase 3** | Gitleaks secret scanner | Done |
423
469
  | ✅ **Phase 3** | Security badge endpoint | Done |
470
+ | ✅ **Phase 3** | Full test suite & CI pipeline | Done |
424
471
  | 🔲 **Phase 4** | Jira / Slack integration | Planned |
425
472
  | 🔲 **Phase 4** | SARIF & CycloneDX support | Planned |
426
- | 🔲 **Phase 4** | Rule Marketplace (community YAML rules) | Planned |
427
473
  | 🔲 **Phase 4** | Pull Request assistant (GitHub App) | Planned |
428
474
 
429
- > See the [open issues](https://github.com/Mehrdoost/devsecops-radar/issues) for a full list of proposed features.
430
-
431
475
  ---
432
476
 
433
- ## 🤖 GitHub Action
434
-
435
- ```yaml
436
- - name: Pipeline Sentinel
437
- uses: Mehrdoost/devsecops-radar/action@main
438
- with:
439
- trivy_report: trivy-results.json
440
- semgrep_report: semgrep-results.json
441
- poutine_report: poutine-results.json
442
- zizmor_report: zizmor-results.json
443
- gitleaks_report: gitleaks-results.json
477
+ ## 🧪 Testing & CI
478
+
479
+ Pipeline Sentinel is thoroughly tested to ensure reliability for production use.
480
+ * **Unit & Integration Tests:** 23 tests covering scanners, rule engine, database, analyzer, API, and CLI.
481
+ * **CI Pipeline:** Every push and pull request triggers automated testing (pytest) and linting (ruff) via GitHub Actions.
482
+
483
+ You can run the tests locally:
484
+ ```bash
485
+ pip install -e .
486
+ pip install pytest pytest-flask ruff
487
+ pytest tests/ -v
488
+ ruff check .
444
489
  ```
445
- *The action merges findings, creates a job summary, and outputs CRITICAL/HIGH counts.*
446
490
 
447
491
  ---
448
492
 
449
493
  ## 🤝 Contributing
450
494
 
451
- Pull requests and issues are warmly welcome!
452
- If you would like to integrate a new scanner, open an issue with a sample of its JSON output.
453
- For permanent scanner plugins, extend the `ScannerPlugin` class and register it via entry points.
495
+ We welcome contributions of all kinds! Please read our `CONTRIBUTING.md` for detailed guidelines on how to set up the project, add new scanners, or submit rule changes. For contributing community rules, see the Community Rules section above.
454
496
 
455
497
  ---
456
498
 
457
499
  ## 👨‍💻 Author
458
500
 
459
- **Mehrdoost**
501
+ **ReverseForge** — ( Mehrdoost And Mi0r4 )
460
502
 
461
- [![GitHub](https://img.shields.io/badge/GitHub-Mehrdoost-181717?logo=github)](https://github.com/Mehrdoost)
503
+ [cite_start][![GitHub](https://img.shields.io/badge/GitHub-Mehrdoost-181717?logo=github)](https://github.com/ReverseForge)
504
+ [cite_start][![GitHub](https://img.shields.io/badge/GitHub-Mehrdoost-181717?logo=github)](https://github.com/Mehrdoost)
505
+ [cite_start][![GitHub](https://img.shields.io/badge/GitHub-Mehrdoost-181717?logo=github)](https://github.com/miora-sora)
462
506
 
463
507
 
464
508
  ---
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "devsecops-radar"
7
- version = "0.3.7"
7
+ version = "0.3.9"
8
8
  description = "Unified CI/CD Security Dashboard — Pipeline Sentinel"
9
9
  readme = "README.md"
10
10
  license = "MIT"
File without changes