Skip to content

Commit 5336d37

Browse files
authored
ref(seer onboarding): remove on_command_phrase CR trigger from repo settings and org options (#105978)
relates to ENG-6194 depends on codecov/overwatch#622 (deployed) depends on #105696 (frontend counterpart so we don't fail serializer validation; deployed) followup: #105980 `on_command_phrase` is no longer being checked in Overwatch or in `issue_comment.py` when running code review. Let's remove it from `RepositorySettings` (migration) and from the `CodeReviewTrigger` enum. Note: I'm not going to manually add it to `overwatch_rpc.py` since Overwatch isn't checking this trigger anymore and is in the process of being migrated to Sentry.
1 parent 0c7eb16 commit 5336d37

File tree

16 files changed

+166
-43
lines changed

16 files changed

+166
-43
lines changed

migrations_lockfile.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ releases: 0004_cleanup_failed_safe_deletes
3131

3232
replays: 0007_organizationmember_replay_access
3333

34-
sentry: 1015_backfill_self_hosted_sentry_app_emails
34+
sentry: 1016_remove_on_command_phrase_trigger
3535

3636
social_auth: 0003_social_auth_json_field
3737

src/sentry/apidocs/examples/organization_examples.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -297,7 +297,6 @@ class OrganizationExamples:
297297
"defaultAutofixAutomationTuning": AutofixAutomationTuningSettings.OFF,
298298
"autoEnableCodeReview": True,
299299
"defaultCodeReviewTriggers": [
300-
"on_command_phrase",
301300
"on_ready_for_review",
302301
"on_new_commit",
303302
],

src/sentry/constants.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -725,7 +725,6 @@ class InsightModules(Enum):
725725
AUTO_ENABLE_CODE_REVIEW = False
726726
# Seer Org level default for code review triggers
727727
DEFAULT_CODE_REVIEW_TRIGGERS: list[str] = [
728-
"on_command_phrase",
729728
"on_ready_for_review",
730729
"on_new_commit",
731730
]

src/sentry/core/endpoints/organization_details.py

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -369,9 +369,7 @@ class OrganizationSerializer(BaseOrganizationSerializer):
369369
autoOpenPrs = serializers.BooleanField(required=False)
370370
autoEnableCodeReview = serializers.BooleanField(required=False)
371371
defaultCodeReviewTriggers = serializers.ListField(
372-
child=serializers.ChoiceField(
373-
choices=["on_command_phrase", "on_ready_for_review", "on_new_commit"]
374-
),
372+
child=serializers.ChoiceField(choices=["on_ready_for_review", "on_new_commit"]),
375373
required=False,
376374
allow_empty=True,
377375
help_text="The default code review triggers for new repositories.",
Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
# Generated by Django 5.2.8 on 2026-01-08 18:18
2+
3+
import django.contrib.postgres.fields
4+
from django.db import migrations, models
5+
from django.db.backends.base.schema import BaseDatabaseSchemaEditor
6+
from django.db.migrations.state import StateApps
7+
8+
from sentry.new_migrations.migrations import CheckedMigration
9+
10+
11+
def remove_on_command_phrase_from_repository_settings(
12+
apps: StateApps, schema_editor: BaseDatabaseSchemaEditor
13+
) -> None:
14+
"""Remove 'on_command_phrase' from RepositorySettings.code_review_triggers."""
15+
RepositorySettings = apps.get_model("sentry", "RepositorySettings")
16+
17+
all_settings = list(RepositorySettings.objects.all())
18+
19+
updated_settings = []
20+
for settings in all_settings:
21+
if (
22+
settings.code_review_triggers
23+
and isinstance(settings.code_review_triggers, list)
24+
and "on_command_phrase" in settings.code_review_triggers
25+
):
26+
settings.code_review_triggers = [
27+
trigger
28+
for trigger in settings.code_review_triggers
29+
if trigger != "on_command_phrase"
30+
]
31+
updated_settings.append(settings)
32+
33+
if updated_settings:
34+
RepositorySettings.objects.bulk_update(updated_settings, fields=["code_review_triggers"])
35+
36+
37+
class Migration(CheckedMigration):
38+
# This flag is used to mark that a migration shouldn't be automatically run in production.
39+
# This should only be used for operations where it's safe to run the migration after your
40+
# code has deployed. So this should not be used for most operations that alter the schema
41+
# of a table.
42+
# Here are some things that make sense to mark as post deployment:
43+
# - Large data migrations. Typically we want these to be run manually so that they can be
44+
# monitored and not block the deploy for a long period of time while they run.
45+
# - Adding indexes to large tables. Since this can take a long time, we'd generally prefer to
46+
# run this outside deployments so that we don't block them. Note that while adding an index
47+
# is a schema change, it's completely safe to run the operation after the code has deployed.
48+
# Once deployed, run these manually via: https://develop.sentry.dev/database-migrations/#migration-deployment
49+
50+
is_post_deployment = False
51+
52+
dependencies = [
53+
("sentry", "1015_backfill_self_hosted_sentry_app_emails"),
54+
]
55+
56+
operations = [
57+
migrations.RunPython(
58+
remove_on_command_phrase_from_repository_settings,
59+
reverse_code=migrations.RunPython.noop,
60+
hints={"tables": ["sentry_repositorysettings"]},
61+
),
62+
migrations.AlterField(
63+
model_name="repositorysettings",
64+
name="code_review_triggers",
65+
field=django.contrib.postgres.fields.ArrayField(
66+
base_field=models.CharField(
67+
choices=[
68+
("on_new_commit", "on_new_commit"),
69+
("on_ready_for_review", "on_ready_for_review"),
70+
],
71+
max_length=32,
72+
),
73+
default=list,
74+
),
75+
),
76+
]

src/sentry/models/repositorysettings.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@
1111

1212

1313
class CodeReviewTrigger(StrEnum):
14-
ON_COMMAND_PHRASE = "on_command_phrase"
1514
ON_NEW_COMMIT = "on_new_commit"
1615
ON_READY_FOR_REVIEW = "on_ready_for_review"
1716

src/sentry/seer/code_review/utils.py

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@
1111
from sentry.integrations.services.integration.model import RpcIntegration
1212
from sentry.models.organization import Organization
1313
from sentry.models.repository import Repository
14-
from sentry.models.repositorysettings import CodeReviewTrigger
1514
from sentry.net.http import connection_from_url
1615
from sentry.seer.signed_seer_api import make_signed_seer_api_request
1716

@@ -27,6 +26,19 @@ class ClientError(Exception):
2726
pass
2827

2928

29+
class SeerCodeReviewTrigger(StrEnum):
30+
"""
31+
Internal code review trigger type used for Seer flows.
32+
33+
This includes all user-configurable CodeReviewTrigger values, plus on_command_phrase,
34+
which is always enabled and cannot be turned off by users.
35+
"""
36+
37+
ON_COMMAND_PHRASE = "on_command_phrase"
38+
ON_NEW_COMMIT = "on_new_commit"
39+
ON_READY_FOR_REVIEW = "on_ready_for_review"
40+
41+
3042
# These values need to match the value defined in the Seer API.
3143
class SeerEndpoint(StrEnum):
3244
# https://github.com/getsentry/seer/blob/main/src/seer/routes/automation_request.py#L57
@@ -194,7 +206,7 @@ def transform_webhook_to_codegen_request(
194206
organization: Organization,
195207
repo: Repository,
196208
target_commit_sha: str,
197-
trigger: CodeReviewTrigger,
209+
trigger: SeerCodeReviewTrigger,
198210
) -> dict[str, Any] | None:
199211
"""
200212
Transform a GitHub webhook payload into CodecovTaskRequest format for Seer.

src/sentry/seer/code_review/webhooks/issue_comment.py

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@
1414
from sentry.integrations.services.integration import RpcIntegration
1515
from sentry.models.organization import Organization
1616
from sentry.models.repository import Repository
17-
from sentry.models.repositorysettings import CodeReviewTrigger
1817

1918
from ..metrics import (
2019
CodeReviewErrorType,
@@ -24,7 +23,7 @@
2423
record_webhook_handler_error,
2524
record_webhook_received,
2625
)
27-
from ..utils import _get_target_commit_sha
26+
from ..utils import SeerCodeReviewTrigger, _get_target_commit_sha
2827
from .config import get_direct_to_seer_gh_orgs
2928

3029
logger = logging.getLogger(__name__)
@@ -153,6 +152,6 @@ def handle_issue_comment_event(
153152
organization=organization,
154153
repo=repo,
155154
target_commit_sha=target_commit_sha,
156-
trigger=CodeReviewTrigger.ON_COMMAND_PHRASE,
155+
trigger=SeerCodeReviewTrigger.ON_COMMAND_PHRASE,
157156
)
158157
record_webhook_enqueued(github_event, github_event_action)

src/sentry/seer/code_review/webhooks/pull_request.py

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@
1414
from sentry.integrations.services.integration import RpcIntegration
1515
from sentry.models.organization import Organization
1616
from sentry.models.repository import Repository
17-
from sentry.models.repositorysettings import CodeReviewTrigger
1817

1918
from ..metrics import (
2019
CodeReviewErrorType,
@@ -24,7 +23,7 @@
2423
record_webhook_handler_error,
2524
record_webhook_received,
2625
)
27-
from ..utils import _get_target_commit_sha
26+
from ..utils import SeerCodeReviewTrigger, _get_target_commit_sha
2827
from .config import get_direct_to_seer_gh_orgs
2928

3029
logger = logging.getLogger(__name__)
@@ -74,12 +73,12 @@ class PullRequestAction(enum.StrEnum):
7473
}
7574

7675

77-
def _get_trigger_for_action(action: PullRequestAction) -> CodeReviewTrigger:
76+
def _get_trigger_for_action(action: PullRequestAction) -> SeerCodeReviewTrigger:
7877
match action:
7978
case PullRequestAction.OPENED | PullRequestAction.READY_FOR_REVIEW:
80-
return CodeReviewTrigger.ON_READY_FOR_REVIEW
79+
return SeerCodeReviewTrigger.ON_READY_FOR_REVIEW
8180
case PullRequestAction.SYNCHRONIZE:
82-
return CodeReviewTrigger.ON_NEW_COMMIT
81+
return SeerCodeReviewTrigger.ON_NEW_COMMIT
8382
case _:
8483
raise ValueError(f"Unsupported pull request action: {action}")
8584

src/sentry/seer/code_review/webhooks/task.py

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@
1111
from sentry.integrations.github.webhook_types import GithubWebhookType
1212
from sentry.models.organization import Organization
1313
from sentry.models.repository import Repository
14-
from sentry.models.repositorysettings import CodeReviewTrigger
1514
from sentry.seer.code_review.utils import (
1615
get_webhook_option_key,
1716
transform_webhook_to_codegen_request,
@@ -24,7 +23,7 @@
2423
from sentry.utils import metrics
2524

2625
from ..metrics import WebhookFilteredReason, record_webhook_filtered
27-
from ..utils import get_seer_endpoint_for_event, make_seer_request
26+
from ..utils import SeerCodeReviewTrigger, get_seer_endpoint_for_event, make_seer_request
2827
from .config import get_direct_to_seer_gh_orgs
2928

3029
logger = logging.getLogger(__name__)
@@ -44,7 +43,7 @@ def schedule_task(
4443
organization: Organization,
4544
repo: Repository,
4645
target_commit_sha: str,
47-
trigger: CodeReviewTrigger,
46+
trigger: SeerCodeReviewTrigger,
4847
) -> None:
4948
"""Transform and forward a webhook event to Seer for processing."""
5049
from .task import process_github_webhook_event

0 commit comments

Comments
 (0)