Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 9 additions & 1 deletion services/webhook/check_suite_handler.py
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,7 @@
)
from services.webhook.utils.create_system_message import create_system_message
from services.webhook.utils.should_bail import should_bail
from utils.files.get_impl_file_from_pr_title import get_impl_file_from_pr_title
from utils.logging.add_log_message import add_log_message
from utils.logging.logging_config import logger, set_pr_number, set_trigger
from utils.logs.clean_logs import clean_logs
Expand Down Expand Up @@ -576,6 +577,13 @@ async def handle_check_suite(
owner_id=owner_id, repo_id=repo_id, pr_number=pr_number, pairs=existing_pairs
)

# Build allowed_to_edit_files from PR changed files, validation errors, and impl file
allowed_to_edit_files = set(validation_result.files_with_errors)
for file_change in changed_files:
allowed_to_edit_files.add(file_change["filename"])
impl_file_path = get_impl_file_from_pr_title(pr_title)
allowed_to_edit_files.add(impl_file_path)

p += 5
add_log_message("Checked out the error log from the workflow run.", log_messages)
comment_body = create_progress_bar(p=p, msg="\n".join(log_messages))
Expand Down Expand Up @@ -666,7 +674,7 @@ async def handle_check_suite(
log_messages=log_messages,
usage_id=usage_id,
tools=TOOLS_FOR_PRS,
allowed_to_edit_files=set(),
allowed_to_edit_files=allowed_to_edit_files,
model_id=None,
)
messages = result.messages
Expand Down
7 changes: 6 additions & 1 deletion services/webhook/review_run_handler.py
Original file line number Diff line number Diff line change
Expand Up @@ -251,6 +251,11 @@ async def handle_review_run(
logger.warning("Remaining errors:\n%s", pre_existing_errors)
fixes_applied = validation_result.fixes_applied

# Build allowed_to_edit_files from PR changed files and validation errors
allowed_to_edit_files = set(validation_result.files_with_errors)
for file_change in pr_files:
allowed_to_edit_files.add(file_change["filename"])

# Get repository settings
repo_settings = get_repository(owner_id=owner_id, repo_id=repo_id)

Expand Down Expand Up @@ -316,7 +321,7 @@ async def handle_review_run(
log_messages=log_messages,
usage_id=usage_id,
tools=TOOLS_FOR_PRS,
allowed_to_edit_files=set(),
allowed_to_edit_files=allowed_to_edit_files,
model_id=None,
)
messages = result.messages
Expand Down
30 changes: 15 additions & 15 deletions services/webhook/test_check_suite_handler.py
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,7 @@ def mock_check_run_payload(test_owner, test_repo):
def mock_pr_data():
"""Fixture providing mock PR data."""
return {
"title": "Test PR",
"title": "Low Test Coverage: src/main.py",
"body": "Test PR description",
"user": {"login": "test-user"},
"base": {"ref": "main"},
Expand Down Expand Up @@ -140,7 +140,7 @@ async def test_handle_check_suite_skips_when_trigger_disabled(
}
]
mock_get_pr.return_value = {
"title": "Test PR",
"title": "Low Test Coverage: src/main.py",
"body": "Test PR description",
"user": {"login": "test-user"},
"base": {"ref": "main"},
Expand Down Expand Up @@ -195,7 +195,7 @@ async def test_handle_check_suite_skips_when_comment_exists(
}
]
mock_get_pr.return_value = {
"title": "Test PR",
"title": "Low Test Coverage: src/main.py",
"body": "Test PR description",
"user": {"login": "test-user"},
"base": {"ref": "main"},
Expand Down Expand Up @@ -288,7 +288,7 @@ async def test_handle_check_suite_race_condition_prevention(
mock_create_user_request.return_value = 12345
mock_cancel_workflows.return_value = None
mock_get_pr.return_value = {
"title": "Test PR",
"title": "Low Test Coverage: src/main.py",
"body": "Test PR description",
"user": {"login": "test-user"},
"base": {"ref": "main"},
Expand Down Expand Up @@ -402,7 +402,7 @@ async def test_handle_check_suite_full_workflow(
mock_create_comment.return_value = "http://comment-url"
mock_create_user_request.return_value = "usage-id-123"
mock_get_pr.return_value = {
"title": "Test PR",
"title": "Low Test Coverage: src/main.py",
"body": "Test PR description",
"user": {"login": "test-user"},
"base": {"ref": "main"},
Expand Down Expand Up @@ -521,7 +521,7 @@ async def test_handle_check_suite_with_404_logs(
mock_create_comment.return_value = "http://comment-url"
mock_create_user_request.return_value = "usage-id-123"
mock_get_pr.return_value = {
"title": "Test PR",
"title": "Low Test Coverage: src/main.py",
"body": "Test PR description",
"user": {"login": "test-user"},
"base": {"ref": "main"},
Expand Down Expand Up @@ -611,7 +611,7 @@ async def test_handle_check_suite_with_none_logs(
mock_create_comment.return_value = "http://comment-url"
mock_create_user_request.return_value = "usage-id-123"
mock_get_pr.return_value = {
"title": "Test PR",
"title": "Low Test Coverage: src/main.py",
"body": "Test PR description",
"user": {"login": "test-user"},
"base": {"ref": "main"},
Expand Down Expand Up @@ -705,7 +705,7 @@ async def test_handle_check_suite_with_existing_retry_pair(
mock_create_comment.return_value = "http://comment-url"
mock_create_user_request.return_value = "usage-id-123"
mock_get_pr.return_value = {
"title": "Test PR",
"title": "Low Test Coverage: src/main.py",
"body": "Test PR description",
"user": {"login": "test-user"},
"base": {"ref": "main"},
Expand Down Expand Up @@ -815,7 +815,7 @@ async def test_handle_check_suite_with_closed_pr(
mock_create_comment.return_value = "http://comment-url"
mock_create_user_request.return_value = "usage-id-123"
mock_get_pr.return_value = {
"title": "Test PR",
"title": "Low Test Coverage: src/main.py",
"body": "Test PR description",
"user": {"login": "test-user"},
"base": {"ref": "main"},
Expand Down Expand Up @@ -913,7 +913,7 @@ async def test_handle_check_suite_with_deleted_branch(
mock_create_comment.return_value = "http://comment-url"
mock_create_user_request.return_value = "usage-id-123"
mock_get_pr.return_value = {
"title": "Test PR",
"title": "Low Test Coverage: src/main.py",
"body": "Test PR description",
"user": {"login": "test-user"},
"base": {"ref": "main"},
Expand Down Expand Up @@ -1013,7 +1013,7 @@ async def test_check_run_handler_token_accumulation(
mock_create_comment.return_value = "http://comment-url"
mock_create_user_request.return_value = 888
mock_get_pr.return_value = {
"title": "Test PR",
"title": "Low Test Coverage: src/main.py",
"body": "Test PR description",
"user": {"login": "test-user"},
"base": {"ref": "main"},
Expand Down Expand Up @@ -1134,7 +1134,7 @@ async def test_handle_check_suite_skips_duplicate_older_request(
mock_slack_notify.return_value = "thread-123"
mock_create_user_request.return_value = 999
mock_get_pr.return_value = {
"title": "Test PR",
"title": "Low Test Coverage: src/main.py",
"body": "Test PR description",
"user": {"login": "test-user"},
"base": {"ref": "main"},
Expand Down Expand Up @@ -1257,7 +1257,7 @@ async def test_handle_check_suite_codecov_failure(
mock_create_comment.return_value = "http://comment-url"
mock_create_user_request.return_value = "usage-id-123"
mock_get_pr.return_value = {
"title": "Test PR",
"title": "Low Test Coverage: src/main.py",
"body": "Test PR description",
"user": {"login": "test-user"},
"base": {"ref": "main"},
Expand Down Expand Up @@ -1385,7 +1385,7 @@ async def test_handle_check_suite_codecov_no_token(
mock_create_comment.return_value = "http://comment-url"
mock_create_user_request.return_value = "usage-id-123"
mock_get_pr.return_value = {
"title": "Test PR",
"title": "Low Test Coverage: src/main.py",
"body": "Test PR description",
"user": {"login": "test-user"},
"base": {"ref": "main"},
Expand Down Expand Up @@ -1496,7 +1496,7 @@ async def test_handle_check_suite_max_iterations_forces_verification(
mock_create_comment.return_value = "http://comment-url"
mock_create_user_request.return_value = "usage-id-123"
mock_get_pr.return_value = {
"title": "Test PR",
"title": "Low Test Coverage: src/main.py",
"body": "Test PR description",
"user": {"login": "test-user"},
"base": {"ref": "main"},
Expand Down
Loading