feat: per-repo issue tracker, Gitea support, PR review pipeline #10

Merged
sharang merged 7 commits from feat/per-repo-tracker-config into main 2026-03-11 12:14:00 +00:00
Owner

Summary

  • Per-repository issue tracker configuration: configure tracker type (GitHub/GitLab/Gitea/Jira), owner, repo, and token per repository at creation or later via edit modal
  • Gitea tracker implementation: full IssueTracker trait impl using Gitea API v1 (issues, PR reviews, dedup search)
  • Stage 6 issue creation: scan pipeline now auto-creates issues in the configured tracker for new findings with severity >= Medium, with fingerprint-based deduplication
  • PR review pipeline: on PR open/sync webhook, runs incremental semgrep + LLM code review on changed files and posts review comments via tracker
  • Webhook infrastructure: per-repo auto-generated secrets, per-repo webhook URLs, dashboard proxies webhooks to agent (agent not exposed publicly)
  • Dashboard UI: edit modal with tracker config fields, webhook URL + secret display, Gitea option in tracker type dropdown
  • Misc: demote "Parsing file" log from info to debug

Test plan

  • Add a repo with Gitea tracker config (type, owner, repo, token)
  • Trigger scan and verify issues are created in Gitea for medium+ findings
  • Re-scan and verify duplicate issues are not created
  • Set up Gitea webhook using URL + secret from edit modal
  • Open a PR and verify review comments are posted
  • Verify push webhook triggers a scan
## Summary - **Per-repository issue tracker configuration**: configure tracker type (GitHub/GitLab/Gitea/Jira), owner, repo, and token per repository at creation or later via edit modal - **Gitea tracker implementation**: full IssueTracker trait impl using Gitea API v1 (issues, PR reviews, dedup search) - **Stage 6 issue creation**: scan pipeline now auto-creates issues in the configured tracker for new findings with severity >= Medium, with fingerprint-based deduplication - **PR review pipeline**: on PR open/sync webhook, runs incremental semgrep + LLM code review on changed files and posts review comments via tracker - **Webhook infrastructure**: per-repo auto-generated secrets, per-repo webhook URLs, dashboard proxies webhooks to agent (agent not exposed publicly) - **Dashboard UI**: edit modal with tracker config fields, webhook URL + secret display, Gitea option in tracker type dropdown - **Misc**: demote "Parsing file" log from info to debug ## Test plan - [x] Add a repo with Gitea tracker config (type, owner, repo, token) - [x] Trigger scan and verify issues are created in Gitea for medium+ findings - [x] Re-scan and verify duplicate issues are not created - [x] Set up Gitea webhook using URL + secret from edit modal - [x] Open a PR and verify review comments are posted - [x] Verify push webhook triggers a scan
sharang added 5 commits 2026-03-11 10:29:57 +00:00
feat: add per-repository issue tracker config with Gitea support
Some checks failed
CI / Clippy (push) Failing after 3m12s
CI / Security Audit (push) Has been skipped
CI / Tests (push) Has been skipped
CI / Detect Changes (push) Has been skipped
CI / Deploy Agent (push) Has been skipped
CI / Deploy Dashboard (push) Has been skipped
CI / Deploy Docs (push) Has been skipped
CI / Deploy MCP (push) Has been skipped
CI / Format (push) Successful in 5s
a4415dd94c
Add ability to configure issue tracker (GitHub, GitLab, Gitea, Jira) per
repository at creation time and edit later via PATCH endpoint. Includes
new Gitea tracker implementation, edit modal in dashboard, and
tracker_token field on the repository model.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
feat: implement Stage 6 issue creation in scan pipeline
Some checks failed
CI / Format (push) Successful in 4s
CI / Clippy (push) Failing after 1m52s
CI / Security Audit (push) Has been skipped
CI / Tests (push) Has been skipped
CI / Detect Changes (push) Has been skipped
CI / Deploy Agent (push) Has been skipped
CI / Deploy Dashboard (push) Has been skipped
CI / Deploy Docs (push) Has been skipped
CI / Deploy MCP (push) Has been skipped
570e3c5c9e
After scan findings are persisted, Stage 6 now creates issues in the
configured tracker (GitHub/GitLab/Gitea/Jira) for new findings with
severity >= Medium. Includes fingerprint-based dedup, per-repo token
fallback to global config, and formatted markdown issue bodies.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
fix: Gitea labels as body text, demote parse log to debug
Some checks failed
CI / Format (push) Successful in 4s
CI / Clippy (push) Failing after 1m46s
CI / Security Audit (push) Has been skipped
CI / Tests (push) Has been skipped
CI / Detect Changes (push) Has been skipped
CI / Deploy Agent (push) Has been skipped
CI / Deploy Dashboard (push) Has been skipped
CI / Deploy Docs (push) Has been skipped
CI / Deploy MCP (push) Has been skipped
9e5342bfd6
Gitea API expects label IDs (integers), not names. Append label names
to the issue body instead. Also lower "Parsing file" log from info to
debug to reduce noise.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
feat: implement PR review pipeline with Gitea/GitHub/GitLab webhooks
Some checks failed
CI / Format (push) Successful in 3s
CI / Clippy (push) Failing after 1m50s
CI / Security Audit (push) Has been skipped
CI / Tests (push) Has been skipped
CI / Detect Changes (push) Has been skipped
CI / Deploy Agent (push) Has been skipped
CI / Deploy Dashboard (push) Has been skipped
CI / Deploy Docs (push) Has been skipped
CI / Deploy MCP (push) Has been skipped
7a0a53d399
On PR open/sync, webhook triggers incremental scan: runs semgrep on
changed files + LLM code review on the diff, then posts review comments
via the configured tracker. Adds Gitea webhook handler with HMAC-SHA256
verification, and wires up the previously stubbed GitHub/GitLab PR
handlers.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
feat: auto-generated per-repo webhook secrets with dashboard proxy
Some checks failed
CI / Format (push) Successful in 5s
CI / Clippy (push) Failing after 1m57s
CI / Detect Changes (pull_request) Has been skipped
CI / Deploy Agent (pull_request) Has been skipped
CI / Deploy Dashboard (pull_request) Has been skipped
CI / Deploy Docs (pull_request) Has been skipped
CI / Deploy MCP (pull_request) Has been skipped
CI / Security Audit (push) Has been skipped
CI / Tests (push) Has been skipped
CI / Detect Changes (push) Has been skipped
CI / Deploy Agent (push) Has been skipped
CI / Deploy Dashboard (push) Has been skipped
CI / Deploy Docs (push) Has been skipped
CI / Deploy MCP (push) Has been skipped
CI / Format (pull_request) Successful in 8s
CI / Clippy (pull_request) Failing after 1m53s
CI / Security Audit (pull_request) Has been skipped
CI / Tests (pull_request) Has been skipped
0cb208408e
- Auto-generate webhook_secret on repository creation (UUID-based)
- Webhook routes use per-repo URLs: /webhook/{platform}/{repo_id}
- Verify signatures using per-repo secret (not global env var)
- Dashboard proxies webhooks to agent (agent not exposed publicly)
- Edit modal shows webhook URL + secret for user to copy into Gitea
- Add webhook-config API endpoint to retrieve per-repo secret
- Add Gitea option to edit dialog tracker type dropdown

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
sharang added 1 commit 2026-03-11 11:06:52 +00:00
fix: resolve clippy errors (expect_used, manual strip_prefix)
Some checks failed
CI / Format (push) Successful in 4s
CI / Clippy (pull_request) Failing after 3m10s
CI / Detect Changes (push) Has been skipped
CI / Detect Changes (pull_request) Has been skipped
CI / Deploy Agent (push) Has been skipped
CI / Clippy (push) Failing after 2m58s
CI / Security Audit (push) Has been skipped
CI / Tests (push) Has been skipped
CI / Format (pull_request) Successful in 3s
CI / Security Audit (pull_request) Has been skipped
CI / Tests (pull_request) Has been skipped
CI / Deploy Dashboard (push) Has been skipped
CI / Deploy Docs (push) Has been skipped
CI / Deploy MCP (push) Has been skipped
CI / Deploy Agent (pull_request) Has been skipped
CI / Deploy Dashboard (pull_request) Has been skipped
CI / Deploy Docs (pull_request) Has been skipped
CI / Deploy MCP (pull_request) Has been skipped
f11e6d44cc
Replace expect() calls with let-else returns in SBOM download, use
strip_prefix() instead of manual slicing in extract_base_url, and
suppress too_many_arguments on server function.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
sharang added 1 commit 2026-03-11 11:55:06 +00:00
fix: resolve clippy too_many_arguments errors and upgrade CI to Rust 1.94
All checks were successful
CI / Format (push) Successful in 2m22s
CI / Clippy (push) Successful in 4m28s
CI / Security Audit (push) Has been skipped
CI / Tests (push) Has been skipped
CI / Format (pull_request) Successful in 4s
CI / Clippy (pull_request) Successful in 4m39s
CI / Security Audit (pull_request) Has been skipped
CI / Tests (pull_request) Has been skipped
CI / Detect Changes (push) Has been skipped
CI / Detect Changes (pull_request) Has been skipped
CI / Deploy Dashboard (push) Has been skipped
CI / Deploy MCP (push) Has been skipped
CI / Deploy MCP (pull_request) Has been skipped
CI / Deploy Agent (push) Has been skipped
CI / Deploy Docs (push) Has been skipped
CI / Deploy Agent (pull_request) Has been skipped
CI / Deploy Dashboard (pull_request) Has been skipped
CI / Deploy Docs (pull_request) Has been skipped
71d8f0fd17
Move #[allow(clippy::too_many_arguments)] to module level so it
propagates through Dioxus #[server] macro expansion. Upgrade CI
container from rust:1.89 to rust:1.94 to match local toolchain.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
sharang merged commit 491665559f into main 2026-03-11 12:14:00 +00:00
Sign in to join this conversation.
No Reviewers
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: sharang/compliance-scanner-agent#10