Skip to content

feat: wildcard conventional-title and conditional merge requirements#1014

Merged
myakove merged 1 commit intomainfrom
feat/issue-1013-wildcard-conventional-title
Mar 3, 2026
Merged

feat: wildcard conventional-title and conditional merge requirements#1014
myakove merged 1 commit intomainfrom
feat/issue-1013-wildcard-conventional-title

Conversation

@myakove
Copy link
Copy Markdown
Collaborator

@myakove myakove commented Mar 3, 2026

Summary

  • Support "*" wildcard for conventional-title config to accept any commit type while still enforcing the Conventional Commits format (<type>[scope]: description)
  • Make merge requirements in PR welcome comment conditional based on config:
    • LGTM count shown only when minimum_lgtm > 0
    • Verified requirement shown only when verified_job is enabled
    • Numbering adjusts dynamically (no gaps)

Config example

# Accept any type, just enforce the format
conventional-title: "*"

# Accept only specific types (existing behavior)
conventional-title: "feat,fix,build,chore,ci,docs,style,refactor,perf,test,revert"

Changes

  • webhook_server/libs/handlers/runner_handler.py - Wildcard "*" support with generic regex
  • webhook_server/libs/handlers/pull_request_handler.py - Dynamic merge requirements list
  • webhook_server/config/schema.yaml - Document wildcard in schema description
  • examples/config.yaml - Add wildcard comment
  • webhook_server/tests/test_runner_handler.py - 8 wildcard test cases
  • webhook_server/tests/test_pull_request_handler.py - 7 merge requirements tests

Test plan

  • 8 wildcard conventional-title tests passing
  • 7 conditional merge requirements tests passing
  • Full test suite: 120 pull_request_handler tests, 76 runner_handler tests
  • Ruff lint + format clean

Closes #1013

Summary by CodeRabbit

  • New Features

    • Wildcard "*" support for conventional commit-type checks (accept any type while preserving format rules)
    • Dynamic "Merge Requirements" section in PR comments replacing the previous static messaging
  • Improvements

    • Improved PR title validation and clearer failure messages reflecting wildcard vs explicit modes
    • Merge-requirements now conditionally include LGTM, status checks, blockers, and verified status
  • Tests

    • Added/updated tests for wildcard title validation and the new merge-requirements behavior

@myakove-bot
Copy link
Copy Markdown
Collaborator

Report bugs in Issues

Welcome! 🎉

This pull request will be automatically processed with the following features:

🔄 Automatic Actions

  • Reviewer Assignment: Reviewers are automatically assigned based on the OWNERS file in the repository root
  • Size Labeling: PR size labels (XS, S, M, L, XL, XXL) are automatically applied based on changes
  • Issue Creation: Disabled for this repository
  • Pre-commit Checks: pre-commit runs automatically if .pre-commit-config.yaml exists
  • Branch Labeling: Branch-specific labels are applied to track the target branch
  • Auto-verification: Auto-verified users have their PRs automatically marked as verified
  • Labels: All label categories are enabled (default configuration)

📋 Available Commands

PR Status Management

  • /wip - Mark PR as work in progress (adds WIP: prefix to title)
  • /wip cancel - Remove work in progress status
  • /hold - Block PR merging (approvers only)
  • /hold cancel - Unblock PR merging
  • /verified - Mark PR as verified
  • /verified cancel - Remove verification status
  • /reprocess - Trigger complete PR workflow reprocessing (useful if webhook failed or configuration changed)
  • /regenerate-welcome - Regenerate this welcome message

Review & Approval

  • /lgtm - Approve changes (looks good to me)
  • /approve - Approve PR (approvers only)
  • /automerge - Enable automatic merging when all requirements are met (maintainers and approvers only)
  • /assign-reviewers - Assign reviewers based on OWNERS file
  • /assign-reviewer @username - Assign specific reviewer
  • /check-can-merge - Check if PR meets merge requirements

Testing & Validation

  • /retest tox - Run Python test suite with tox
  • /retest build-container - Rebuild and test container image
  • /retest python-module-install - Test Python package installation
  • /retest pre-commit - Run pre-commit hooks and checks
  • /retest conventional-title - Validate commit message format
  • /retest all - Run all available tests

Container Operations

  • /build-and-push-container - Build and push container image (tagged with PR number)
    • Supports additional build arguments: /build-and-push-container --build-arg KEY=value

Cherry-pick Operations

  • /cherry-pick <branch> - Schedule cherry-pick to target branch when PR is merged
    • Multiple branches: /cherry-pick branch1 branch2 branch3

Label Management

  • /<label-name> - Add a label to the PR
  • /<label-name> cancel - Remove a label from the PR

✅ Merge Requirements

This PR will be automatically approved when the following conditions are met:

  1. Approval: /approve from at least one approver
  2. LGTM Count: Minimum 1 /lgtm from reviewers
  3. Status Checks: All required status checks must pass
  4. No Blockers: No WIP, hold, conflict labels
  5. Verified: PR must be marked as verified (if verification is enabled)

📊 Review Process

Approvers and Reviewers

Approvers:

  • myakove
  • rnetser

Reviewers:

  • myakove
  • rnetser
Available Labels
  • hold
  • verified
  • wip
  • lgtm
  • approve
  • automerge

💡 Tips

  • WIP Status: Use /wip when your PR is not ready for review
  • Verification: The verified label is automatically removed on each new commit
  • Cherry-picking: Cherry-pick labels are processed when the PR is merged
  • Container Builds: Container images are automatically tagged with the PR number
  • Permission Levels: Some commands require approver permissions
  • Auto-verified Users: Certain users have automatic verification and merge privileges

For more information, please refer to the project documentation or contact the maintainers.

@coderabbitai
Copy link
Copy Markdown

coderabbitai Bot commented Mar 3, 2026

Warning

Rate limit exceeded

@myakove has exceeded the limit for the number of commits that can be reviewed per hour. Please wait 3 minutes and 50 seconds before requesting another review.

⌛ How to resolve this issue?

After the wait time has elapsed, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

We recommend that you space out your commits to avoid hitting the rate limit.

🚦 How do rate limits work?

CodeRabbit enforces hourly rate limits for each developer per organization.

Our paid plans have higher rate limits than the trial, open-source and free plans. In all cases, we re-allow further reviews after a brief timeout.

Please see our FAQ for further information.

📥 Commits

Reviewing files that changed from the base of the PR and between bbc903a and c1fd5bd.

📒 Files selected for processing (6)
  • examples/config.yaml
  • webhook_server/config/schema.yaml
  • webhook_server/libs/handlers/pull_request_handler.py
  • webhook_server/libs/handlers/runner_handler.py
  • webhook_server/tests/test_pull_request_handler.py
  • webhook_server/tests/test_runner_handler.py

Walkthrough

Refactors merge-requirements assembly in pull_request_handler into a new method and adds wildcard ("*") support for the conventional-title check, plus related schema/example docs and tests.

Changes

Cohort / File(s) Summary
Configuration & Examples
examples/config.yaml, webhook_server/config/schema.yaml
Documented wildcard "*" support for conventional-title and updated schema description/format notes.
Conventional Title Validation
webhook_server/libs/handlers/runner_handler.py
Added wildcard mode: when conventional_title == "*", validate only general Conventional Commits format (accept any type); preserved existing comma-separated-type behavior otherwise; adjusted messages and debug logs.
Merge Requirements Refactor
webhook_server/libs/handlers/pull_request_handler.py
Replaced _prepare_no_blockers_requirement() with _prepare_merge_requirements() that composes numbered prerequisites (Approval, optional LGTM, Status Checks), blockers (WIP, hold, conflict) and optional Verified line; _prepare_welcome_comment() updated to use it.
Tests
webhook_server/tests/test_pull_request_handler.py, webhook_server/tests/test_runner_handler.py
Updated PR handler tests to assert new _prepare_merge_requirements() outputs across multiple scenarios; added parameterized tests for wildcard conventional-title validation (duplicate insertion present).

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20 minutes

Possibly related PRs

Suggested reviewers

  • rnetser
🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The PR title accurately summarizes the two main changes: wildcard support for conventional-title validation and conditional merge requirements display.
Linked Issues check ✅ Passed All coding requirements from issue #1013 are met: wildcard support in run_conventional_title_check(), schema/config documentation updates, comprehensive test coverage (8 wildcard tests), and conditional merge requirements implementation.
Out of Scope Changes check ✅ Passed The PR includes changes to pull_request_handler.py refactoring merge requirements display beyond issue #1013 scope, but these are complementary improvements that don't contradict the stated objectives.
Docstring Coverage ✅ Passed Docstring coverage is 88.24% which is sufficient. The required threshold is 80.00%.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch feat/issue-1013-wildcard-conventional-title

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.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@qodo-code-review
Copy link
Copy Markdown

Review Summary by Qodo

Support wildcard conventional-title and conditional merge requirements

✨ Enhancement

Grey Divider

Walkthroughs

Description
• Support wildcard "*" for conventional-title config to accept any commit type
• Make merge requirements in welcome comment conditional based on configuration
• LGTM count shown only when minimum_lgtm > 0
• Verified requirement shown only when verified_job is enabled
• Add 8 wildcard validation tests and 7 merge requirements tests
Diagram
flowchart LR
  A["Config: conventional-title"] -->|wildcard '*'| B["Accept any type format"]
  A -->|specific types| C["Accept only listed types"]
  B --> D["Validate format only"]
  C --> D
  D --> E["Conventional Commits Check"]
  F["Config: minimum_lgtm, verified_job"] --> G["Dynamic merge requirements"]
  G --> H["Conditional LGTM requirement"]
  G --> I["Conditional Verified requirement"]
  H --> J["Welcome comment"]
  I --> J
Loading

Grey Divider

File Changes

1. webhook_server/libs/handlers/runner_handler.py ✨ Enhancement +19/-5

Implement wildcard support for conventional title validation

• Add wildcard "*" support for conventional-title configuration
• Implement generic regex pattern ^[\w-]+(\([^)]+\))?!?: .+ for wildcard validation
• Separate validation logic for wildcard vs. specific types
• Improve error messages to display configured types or wildcard indicator

webhook_server/libs/handlers/runner_handler.py


2. webhook_server/libs/handlers/pull_request_handler.py ✨ Enhancement +19/-13

Make merge requirements conditional in welcome comment

• Refactor _prepare_no_blockers_requirement to _prepare_merge_requirements method
• Dynamically build numbered merge requirements list based on enabled features
• Conditionally include LGTM requirement only when minimum_lgtm > 0
• Conditionally include Verified requirement only when verified_job is enabled
• Auto-adjust numbering to avoid gaps in requirement list

webhook_server/libs/handlers/pull_request_handler.py


3. webhook_server/tests/test_runner_handler.py 🧪 Tests +48/-0

Add wildcard conventional title validation tests

• Add 8 parametrized test cases for wildcard "*" conventional title validation
• Test valid cases: standard types, custom types, scoped types, breaking changes
• Test invalid cases: missing colon-space, empty type, missing description
• Verify success and failure paths for wildcard validation

webhook_server/tests/test_runner_handler.py


View more (3)
4. webhook_server/tests/test_pull_request_handler.py 🧪 Tests +65/-20

Add conditional merge requirements tests

• Rename test methods from test_prepare_no_blockers_requirement_* to
 test_prepare_merge_requirements_*
• Add 7 comprehensive test cases for conditional merge requirements
• Test all enabled features, LGTM disabled, verified disabled, and minimal configurations
• Verify correct numbering and presence/absence of conditional requirements

webhook_server/tests/test_pull_request_handler.py


5. examples/config.yaml 📝 Documentation +2/-0

Document wildcard support in example config

• Add comment documenting wildcard "*" usage for conventional-title
• Clarify that wildcard accepts any type while enforcing format

examples/config.yaml


6. webhook_server/config/schema.yaml 📝 Documentation +2/-1

Document wildcard in schema description

• Update conventional-title description to document wildcard "*" support
• Clarify that wildcard enforces format while accepting any type
• Update format requirements section to mention wildcard option

webhook_server/config/schema.yaml


Grey Divider

Qodo Logo

@qodo-code-review
Copy link
Copy Markdown

qodo-code-review Bot commented Mar 3, 2026

Code Review by Qodo

🐞 Bugs (3) 📘 Rule violations (0) 📎 Requirement gaps (1)

Grey Divider


Action required

1. Wildcard missing in examples 📎 Requirement gap ✓ Correctness
Description
examples/config.yaml mentions wildcard usage only in comments but does not include an actual
conventional-title: "*" example value. This fails to demonstrate the wildcard behavior alongside
the existing allowlist example as required.
Code

examples/config.yaml[R201-204]

+    # Use "*" to accept any type while enforcing the format
+    #
    # Resources: https://www.conventionalcommits.org/en/v1.0.0/
    conventional-title: "feat,fix,build,chore,ci,docs,style,refactor,perf,test,revert"
Evidence
PR Compliance ID 4 requires example configs to include a concrete wildcard configuration
(conventional-title: "*") and also retain an allowlist example. The updated example file adds only
a comment about "*" while keeping the allowlist value, so wildcard usage is not actually shown.

Update example configurations to include wildcard conventional-title usage
examples/config.yaml[201-204]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

## Issue description
The example configuration mentions wildcard `&quot;*&quot;` in comments but does not actually show a usable `conventional-title: &quot;*&quot;` configuration value.

## Issue Context
Compliance requires example configs to demonstrate both wildcard usage and the existing explicit allowlist behavior.

## Fix Focus Areas
- examples/config.yaml[201-204]

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools


2. Wildcard config misparsed 🐞 Bug ✓ Correctness
Description
Wildcard mode only activates when the entire conventional-title string equals "*". If a user
includes "*" in a comma-separated list (consistent with the config’s stated format), the code treats
"*" as a literal type and will reject essentially all titles.
Code

webhook_server/libs/handlers/runner_handler.py[R459-467]

+        is_wildcard = self.github_webhook.conventional_title.strip() == "*"

-        self.logger.debug(f"{self.log_prefix} Conventional title check for title: {title}, allowed: {allowed_names}")
-        # Use generator expression instead of list comprehension inside any() for efficiency
-        if any(re.match(rf"^{re.escape(_name)}(\([^)]+\))?!?: .+", title) for _name in allowed_names):
+        if is_wildcard:
+            allowed_names: list[str] = []
+            title_valid = bool(re.match(r"^[\w-]+(\([^)]+\))?!?: .+", title))
+            self.logger.debug(f"{self.log_prefix} Conventional title check (wildcard) for title: {title}")
+        else:
+            allowed_names = [name.strip() for name in self.github_webhook.conventional_title.split(",") if name.strip()]
+            title_valid = any(re.match(rf"^{re.escape(_name)}(\([^)]+\))?!?: .+", title) for _name in allowed_names)
Evidence
The schema describes conventional-title as a comma-separated list and separately documents "*" as a
wildcard. The implementation checks only for an exact "*" string and otherwise splits on commas;
therefore a config like "*,feat" will not enable wildcard mode and will include "*" as a literal
allowed type, which won’t match real titles.

webhook_server/libs/handlers/runner_handler.py[457-468]
webhook_server/config/schema.yaml[357-375]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

### Issue description
Wildcard conventional-title validation is only enabled when the entire config string is exactly `&quot;*&quot;`. If users include `*` in a comma-separated list (e.g., `&quot;*,feat&quot;`), the implementation falls back to the non-wildcard path and treats `*` as a literal type, causing widespread false failures.

### Issue Context
The schema documents `conventional-title` as a comma-separated list and separately documents `&quot;*&quot;` as a wildcard. The implementation should robustly recognize wildcard even when the value is provided in list form.

### Fix Focus Areas
- webhook_server/libs/handlers/runner_handler.py[457-468]
- webhook_server/config/schema.yaml[357-375]

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools



Remediation recommended

3. Wildcard failure text inconsistent 🐞 Bug ✧ Quality
Description
When wildcard is configured, the failure output still claims the type must be one of the configured
types and suggests configuring additional types. This is misleading in wildcard mode and will
confuse users trying to fix titles.
Code

webhook_server/libs/handlers/runner_handler.py[R475-482]

+            if is_wildcard:
+                types_display = "any valid type (wildcard `*` configured)"
+            else:
+                types_display = ", ".join(f"`{t}`" for t in allowed_names)
+
            output["title"] = "❌ Conventional Title"
            output["summary"] = "Conventional Commit Format Violation"
            output["text"] = f"""## Conventional Commits Validation Failed
Evidence
The new wildcard path changes the “configured types” display to a wildcard message, but the same
failure template still contains rules implying an explicit allow-list. This contradicts the
documented wildcard behavior and the displayed types_display text.

webhook_server/libs/handlers/runner_handler.py[475-479]
webhook_server/libs/handlers/runner_handler.py[492-507]
webhook_server/config/schema.yaml[360-375]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

### Issue description
In wildcard mode (`conventional-title: &quot;*&quot;`), the failure message still tells users the type must be one of the configured types and suggests adding types to config. This conflicts with wildcard semantics and makes failures harder to understand.

### Issue Context
The PR added `types_display` for wildcard mode, but the rest of the templated guidance text wasn’t made conditional.

### Fix Focus Areas
- webhook_server/libs/handlers/runner_handler.py[475-510]

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools


4. Wildcard regex too permissive 🐞 Bug ✓ Correctness
Description
The wildcard regex uses \w which matches underscores and Unicode word characters; this can accept
type values that don’t match the project’s documented examples and are inconsistent with the
non-wildcard allow-list behavior.
Code

webhook_server/libs/handlers/runner_handler.py[R461-464]

+        if is_wildcard:
+            allowed_names: list[str] = []
+            title_valid = bool(re.match(r"^[\w-]+(\([^)]+\))?!?: .+", title))
+            self.logger.debug(f"{self.log_prefix} Conventional title check (wildcard) for title: {title}")
Evidence
In wildcard mode the type is validated by a generic regex that includes \w (Unicode + underscore),
while documentation/examples show types like feat and my-title (letters and hyphen). This makes
wildcard mode accept a broader set of type tokens than implied by the docs/examples.

webhook_server/libs/handlers/runner_handler.py[461-464]
webhook_server/config/schema.yaml[365-385]
examples/config.yaml[190-204]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

### Issue description
Wildcard validation uses `^[\w-]+...` where `\w` matches underscores and Unicode word chars. This is broader than the documented examples and may accept unintended type tokens.

### Issue Context
Non-wildcard validation is constrained by the configured allow-list; wildcard mode should still apply a clearly-defined type token policy.

### Fix Focus Areas
- webhook_server/libs/handlers/runner_handler.py[461-464]
- webhook_server/tests/test_runner_handler.py[650-697]

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools


Grey Divider

ⓘ The new review experience is currently in Beta. Learn more

Grey Divider

Qodo Logo

Copy link
Copy Markdown

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
webhook_server/libs/handlers/runner_handler.py (1)

475-514: ⚠️ Potential issue | 🟡 Minor

LOW: Failure guidance is inconsistent in wildcard mode.

When wildcard is configured, the message still says “Type must be one of the configured types” (Line 503), which is inaccurate and user-confusing.

Suggested fix
         else:
             if is_wildcard:
                 types_display = "any valid type (wildcard `*` configured)"
+                type_rule = "Type can be any valid token (wildcard `*` configured)"
             else:
                 types_display = ", ".join(f"`{t}`" for t in allowed_names)
+                type_rule = "Type must be one of the configured types"

             output["title"] = "❌ Conventional Title"
             output["summary"] = "Conventional Commit Format Violation"
             output["text"] = f"""## Conventional Commits Validation Failed
@@
 **Format rules:**
-- Type must be one of the configured types
+- {type_rule}
 - Optional scope in parentheses: `(scope)`
 - Optional breaking change indicator: `!`
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@webhook_server/libs/handlers/runner_handler.py` around lines 475 - 514, The
failure guidance text incorrectly states "Type must be one of the configured
types" even when is_wildcard is true; update the assembly of output["text"] in
runner_handler.py (the block that constructs types_display and the message) to
conditionally change that rule sentence based on is_wildcard: when is_wildcard
use wording like "Type may be any valid type (wildcard `*` configured)" and when
not use the existing "Type must be one of the configured types"; ensure the
change references the is_wildcard flag and the types_display variable so the
rest of the message stays the same.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@webhook_server/libs/handlers/pull_request_handler.py`:
- Around line 509-516: The merge requirement text uses the literal "conflict"
instead of the canonical conflicts label name; update the blockers construction
in pull_request_handler.py so it appends the same label identifier used
elsewhere (e.g., HAS_CONFLICTS_LABEL_STR or the existing constant that
represents "has-conflicts") instead of the hardcoded "conflict", and ensure the
requirements.append call (the line building "**No Blockers**: No {',
'.join(blockers)} labels") reflects that constant so wording matches the rest of
the codebase (refer to blockers list, WIP_STR, HOLD_LABEL_STR, and the
requirements.append call).

In `@webhook_server/tests/test_runner_handler.py`:
- Around line 650-697: The parametrize decorator on
test_conventional_title_wildcard should use a tuple of parameter names instead
of a single string and avoid literal booleans in the param values: change the
decorator first argument to ("title", "should_pass", "reason") and replace the
True/False literals in the data rows with a non-boolean flag (e.g. "pass"/"fail"
or pytest.param with a marker), then update the test signature/consumers of
should_pass (in test_conventional_title_wildcard) to treat should_pass as that
flag (string or enum) and branch on its value instead of relying on boolean
truthiness so it satisfies PT006 and FBT001.

---

Outside diff comments:
In `@webhook_server/libs/handlers/runner_handler.py`:
- Around line 475-514: The failure guidance text incorrectly states "Type must
be one of the configured types" even when is_wildcard is true; update the
assembly of output["text"] in runner_handler.py (the block that constructs
types_display and the message) to conditionally change that rule sentence based
on is_wildcard: when is_wildcard use wording like "Type may be any valid type
(wildcard `*` configured)" and when not use the existing "Type must be one of
the configured types"; ensure the change references the is_wildcard flag and the
types_display variable so the rest of the message stays the same.

ℹ️ Review info

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between f895f6c and 488e651.

📒 Files selected for processing (6)
  • examples/config.yaml
  • webhook_server/config/schema.yaml
  • webhook_server/libs/handlers/pull_request_handler.py
  • webhook_server/libs/handlers/runner_handler.py
  • webhook_server/tests/test_pull_request_handler.py
  • webhook_server/tests/test_runner_handler.py

Comment thread webhook_server/libs/handlers/pull_request_handler.py Outdated
Comment thread webhook_server/tests/test_runner_handler.py
Comment thread examples/config.yaml
Comment thread webhook_server/libs/handlers/runner_handler.py
Comment thread webhook_server/libs/handlers/pull_request_handler.py Outdated
coderabbitai[bot]
coderabbitai Bot previously approved these changes Mar 3, 2026
Copy link
Copy Markdown

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@webhook_server/libs/handlers/pull_request_handler.py`:
- Around line 509-516: The "No Blockers" requirement text is misleading because
it only lists label-based blockers (blockers list built via
labels_handler.is_label_enabled and HAS_CONFLICTS_LABEL_STR) while actual
mergeability also depends on pull_request.mergeable; update the
requirements.append call that builds the "**No Blockers**" message to mention
both label-based blockers and that mergeability (pull_request.mergeable) is
required — e.g., enumerate dynamic blocker labels as before and add an explicit
phrase like "and must be mergeable (no conflicts)" or similar so the UI reflects
both label and mergeability checks.

ℹ️ Review info

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 488e651 and bbc903a.

📒 Files selected for processing (6)
  • examples/config.yaml
  • webhook_server/config/schema.yaml
  • webhook_server/libs/handlers/pull_request_handler.py
  • webhook_server/libs/handlers/runner_handler.py
  • webhook_server/tests/test_pull_request_handler.py
  • webhook_server/tests/test_runner_handler.py

Comment thread webhook_server/libs/handlers/pull_request_handler.py Outdated
coderabbitai[bot]
coderabbitai Bot previously approved these changes Mar 3, 2026
- Support '*' wildcard for conventional-title to accept any type while
  enforcing the Conventional Commits format
- Make merge requirements in welcome comment conditional:
  - LGTM count shown only when minimum_lgtm > 0
  - Verified shown only when verified_job is enabled
  - Numbering adjusts dynamically
- Use constants (WIP_STR, HOLD_LABEL_STR, HAS_CONFLICTS_LABEL_STR) in
  merge requirements instead of hardcoded strings
- Conditional failure message in wildcard mode

Closes #1013
@myakove myakove force-pushed the feat/issue-1013-wildcard-conventional-title branch from bbc903a to c1fd5bd Compare March 3, 2026 11:31
@myakove myakove merged commit c84aac7 into main Mar 3, 2026
7 of 9 checks passed
@myakove myakove deleted the feat/issue-1013-wildcard-conventional-title branch March 3, 2026 11:35
@myakove-bot
Copy link
Copy Markdown
Collaborator

New container for ghcr.io/myk-org/github-webhook-server:latest published

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

feat: support wildcard conventional-title to accept any commit type

2 participants