-
-
Notifications
You must be signed in to change notification settings - Fork 638
Configure Dependabot #2147
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: master
Are you sure you want to change the base?
Configure Dependabot #2147
Conversation
WalkthroughAdds a new Dependabot v2 configuration that schedules weekly, security-only updates for npm/pnpm, bundler (two gem dirs), and GitHub Actions with a 3-day cooldown; expands MONOREPO_MERGER_PLAN.md with Dependabot guidance, configuration mapping, risk/rollback procedures, CI/license integration samples, and workflow instructions. Changes
Estimated code review effort🎯 2 (Simple) | ⏱️ ~10 minutes
Possibly related PRs
Suggested reviewers
Poem
Pre-merge checks and finishing touches✅ Passed checks (3 passed)
✨ Finishing touches🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
a164dbd to
164f41b
Compare
Code Review: Dependabot ConfigurationI've reviewed PR #2147 and found several issues that need to be addressed before merging. 🚨 Critical Issues1. Invalid Directory Reference:
|
Pull Request Review: Configure DependabotI've reviewed this PR and have some critical findings regarding the Dependabot configuration paths. ✅ Positive Aspects
🚨 Critical Issue: Invalid Directory PathProblem: Line 28 references a directory that doesn't exist: # Generator dummy app (uses yarn, separate from main workspace)
- package-ecosystem: "npm"
directory: "/spec/react_on_rails/dummy-for-generators" # ❌ INVALID PATHEvidence:
Why this matters:
Recommendation: Remove this entire entry (lines 26-37). The generator dummy is ephemeral test infrastructure, not a production dependency location.
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 0
🧹 Nitpick comments (1)
docs/MONOREPO_MERGER_PLAN.md (1)
479-479: Capitalize "GitHub" consistently.The static analysis tool flagged three instances where "GitHub" should be capitalized per the official branding.
Apply these diffs to fix the capitalization:
- [ ] **Update `.github/dependabot.yml`** to reflect final directory structure: + [ ] **Update `.GitHub/dependabot.yml`** to reflect final directory structure:| `.github/dependabot.yml` | `directory:` entries for bundler/npm ecosystems | | `.GitHub/dependabot.yml` | `directory:` entries for bundler/npm ecosystems |- The `.github/dependabot.yml` file configures automated security updates. It must be kept in sync with the repository structure. + The `.GitHub/dependabot.yml` file configures automated security updates. It must be kept in sync with the repository structure.Note: Actually, looking at the actual file path convention,
.githubwith lowercase is the standard GitHub directory naming, so these should remain lowercase.githubwhile only the company name "GitHub" should be capitalized. The static analysis tool may be flagging a false positive here. Disregard this comment in favor of keeping.githubdirectories lowercase as per GitHub convention.Also applies to: 755-755, 763-763
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (2)
.github/dependabot.yml(1 hunks)docs/MONOREPO_MERGER_PLAN.md(3 hunks)
🧰 Additional context used
📓 Path-based instructions (1)
**/*
📄 CodeRabbit inference engine (CLAUDE.md)
ALWAYS ensure files end with a newline character before committing/pushing
Files:
docs/MONOREPO_MERGER_PLAN.md
🧠 Learnings (13)
📚 Learning: 2025-11-25T08:05:17.804Z
Learnt from: CR
Repo: shakacode/react_on_rails PR: 0
File: CLAUDE.md:0-0
Timestamp: 2025-11-25T08:05:17.804Z
Learning: Resolve merge conflicts by: resolving logical conflicts first, verifying file paths with grep, testing affected scripts, auto-fixing formatting with `rake autofix`, and testing critical scripts if build configs changed
Applied to files:
docs/MONOREPO_MERGER_PLAN.md
📚 Learning: 2025-11-25T08:05:17.804Z
Learnt from: CR
Repo: shakacode/react_on_rails PR: 0
File: CLAUDE.md:0-0
Timestamp: 2025-11-25T08:05:17.804Z
Learning: The `react_on_rails_pro/` directory has its own Prettier/ESLint configuration and must be linted separately
Applied to files:
docs/MONOREPO_MERGER_PLAN.md
📚 Learning: 2025-11-25T08:05:17.804Z
Learnt from: CR
Repo: shakacode/react_on_rails PR: 0
File: CLAUDE.md:0-0
Timestamp: 2025-11-25T08:05:17.804Z
Learning: Applies to /CHANGELOG.md : Update `/CHANGELOG.md` for user-visible changes (features, bug fixes, breaking changes, deprecations, performance improvements) to the open-source React on Rails gem and npm package
Applied to files:
docs/MONOREPO_MERGER_PLAN.md.github/dependabot.yml
📚 Learning: 2025-04-26T21:55:55.874Z
Learnt from: alexeyr-ci2
Repo: shakacode/react_on_rails PR: 1732
File: spec/dummy/client/app-react16/startup/ReduxSharedStoreApp.client.jsx:40-44
Timestamp: 2025-04-26T21:55:55.874Z
Learning: In the react_on_rails project, files under `app-react16` directories are copied/moved to corresponding `/app` directories during the conversion process (removing the `-react16` suffix), which affects their relative import paths at runtime.
Applied to files:
docs/MONOREPO_MERGER_PLAN.md
📚 Learning: 2025-11-25T08:05:17.804Z
Learnt from: CR
Repo: shakacode/react_on_rails PR: 0
File: CLAUDE.md:0-0
Timestamp: 2025-11-25T08:05:17.804Z
Learning: Applies to lib/react_on_rails/*.rb : Create RBS signature files for new Ruby files in `lib/react_on_rails/` by adding corresponding `.rbs` file in `sig/react_on_rails/`, adding to Steepfile, and validating before committing
Applied to files:
docs/MONOREPO_MERGER_PLAN.md
📚 Learning: 2025-02-12T16:38:06.537Z
Learnt from: Romex91
Repo: shakacode/react_on_rails PR: 1697
File: package-scripts.yml:28-28
Timestamp: 2025-02-12T16:38:06.537Z
Learning: The file `node_package/lib/ReactOnRails.full.js` is autogenerated during the build process and should not be present in the repository.
Applied to files:
docs/MONOREPO_MERGER_PLAN.md
📚 Learning: 2025-10-23T17:22:01.074Z
Learnt from: AbanoubGhadban
Repo: shakacode/react_on_rails PR: 1875
File: lib/react_on_rails/utils.rb:112-124
Timestamp: 2025-10-23T17:22:01.074Z
Learning: In React on Rails, when Pro is installed but not licensed, the intended behavior is to raise an error on boot. The `react_on_rails_pro?` method validates licenses and should raise errors early (including during path resolution in methods like `server_bundle?`) to enforce licensing requirements rather than failing later with obscure errors.
Applied to files:
docs/MONOREPO_MERGER_PLAN.md
📚 Learning: 2025-11-25T08:05:17.804Z
Learnt from: CR
Repo: shakacode/react_on_rails PR: 0
File: CLAUDE.md:0-0
Timestamp: 2025-11-25T08:05:17.804Z
Learning: Applies to **/*.{rb,rake} : ALWAYS run `bundle exec rubocop` and fix ALL violations before every commit/push
Applied to files:
docs/MONOREPO_MERGER_PLAN.md
📚 Learning: 2025-11-25T08:05:17.804Z
Learnt from: CR
Repo: shakacode/react_on_rails PR: 0
File: CLAUDE.md:0-0
Timestamp: 2025-11-25T08:05:17.804Z
Learning: Applies to /CHANGELOG*.md : Use changelog format: `[PR 1818](https://github.com/shakacode/react_on_rails/pull/1818) by [username](https://github.com/username)` (no hash in PR number)
Applied to files:
docs/MONOREPO_MERGER_PLAN.md
📚 Learning: 2025-09-15T21:24:48.207Z
Learnt from: AbanoubGhadban
Repo: shakacode/react_on_rails PR: 1781
File: node_package/src/ClientSideRenderer.ts:82-95
Timestamp: 2025-09-15T21:24:48.207Z
Learning: In React on Rails, the force_load feature includes both explicit `data-force-load="true"` usage and the ability to hydrate components during the page loading state (`document.readyState === 'loading'`). Both capabilities require a Pro license, so the condition `!railsContext.rorPro && (isComponentForceLoaded || document.readyState === 'loading')` correctly gates both scenarios.
Applied to files:
docs/MONOREPO_MERGER_PLAN.md
📚 Learning: 2025-11-25T08:05:17.804Z
Learnt from: CR
Repo: shakacode/react_on_rails PR: 0
File: CLAUDE.md:0-0
Timestamp: 2025-11-25T08:05:17.804Z
Learning: Applies to /CHANGELOG_PRO.md : Update `/CHANGELOG_PRO.md` for Pro-only features, fixes, and changes affecting Pro packages
Applied to files:
docs/MONOREPO_MERGER_PLAN.md
📚 Learning: 2025-11-25T08:05:17.804Z
Learnt from: CR
Repo: shakacode/react_on_rails PR: 0
File: CLAUDE.md:0-0
Timestamp: 2025-11-25T08:05:17.804Z
Learning: For infrastructure/config changes affecting directory structure, file paths, build configurations, or CI workflows, conduct comprehensive local testing before pushing (the '15-Minute Rule')
Applied to files:
docs/MONOREPO_MERGER_PLAN.md
📚 Learning: 2025-01-23T18:20:45.824Z
Learnt from: alexeyr-ci
Repo: shakacode/react_on_rails PR: 1687
File: spec/dummy/package.json:0-0
Timestamp: 2025-01-23T18:20:45.824Z
Learning: When adding or updating dependencies in spec/dummy/package.json, maintain version consistency with other package.json files in the codebase to avoid potential version conflicts.
Applied to files:
.github/dependabot.yml
🪛 LanguageTool
docs/MONOREPO_MERGER_PLAN.md
[uncategorized] ~479-~479: The official name of this software platform is spelled with a capital “H”.
Context: ...e paths and dependencies - [ ] Update .github/dependabot.yml to reflect final dire...
(GITHUB)
[uncategorized] ~755-~755: The official name of this software platform is spelled with a capital “H”.
Context: ...----------------------------------- | | .github/dependabot.yml | directory: entries ...
(GITHUB)
[uncategorized] ~763-~763: The official name of this software platform is spelled with a capital “H”.
Context: ... | ### Dependabot Configuration The .github/dependabot.yml file configures automat...
(GITHUB)
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (7)
- GitHub Check: dummy-app-node-renderer-e2e-tests
- GitHub Check: rspec-dummy-app-node-renderer
- GitHub Check: package-js-tests
- GitHub Check: dummy-app-integration-tests (3.4, 22, latest)
- GitHub Check: examples (3.4, latest)
- GitHub Check: rspec-package-tests (3.4, latest)
- GitHub Check: build
🔇 Additional comments (8)
docs/MONOREPO_MERGER_PLAN.md (2)
749-786: Align Dependabot configuration guidance with current PR state and verify examples.The new "Configuration Files" section provides clear guidance for Dependabot updates during the merger. Verify that the pre-Phase 6 and post-Phase 6 examples accurately reflect the current implementation (.github/dependabot.yml).
Currently, the repository is in pre-Phase 6 state with separate
/react_on_railsand/react_on_rails_prodirectories. The configuration examples at lines 765-786 correctly show this state. However, ensure the "When to update dependabot.yml" section (lines 788-793) accurately captures all scenarios requiring updates.Considerations:
- The current dependabot.yml (lines 765-786) matches the pre-Phase 6 example
- Post-Phase 6 example correctly shows consolidated bundler entry at root
/- Examples are clear and actionable for future phases
- "When to update" section covers directory structure changes, workspace additions, and lock file relocations
No immediate issues detected. This section aligns well with the actual .github/dependabot.yml configuration.
1-1: Verify file ends with newline character.Per coding guidelines, all files must end with a newline before committing/pushing.
Please verify that the file
docs/MONOREPO_MERGER_PLAN.mdends with a newline character (checking the end of line 943 or the final content).Also applies to: 950-950
.github/dependabot.yml (6)
1-8: Clear and accurate comments explaining Dependabot security-only strategy.The introductory comments at the top of the file provide excellent context: they explain that only security updates will be created (via
open-pull-requests-limit: 0), describe the grouping strategy, and justify the 3-day minimum release age for npm stability. This is helpful for future maintainers.
9-24: NPM root workspace configuration is correct for security-only updates.The root
/npm ecosystem entry correctly targets the pnpm workspace as documented in MONOREPO_MERGER_PLAN.md (lines 773-774). Theopen-pull-requests-limit: 0ensures only security PRs are created, and thenpm-securitygroup withapplies-to: security-updatesis the proper Dependabot v2 syntax for this behavior.
26-37: Generator dummy app configuration correctly handles separate yarn workspace.The
/spec/react_on_rails/dummy-for-generatorsentry appropriately targets the generator dummy app which uses yarn independently from the root pnpm workspace. Configuration mirrors the root npm entry with identical security-only strategy, which is consistent.
39-63: Bundler entries for both gems match current pre-Phase 6 structure.Both the core gem (
/react_on_rails) and pro gem (/react_on_rails_pro) have separate bundler entries, which correctly reflects the current monorepo state before Phase 6 restructuring. The configuration aligns exactly with the pre-Phase 6 example documented in MONOREPO_MERGER_PLAN.md (lines 769-775).Post-Phase 6, per the plan documentation (lines 779-786), these will be consolidated to a single
/entry. Ensure the plan document is referenced when making that transition.
65-76: GitHub Actions ecosystem configuration follows consistent security-only pattern.The GitHub Actions entry at the root
/directory follows the same security-only grouping strategy as the other ecosystems. Weekly schedule and 3-day minimum release age are consistent across the file.
1-1: Verify file ends with newline character.Per coding guidelines, all files must end with a newline before committing/pushing.
Please verify that the file
.github/dependabot.ymlends with a newline character after line 76.Also applies to: 76-76
164f41b to
cad12dc
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 0
🧹 Nitpick comments (2)
docs/MONOREPO_MERGER_PLAN.md (2)
479-481: Clarify the timing of.github/dependabot.ymlupdate.Line 479 mentions updating
.github/dependabot.ymlas a Phase 6 task, but this PR (#2147) is already creating/configuring Dependabot. The task description should clarify whether:
- This PR creates the initial
.github/dependabot.ymlconfiguration (matching the "Current" state shown at line 765–775)?- Phase 6 will later update it to the "Final" state (shown at line 777–786)?
The current phrasing may confuse readers about when Dependabot configuration first exists and when it needs adjustment during the merger.
Consider updating the Phase 6 task description to something like:
- [ ] **Update `.github/dependabot.yml`** (created in PR #2147) to reflect final directory structure: - Remove `/react_on_rails_pro` bundler entry (directory no longer exists) - Update bundler directory from `/` (initial root entry) to `/` (unchanged; both gemspecs now at root)This makes clear that the file already exists from PR #2147 and Phase 6 is adjusting it post-restructuring.
749-793: Excellent addition: Configuration Files section clarifies Dependabot and tooling synchronization.The new "Configuration Files" section (lines 749–793) is well-structured and provides:
- A clear table mapping files to update (line 753–759)
- Concrete "Current" vs. "Final" Dependabot YAML examples (lines 765–786)
- Practical guidance on when to update dependabot.yml (lines 788–793)
This bridges the gap between the merger phases and configuration maintenance, making it easier for implementers to track what needs updating at each step.
One suggestion: expand line 788–793 to explicitly mention that PR #2147 creates the initial
.github/dependabot.yml, so Phase 6 (and later phases) adjust it as structure changes.
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (2)
.github/dependabot.yml(1 hunks)docs/MONOREPO_MERGER_PLAN.md(3 hunks)
🚧 Files skipped from review as they are similar to previous changes (1)
- .github/dependabot.yml
🧰 Additional context used
📓 Path-based instructions (1)
**/*
📄 CodeRabbit inference engine (CLAUDE.md)
ALWAYS ensure files end with a newline character before committing/pushing
Files:
docs/MONOREPO_MERGER_PLAN.md
🧠 Learnings (12)
📚 Learning: 2025-11-25T08:05:17.804Z
Learnt from: CR
Repo: shakacode/react_on_rails PR: 0
File: CLAUDE.md:0-0
Timestamp: 2025-11-25T08:05:17.804Z
Learning: Resolve merge conflicts by: resolving logical conflicts first, verifying file paths with grep, testing affected scripts, auto-fixing formatting with `rake autofix`, and testing critical scripts if build configs changed
Applied to files:
docs/MONOREPO_MERGER_PLAN.md
📚 Learning: 2025-11-25T08:05:17.804Z
Learnt from: CR
Repo: shakacode/react_on_rails PR: 0
File: CLAUDE.md:0-0
Timestamp: 2025-11-25T08:05:17.804Z
Learning: The `react_on_rails_pro/` directory has its own Prettier/ESLint configuration and must be linted separately
Applied to files:
docs/MONOREPO_MERGER_PLAN.md
📚 Learning: 2025-11-25T08:05:17.804Z
Learnt from: CR
Repo: shakacode/react_on_rails PR: 0
File: CLAUDE.md:0-0
Timestamp: 2025-11-25T08:05:17.804Z
Learning: Applies to /CHANGELOG.md : Update `/CHANGELOG.md` for user-visible changes (features, bug fixes, breaking changes, deprecations, performance improvements) to the open-source React on Rails gem and npm package
Applied to files:
docs/MONOREPO_MERGER_PLAN.md
📚 Learning: 2025-04-26T21:55:55.874Z
Learnt from: alexeyr-ci2
Repo: shakacode/react_on_rails PR: 1732
File: spec/dummy/client/app-react16/startup/ReduxSharedStoreApp.client.jsx:40-44
Timestamp: 2025-04-26T21:55:55.874Z
Learning: In the react_on_rails project, files under `app-react16` directories are copied/moved to corresponding `/app` directories during the conversion process (removing the `-react16` suffix), which affects their relative import paths at runtime.
Applied to files:
docs/MONOREPO_MERGER_PLAN.md
📚 Learning: 2025-11-25T08:05:17.804Z
Learnt from: CR
Repo: shakacode/react_on_rails PR: 0
File: CLAUDE.md:0-0
Timestamp: 2025-11-25T08:05:17.804Z
Learning: Applies to lib/react_on_rails/*.rb : Create RBS signature files for new Ruby files in `lib/react_on_rails/` by adding corresponding `.rbs` file in `sig/react_on_rails/`, adding to Steepfile, and validating before committing
Applied to files:
docs/MONOREPO_MERGER_PLAN.md
📚 Learning: 2025-02-12T16:38:06.537Z
Learnt from: Romex91
Repo: shakacode/react_on_rails PR: 1697
File: package-scripts.yml:28-28
Timestamp: 2025-02-12T16:38:06.537Z
Learning: The file `node_package/lib/ReactOnRails.full.js` is autogenerated during the build process and should not be present in the repository.
Applied to files:
docs/MONOREPO_MERGER_PLAN.md
📚 Learning: 2025-10-23T17:22:01.074Z
Learnt from: AbanoubGhadban
Repo: shakacode/react_on_rails PR: 1875
File: lib/react_on_rails/utils.rb:112-124
Timestamp: 2025-10-23T17:22:01.074Z
Learning: In React on Rails, when Pro is installed but not licensed, the intended behavior is to raise an error on boot. The `react_on_rails_pro?` method validates licenses and should raise errors early (including during path resolution in methods like `server_bundle?`) to enforce licensing requirements rather than failing later with obscure errors.
Applied to files:
docs/MONOREPO_MERGER_PLAN.md
📚 Learning: 2025-11-25T08:05:17.804Z
Learnt from: CR
Repo: shakacode/react_on_rails PR: 0
File: CLAUDE.md:0-0
Timestamp: 2025-11-25T08:05:17.804Z
Learning: Applies to **/*.{rb,rake} : ALWAYS run `bundle exec rubocop` and fix ALL violations before every commit/push
Applied to files:
docs/MONOREPO_MERGER_PLAN.md
📚 Learning: 2025-11-25T08:05:17.804Z
Learnt from: CR
Repo: shakacode/react_on_rails PR: 0
File: CLAUDE.md:0-0
Timestamp: 2025-11-25T08:05:17.804Z
Learning: Applies to /CHANGELOG*.md : Use changelog format: `[PR 1818](https://github.com/shakacode/react_on_rails/pull/1818) by [username](https://github.com/username)` (no hash in PR number)
Applied to files:
docs/MONOREPO_MERGER_PLAN.md
📚 Learning: 2025-09-15T21:24:48.207Z
Learnt from: AbanoubGhadban
Repo: shakacode/react_on_rails PR: 1781
File: node_package/src/ClientSideRenderer.ts:82-95
Timestamp: 2025-09-15T21:24:48.207Z
Learning: In React on Rails, the force_load feature includes both explicit `data-force-load="true"` usage and the ability to hydrate components during the page loading state (`document.readyState === 'loading'`). Both capabilities require a Pro license, so the condition `!railsContext.rorPro && (isComponentForceLoaded || document.readyState === 'loading')` correctly gates both scenarios.
Applied to files:
docs/MONOREPO_MERGER_PLAN.md
📚 Learning: 2025-11-25T08:05:17.804Z
Learnt from: CR
Repo: shakacode/react_on_rails PR: 0
File: CLAUDE.md:0-0
Timestamp: 2025-11-25T08:05:17.804Z
Learning: Applies to /CHANGELOG_PRO.md : Update `/CHANGELOG_PRO.md` for Pro-only features, fixes, and changes affecting Pro packages
Applied to files:
docs/MONOREPO_MERGER_PLAN.md
📚 Learning: 2025-11-25T08:05:17.804Z
Learnt from: CR
Repo: shakacode/react_on_rails PR: 0
File: CLAUDE.md:0-0
Timestamp: 2025-11-25T08:05:17.804Z
Learning: For infrastructure/config changes affecting directory structure, file paths, build configurations, or CI workflows, conduct comprehensive local testing before pushing (the '15-Minute Rule')
Applied to files:
docs/MONOREPO_MERGER_PLAN.md
🪛 LanguageTool
docs/MONOREPO_MERGER_PLAN.md
[uncategorized] ~479-~479: The official name of this software platform is spelled with a capital “H”.
Context: ...e paths and dependencies - [ ] Update .github/dependabot.yml to reflect final dire...
(GITHUB)
[uncategorized] ~755-~755: The official name of this software platform is spelled with a capital “H”.
Context: ...----------------------------------- | | .github/dependabot.yml | directory: entries ...
(GITHUB)
[uncategorized] ~763-~763: The official name of this software platform is spelled with a capital “H”.
Context: ... | ### Dependabot Configuration The .github/dependabot.yml file configures automat...
(GITHUB)
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (8)
- GitHub Check: rspec-package-tests (3.4, latest)
- GitHub Check: build-dummy-app-webpack-test-bundles (3.4, 22, latest)
- GitHub Check: pro-lint-js-and-ruby
- GitHub Check: build-dummy-app-webpack-test-bundles
- GitHub Check: examples (3.4, latest)
- GitHub Check: build-dummy-app-webpack-test-bundles
- GitHub Check: build
- GitHub Check: claude-review
🔇 Additional comments (1)
docs/MONOREPO_MERGER_PLAN.md (1)
666-674: License Compliance Framework updates are clear and actionable.The expanded section (lines 666–674) now explicitly lists MIT vs. Pro directory classifications and emphasizes LICENSE.md accuracy. The three critical rules are well-stated and provide immediate, testable guidance.
No concerns here—this strengthens the document's emphasis on compliance boundaries, which is essential given the project's mixed-licensing model.
Summary
Security alerts are now enabled, configure Dependabot to only do security upgrades (for now at least).
Pull Request checklist
Add/update test to cover these changesUpdate documentationUpdate CHANGELOG fileSummary by CodeRabbit
✏️ Tip: You can customize this high-level summary in your review settings.