feat: Add automatic CODEOWNERS reviewer assignment
Summary
Implements automatic assignment of code owners as reviewers when merge requests are created or updated, addressing &20708.
Problem
GitLab currently creates CODEOWNERS approval rules automatically via SyncCodeOwnerApprovalRules, but users must still manually assign reviewers. This creates friction, especially for large organizations with established ownership patterns. Major competing platforms offer this as standard functionality.
Solution
This MR adds a configurable automatic reviewer assignment feature that:
-
Leverages existing infrastructure - Reads from
ApprovalMergeRequestRulerecords already created bySyncCodeOwnerApprovalRules -
Supports multiple strategies via project settings:
-
disabled(default) - No automatic assignment -
all_members- Assigns all code owner members -
load_balanced- Respectsapprovals_requiredfrom CODEOWNERS sections, selects reviewers based on current review load -
intelligent- Reserved for Phase 2 DAP integration (falls back toload_balanced)
-
-
Designed for extensibility - Strategy pattern allows easy addition of Phase 2 DAP-powered intelligent selection
Technical Implementation
New Files
| File | Purpose |
|---|---|
ee/app/services/merge_requests/assign_code_owner_reviewers_service.rb |
Main orchestration service |
ee/app/services/merge_requests/reviewer_assignment/base_strategy.rb |
Base class for selection strategies |
ee/app/services/merge_requests/reviewer_assignment/all_members_strategy.rb |
Assigns all eligible members |
ee/app/services/merge_requests/reviewer_assignment/load_balanced_strategy.rb |
Load-balanced selection with N-of-M support |
ee/app/services/merge_requests/reviewer_assignment/strategy_factory.rb |
Builds appropriate strategy based on settings |
ee/app/workers/merge_requests/assign_code_owner_reviewers_worker.rb |
Background worker for async processing |
ee/app/models/concerns/code_owner_reviewer_assignment_strategy.rb |
Enum concern for project settings |
Database Changes
Adds code_owner_reviewer_assignment_strategy smallint column to project_settings table.
Metrics
Tracked via Internal Events:
-
auto_assign_code_owner_reviewers- Fires on each assignment with strategy label and reviewer count -
enable_code_owner_reviewer_auto_assignment- Fires when feature is enabled
Phase 2 Preparation
The intelligent strategy is stubbed and falls back to load_balanced. Phase 2 will add DAP integration for ML-powered reviewer selection.
Testing
- Unit tests for all strategies
- Service specs with various scenarios
- Worker specs
TODO (follow-up MRs)
-
Trigger worker from
SyncCodeOwnerApprovalRulescompletion - Add project settings UI toggle
- Add MR interface indicators for auto-assigned reviewers
- Documentation