Skip to content

Commit a71cedd

Browse files
committed
feat: v0.6.0 - Real-time watch mode, IDE integrations, duplicate detection
## Added - WebSocket endpoint for real-time file watching (/ws/watch) - Web dashboard for browser-based monitoring - IDE integrations: VS Code, Neovim, JetBrains plugins - Duplicate function detection rule (generic/duplicate-function) - Doctor command for installation health checks - --changed-only flag for PR workflows - --no-initial-scan flag for watch mode - Release drafter for auto changelog ## Changed - Cleaner watch mode terminal output - Daemon shows dashboard URL on startup - Categorized rules into sinks vs review hints ## Fixed - All clippy warnings for Rust 2024 edition - Normalized file paths in SARIF output
1 parent 42795b9 commit a71cedd

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

54 files changed

+9929
-408
lines changed

.github/release-drafter.yml

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
name-template: 'v$RESOLVED_VERSION'
2+
tag-template: 'v$RESOLVED_VERSION'
3+
categories:
4+
- title: '🚀 Features'
5+
labels:
6+
- 'feature'
7+
- 'enhancement'
8+
- 'feat'
9+
- title: '🐛 Bug Fixes'
10+
labels:
11+
- 'fix'
12+
- 'bugfix'
13+
- 'bug'
14+
- title: '🔒 Security'
15+
labels:
16+
- 'security'
17+
- title: '📝 Documentation'
18+
labels:
19+
- 'documentation'
20+
- 'docs'
21+
- title: '🧰 Maintenance'
22+
labels:
23+
- 'chore'
24+
- 'maintenance'
25+
- 'refactor'
26+
- title: '⬆️ Dependencies'
27+
labels:
28+
- 'dependencies'
29+
- 'deps'
30+
change-template: '- $TITLE @$AUTHOR (#$NUMBER)'
31+
change-title-escapes: '\<*_&'
32+
version-resolver:
33+
major:
34+
labels:
35+
- 'major'
36+
- 'breaking'
37+
minor:
38+
labels:
39+
- 'minor'
40+
- 'feature'
41+
- 'enhancement'
42+
patch:
43+
labels:
44+
- 'patch'
45+
- 'fix'
46+
- 'bugfix'
47+
default: patch
48+
template: |
49+
## What's Changed
50+
51+
$CHANGES
52+
53+
**Full Changelog**: https://github.com/$OWNER/$REPOSITORY/compare/$PREVIOUS_TAG...v$RESOLVED_VERSION
Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
name: Release Drafter
2+
3+
on:
4+
push:
5+
branches:
6+
- main
7+
pull_request:
8+
types: [opened, reopened, synchronize]
9+
10+
permissions:
11+
contents: read
12+
pull-requests: write
13+
14+
jobs:
15+
update_release_draft:
16+
permissions:
17+
contents: write
18+
pull-requests: write
19+
runs-on: ubuntu-latest
20+
steps:
21+
- uses: release-drafter/release-drafter@v6
22+
with:
23+
config-name: release-drafter.yml
24+
env:
25+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
26+
27+
# Auto-label PRs based on conventional commit titles
28+
label:
29+
permissions:
30+
contents: read
31+
pull-requests: write
32+
runs-on: ubuntu-latest
33+
if: github.event_name == 'pull_request'
34+
steps:
35+
- uses: actions/github-script@v7
36+
with:
37+
script: |
38+
const title = context.payload.pull_request.title.toLowerCase();
39+
const labels = [];
40+
41+
if (title.startsWith('feat')) labels.push('feature');
42+
else if (title.startsWith('fix')) labels.push('fix');
43+
else if (title.startsWith('docs')) labels.push('documentation');
44+
else if (title.startsWith('chore')) labels.push('chore');
45+
else if (title.startsWith('refactor')) labels.push('refactor');
46+
else if (title.startsWith('security') || title.includes('security')) labels.push('security');
47+
else if (title.startsWith('deps') || title.includes('dependencies')) labels.push('dependencies');
48+
49+
if (title.includes('breaking') || title.includes('!:')) labels.push('breaking');
50+
51+
if (labels.length > 0) {
52+
await github.rest.issues.addLabels({
53+
owner: context.repo.owner,
54+
repo: context.repo.repo,
55+
issue_number: context.payload.pull_request.number,
56+
labels: labels
57+
});
58+
}

CHANGELOG.md

Lines changed: 49 additions & 72 deletions
Original file line numberDiff line numberDiff line change
@@ -5,104 +5,81 @@ All notable changes to RMA (Rust Monorepo Analyzer) will be documented in this f
55
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
66
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
77

8-
## [0.3.0] - 2026-01-31
8+
## [Unreleased]
99

1010
### Added
11+
- **IDE Integrations**: VS Code extension, Neovim plugin, JetBrains plugin, Web Dashboard
12+
- **Real-time Watch Mode**: WebSocket-based live updates with file system monitoring
13+
- **Duplicate Function Detection**: `generic/duplicate-function` rule
14+
- **Doctor Command**: `rma doctor` for installation health checks
15+
- **PR Workflow Support**: `--changed-only` flag to only scan changed files
16+
- **Release Drafter**: Auto-generate release notes from PRs
1117

12-
- **8 New Security Rules**: Comprehensive vulnerability detection
13-
14-
**Rust-specific:**
15-
- `rust/transmute-used` - Detects std::mem::transmute (type safety bypass)
16-
- `rust/raw-pointer-deref` - Detects raw pointer dereferences
17-
- `rust/command-injection` - Detects shell command execution patterns
18-
- `rust/sql-injection` - Detects SQL built with format!/string concatenation
19-
- `rust/unchecked-index` - Detects direct array indexing without bounds check
20-
- `rust/path-traversal` - Detects file paths with string interpolation
18+
### Changed
19+
- Watch mode now has cleaner terminal output with proper raw mode handling
20+
- `--no-initial-scan` flag to skip initial directory scan in watch mode
21+
- Daemon shows dashboard URL on startup
2122

22-
**Generic (all languages):**
23-
- `generic/hardcoded-secret` - Detects API keys, AWS keys, GitHub tokens, private keys
24-
- `generic/insecure-crypto` - Detects MD5, SHA-1, DES, RC4, ECB mode usage
23+
## [0.6.0] - 2026-02-01
2524

26-
- **Automatic Homebrew Updates**: New workflow auto-updates tap on release
27-
- `.github/workflows/update-homebrew-tap.yml`
28-
- Computes SHA256 hashes automatically
29-
- Supports macOS + Linux (Intel + ARM)
25+
### Added
26+
- WebSocket endpoint for real-time file watching (`/ws/watch`)
27+
- Web dashboard for browser-based monitoring
28+
- Initial scan on watch mode startup
29+
- Interactive keyboard shortcuts in watch mode (q/c/r/s/e/p/?)
3030

3131
### Changed
32+
- Categorized rules into high-confidence sinks vs review hints
33+
- Reduced false positives in security rules
3234

33-
- Total security rules: 19 (was 11)
34-
- Secret detection now redacts sensitive values in output
35-
- Detection code patterns are automatically skipped to reduce false positives
35+
### Fixed
36+
- Clippy warnings for Rust 2024 edition
37+
- Normalized file paths in SARIF and GitHub output
3638

37-
## [0.2.0] - 2026-02-01
39+
## [0.5.0] - 2026-01-31
3840

3941
### Added
42+
- Rich diagnostics with code snippets and suggestions
43+
- GitHub Actions output format (`--format github`)
4044

41-
- **Config Versioning**: Added `config_version = 1` to rma.toml for future compatibility
42-
- Validates version on load, warns if missing, errors on unsupported versions
43-
44-
- **Stable Fingerprints**: New fingerprinting system for baseline comparisons
45-
- Survives line number changes, whitespace changes, path format differences
46-
- SHA-256 based with normalized inputs
47-
48-
- **Rulesets**: Named groups of rules for targeted scanning
49-
- Built-in: `security`, `maintainability`
50-
- Custom rulesets via `[rulesets]` in rma.toml
51-
- CLI: `--ruleset security`
52-
53-
- **Inline Suppression**: Suppress findings with comments
54-
- `// rma-ignore-next-line <rule_id> reason="..."`
55-
- `// rma-ignore <rule_id> reason="..."` (block-level)
56-
- Python: `# rma-ignore-next-line <rule_id> reason="..."`
57-
- Strict profile requires reason
58-
59-
- **Print Effective Config**: `rma config print-effective [--format json]`
60-
- Shows resolved configuration with precedence tracking
61-
- Displays where each value comes from (default, config-file, cli-flag)
62-
63-
- **Timer String Rule**: New `js/timer-string-eval` rule
64-
- Only flags setTimeout/setInterval with string arguments
65-
- Arrow functions, function references are NOT flagged
66-
- Default severity: Warning (not Critical)
67-
68-
- **GitHub Actions**: Composite action and reusable workflow
69-
- `.github/actions/rma-scan/action.yml`
70-
- `.github/workflows/rma-scan-reusable.yml`
71-
- Automatic SARIF upload to GitHub Security tab
72-
73-
- **New CLI Flags**:
74-
- `--ruleset <name>` - Use specific ruleset
75-
- `--include-suppressed` - Include suppressed findings
76-
- `--baseline-mode` - Only report new findings
45+
### Fixed
46+
- Clippy warnings for Rust 2024 if-let chains
7747

78-
### Changed
48+
## [0.4.0] - 2026-01-31
7949

80-
- **Edition 2024**: Updated Rust edition from 2021 to 2024
81-
- **js/dynamic-code-execution**: Now only flags `eval()` and `Function()`, not timers
50+
### Added
51+
- SARIF output improvements
52+
- Better error messages
8253

83-
### Fixed
54+
## [0.3.0] - 2026-01-31
8455

85-
- Timer rule false positives for normal setTimeout/setInterval usage
86-
- Config precedence now correctly applies CLI > config file > defaults
56+
### Added
57+
- 8 new security rules for Rust, JS/TS, Python, Go, Java
58+
- Automatic Homebrew tap update workflow
59+
- Secret detection (API keys, AWS keys, GitHub tokens, private keys)
60+
- Insecure crypto detection (MD5, SHA-1, DES, RC4, ECB)
8761

88-
## [0.1.1] - 2025-12-15
62+
## [0.2.0] - 2026-01-31
8963

9064
### Added
91-
- Initial GitHub release with pre-built binaries
92-
- Docker images on GHCR
93-
- Homebrew tap
65+
- Config versioning (`config_version = 1`)
66+
- Stable fingerprints for baseline comparisons
67+
- Rulesets (security, maintainability)
68+
- Inline suppression (`// rma-ignore-next-line`)
69+
- GitHub Actions integration
70+
- Timer string rule for JS
71+
72+
### Changed
73+
- Updated to Rust edition 2024
9474

95-
## [0.1.0] - 2025-12-01
75+
## [0.1.0] - 2026-01-31
9676

9777
### Added
9878
- Initial release
9979
- Multi-language support: Rust, JavaScript, TypeScript, Python, Go, Java
100-
- 10+ security and code quality rules
80+
- Security and code quality rules
10181
- SARIF output for GitHub Security tab
10282
- Watch mode for real-time analysis
10383
- HTTP API daemon
104-
- WASM plugin system
105-
- AI-powered analysis (optional)
10684
- Configuration via rma.toml
10785
- Profiles: fast, balanced, strict
108-
- Baseline tracking for legacy code

0 commit comments

Comments
 (0)