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
2 changes: 0 additions & 2 deletions src/sentry/features/temporary.py
Original file line number Diff line number Diff line change
Expand Up @@ -190,8 +190,6 @@ def register_temporary_features(manager: FeatureManager) -> None:
manager.add("organizations:performance-web-vitals-seer-suggestions", OrganizationFeature, FeatureHandlerStrategy.FLAGPOLE, api_expose=True)
# Enable the warning banner to inform users of pending deprecation of the transactions dataset
manager.add("organizations:performance-transaction-deprecation-banner", OrganizationFeature, FeatureHandlerStrategy.FLAGPOLE, api_expose=True)
# Emit group activity when a linked pull request is closed
manager.add("organizations:pr-group-activity", OrganizationFeature, FeatureHandlerStrategy.FLAGPOLE, api_expose=True)
# Write PullRequestActivity rows from GitHub PR lifecycle webhooks
manager.add("organizations:pr-metrics-activity", OrganizationFeature, FeatureHandlerStrategy.FLAGPOLE, api_expose=False)
# Record PullRequestAttribution from webhook and seer.pr_created events
Expand Down
10 changes: 1 addition & 9 deletions src/sentry/receivers/releases.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
from django.db.models import F
from django.db.models.signals import post_save, pre_save

from sentry import analytics, features
from sentry import analytics
from sentry.db.postgres.transactions import in_test_hide_transaction_boundary
from sentry.integrations.analytics import IntegrationResolveCommitEvent, IntegrationResolvePREvent
from sentry.issues.action_log import (
Expand All @@ -26,7 +26,6 @@
)
from sentry.models.grouplink import GroupLink
from sentry.models.groupsubscription import GroupSubscription
from sentry.models.organization import Organization
from sentry.models.organizationmember import OrganizationMember
from sentry.models.project import Project
from sentry.models.pullrequest import PullRequest, PullRequestLifecycleState
Expand Down Expand Up @@ -281,13 +280,6 @@ def pull_request_closing(instance: PullRequest, **kwargs: object) -> None:
if instance.state != PullRequestLifecycleState.CLOSED:
return

try:
organization = Organization.objects.get_from_cache(id=instance.organization_id)
except Organization.DoesNotExist:
return
if not features.has("organizations:pr-group-activity", organization):
return

if instance.pk is not None:
old = PullRequest.objects.filter(pk=instance.pk).first()
if old is None or old.state == PullRequestLifecycleState.CLOSED:
Expand Down
21 changes: 6 additions & 15 deletions tests/sentry/receivers/test_releases.py
Original file line number Diff line number Diff line change
Expand Up @@ -425,9 +425,8 @@ def _save_with_state(self, state: str) -> None:
self.pull_request.state = state
self.pull_request.save()

def test_closed_emits_activity_when_flag_enabled(self) -> None:
with self.feature("organizations:pr-group-activity"):
self._save_with_state(PullRequestLifecycleState.CLOSED)
def test_closed_emits_activity(self) -> None:
self._save_with_state(PullRequestLifecycleState.CLOSED)

activity = Activity.objects.get(
group=self.group, type=ActivityType.PULL_REQUEST_CLOSED.value
Expand All @@ -436,25 +435,17 @@ def test_closed_emits_activity_when_flag_enabled(self) -> None:
assert activity.data == {"pull_request": self.pull_request.id}

def test_merged_does_not_emit_activity(self) -> None:
with self.feature("organizations:pr-group-activity"):
self._save_with_state(PullRequestLifecycleState.MERGED)
self._save_with_state(PullRequestLifecycleState.MERGED)

assert not Activity.objects.filter(type=ActivityType.PULL_REQUEST_CLOSED.value).exists()

def test_open_does_not_emit_activity(self) -> None:
with self.feature("organizations:pr-group-activity"):
self._save_with_state(PullRequestLifecycleState.OPEN)

assert not Activity.objects.filter(type=ActivityType.PULL_REQUEST_CLOSED.value).exists()

def test_closed_skips_activity_when_flag_disabled(self) -> None:
self._save_with_state(PullRequestLifecycleState.CLOSED)
self._save_with_state(PullRequestLifecycleState.OPEN)

assert not Activity.objects.filter(type=ActivityType.PULL_REQUEST_CLOSED.value).exists()

def test_resaving_closed_pr_does_not_duplicate(self) -> None:
with self.feature("organizations:pr-group-activity"):
self._save_with_state(PullRequestLifecycleState.CLOSED)
self._save_with_state(PullRequestLifecycleState.CLOSED)
self._save_with_state(PullRequestLifecycleState.CLOSED)
self._save_with_state(PullRequestLifecycleState.CLOSED)

assert Activity.objects.filter(type=ActivityType.PULL_REQUEST_CLOSED.value).count() == 1
Loading