Skip to content

Commit 2d1494a

Browse files
armenzgandrewshie-sentry
authored andcommitted
chore(releases): Remove feature flag (#80728)
It removes the feature flag from #80655. We GAed on Monday.
1 parent ef3ba6e commit 2d1494a

File tree

4 files changed

+18
-111
lines changed

4 files changed

+18
-111
lines changed

Diff for: src/sentry/api/helpers/group_index/update.py

+5-31
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,6 @@
3737
from sentry.models.grouphistory import record_group_history_from_activity_type
3838
from sentry.models.groupinbox import GroupInboxRemoveAction, remove_group_from_inbox
3939
from sentry.models.grouplink import GroupLink
40-
from sentry.models.grouprelease import GroupRelease
4140
from sentry.models.groupresolution import GroupResolution
4241
from sentry.models.groupseen import GroupSeen
4342
from sentry.models.groupshare import GroupShare
@@ -136,24 +135,7 @@ def get_current_release_version_of_group(group: Group, follows_semver: bool = Fa
136135
"""
137136
current_release_version = None
138137
if follows_semver:
139-
if not features.has(
140-
"organizations:releases-resolve-next-release-semver-fix", group.project.organization
141-
):
142-
try:
143-
# This sets current_release_version to the latest semver version associated with a group
144-
associated_release_id = GroupRelease.objects.filter(
145-
project_id=group.project.id, group_id=group.id
146-
).values_list("release_id")
147-
current_release_version = (
148-
get_semver_releases(group.project)
149-
.filter(id__in=associated_release_id)
150-
.values_list("version", flat=True)[:1]
151-
.get()
152-
)
153-
except Release.DoesNotExist:
154-
pass
155-
else:
156-
current_release_version = greatest_semver_release(group.project).version
138+
current_release_version = greatest_semver_release(group.project).version
157139

158140
else:
159141
# This sets current_release_version to the most recent release associated with a group
@@ -839,18 +821,10 @@ def prepare_response(
839821

840822

841823
def get_release_to_resolve_by(project: Project) -> Release | None:
842-
# XXX: Remove block once released
843-
follows_semver = False
844-
if features.has("organizations:releases-resolve-next-release-semver-fix", project.organization):
845-
follows_semver = follows_semver_versioning_scheme(
846-
org_id=project.organization_id, project_id=project.id
847-
)
848-
849-
if follows_semver:
850-
release = greatest_semver_release(project)
851-
else:
852-
release = most_recent_release(project)
853-
return release
824+
follows_semver = follows_semver_versioning_scheme(
825+
org_id=project.organization_id, project_id=project.id
826+
)
827+
return greatest_semver_release(project) if follows_semver else most_recent_release(project)
854828

855829

856830
def most_recent_release(project: Project) -> Release | None:

Diff for: src/sentry/features/temporary.py

-2
Original file line numberDiff line numberDiff line change
@@ -354,8 +354,6 @@ def register_temporary_features(manager: FeatureManager):
354354
manager.add("organizations:relay-cardinality-limiter", OrganizationFeature, FeatureHandlerStrategy.INTERNAL, api_expose=False)
355355
# Enable the release details performance section
356356
manager.add("organizations:release-comparison-performance", OrganizationFeature, FeatureHandlerStrategy.FLAGPOLE, api_expose=True)
357-
# Fixes the next release resolution for semver releases
358-
manager.add("organizations:releases-resolve-next-release-semver-fix", OrganizationFeature, FeatureHandlerStrategy.FLAGPOLE, api_expose=True)
359357
# enable new release set_commits functionality
360358
manager.add("organizations:set-commits-updated", OrganizationFeature, FeatureHandlerStrategy.FLAGPOLE, api_expose=False)
361359
# Enable new release UI

Diff for: tests/sentry/issues/endpoints/test_group_details.py

+2-68
Original file line numberDiff line numberDiff line change
@@ -355,53 +355,6 @@ def test_resolved_in_next_release_non_semver(self):
355355
assert group_resolution.status == GroupResolution.Status.pending
356356
assert group_resolution.release.version == most_recent_version.version
357357

358-
# XXX: Remove this test once the feature flag is removed
359-
def test_resolved_in_next_release_semver_no_flag_and_first_release(self):
360-
self.login_as(user=self.user)
361-
project = self.create_project_with_releases()
362-
first_release = Release.get_or_create(version="com.foo.bar@1.0+0", project=project)
363-
Release.get_or_create(version="com.foo.bar@2.0+0", project=project)
364-
wrong_release = Release.get_or_create(version="com.foo.bar@1.0+1", project=project)
365-
# Using store_event() instead of create_group() produces GroupRelease objects
366-
# which is considered during the update_groups() call
367-
event = self.store_event(data={"release": first_release.version}, project_id=project.id)
368-
group = event.group
369-
assert group is not None
370-
assert group.status == GroupStatus.UNRESOLVED
371-
assert group.substatus == GroupSubStatus.NEW
372-
assert group.first_release == first_release
373-
assert GroupResolution.objects.all().count() == 0
374-
375-
url = f"/api/0/issues/{group.id}/"
376-
data = {"status": "resolvedInNextRelease"}
377-
response = self.client.put(url, data=data)
378-
assert response.status_code == 200, response.content == {}
379-
380-
# Refetch from DB to ensure the latest state is fetched
381-
group = Group.objects.get(id=group.id, project=project.id)
382-
assert group.status == GroupStatus.RESOLVED
383-
384-
group_resolution = GroupResolution.objects.filter(group=group).first()
385-
assert group_resolution is not None
386-
assert group_resolution.group == group
387-
# For semver projects, we consider resolution based on an expression rather than a specific release,
388-
# thus, it is considered resolved in the release that has the highest semver
389-
assert group_resolution.type == GroupResolution.Type.in_release
390-
assert group_resolution.status == GroupResolution.Status.resolved
391-
assert group_resolution.release.version == wrong_release.version
392-
assert response.data["statusDetails"]["inRelease"] == wrong_release.version
393-
394-
# Let's test that it does not regress to the first release
395-
event = self.store_event(data={"release": first_release.version}, project_id=project.id)
396-
group = Group.objects.get(id=group.id, project=project.id)
397-
assert group.status == GroupStatus.RESOLVED
398-
399-
# Let's test that it does regress - this is fixed with the feature flag
400-
event = self.store_event(data={"release": wrong_release.version}, project_id=project.id)
401-
group = Group.objects.get(id=group.id, project=project.id)
402-
assert group.status == GroupStatus.UNRESOLVED
403-
assert group.substatus == GroupSubStatus.REGRESSED
404-
405358
def create_project_with_releases(self) -> Project:
406359
project = self.create_project()
407360
project.flags.has_releases = True
@@ -482,12 +435,10 @@ def resolved_in_next_release_helper(self, with_first_release: bool = True) -> No
482435
assert group.status == GroupStatus.UNRESOLVED
483436
assert group.substatus == GroupSubStatus.REGRESSED
484437

485-
@with_feature("organizations:releases-resolve-next-release-semver-fix")
486-
def test_resolved_in_next_release_semver_with_flag_no_first_release(self):
438+
def test_resolved_in_next_release_semver_no_first_release(self):
487439
self.resolved_in_next_release_helper(with_first_release=False)
488440

489-
@with_feature("organizations:releases-resolve-next-release-semver-fix")
490-
def test_resolved_in_next_release_semver_with_flag_and_first_release(self):
441+
def test_resolved_in_next_release_semver_and_first_release(self):
491442
self.resolved_in_next_release_helper(with_first_release=True)
492443

493444
def test_resolved_in_next_release_no_release(self):
@@ -499,23 +450,6 @@ def test_resolved_in_next_release_no_release(self):
499450
response = self.client.put(url, data={"status": "resolvedInNextRelease"})
500451
assert response.status_code == 200, response.content
501452

502-
group = Group.objects.get(id=group.id, project=group.project.id)
503-
assert group.status == GroupStatus.RESOLVED
504-
505-
# no GroupResolution because there is no release
506-
assert not GroupResolution.objects.filter(group=group).exists()
507-
assert response.data["statusDetails"] == {}
508-
509-
@with_feature("organizations:releases-resolve-next-release-semver-fix")
510-
def test_resolved_in_next_release_with_flag_no_release(self):
511-
self.login_as(user=self.user)
512-
project = self.create_project_with_releases()
513-
group = self.create_group_with_no_release(project)
514-
515-
url = f"/api/0/organizations/{group.organization.slug}/issues/{group.id}/"
516-
response = self.client.put(url, data={"status": "resolvedInNextRelease"})
517-
assert response.status_code == 200, response.content
518-
519453
# Refetch from DB to ensure the latest state is fetched
520454
group = Group.objects.get(id=group.id, project=group.project.id)
521455
assert group.status == GroupStatus.RESOLVED

Diff for: tests/sentry/issues/endpoints/test_organization_group_index.py

+11-10
Original file line numberDiff line numberDiff line change
@@ -4348,23 +4348,23 @@ def test_in_semver_projects_group_resolution_stores_current_release_version(self
43484348
GroupResolution.current_release_version is set to the latest release associated with a
43494349
Group, when the project follows semantic versioning scheme
43504350
"""
4351-
release_1 = self.create_release(version="fake_package@21.1.0")
4352-
release_2 = self.create_release(version="fake_package@21.1.1")
4353-
release_3 = self.create_release(version="fake_package@21.1.2")
4351+
release_21_1_0 = self.create_release(version="fake_package@21.1.0")
4352+
release_21_1_1 = self.create_release(version="fake_package@21.1.1")
4353+
release_21_1_2 = self.create_release(version="fake_package@21.1.2")
43544354

43554355
self.store_event(
43564356
data={
43574357
"timestamp": iso_format(before_now(seconds=10)),
43584358
"fingerprint": ["group-1"],
4359-
"release": release_2.version,
4359+
"release": release_21_1_1.version,
43604360
},
43614361
project_id=self.project.id,
43624362
)
43634363
group = self.store_event(
43644364
data={
43654365
"timestamp": iso_format(before_now(seconds=12)),
43664366
"fingerprint": ["group-1"],
4367-
"release": release_1.version,
4367+
"release": release_21_1_0.version,
43684368
},
43694369
project_id=self.project.id,
43704370
).group
@@ -4381,20 +4381,21 @@ def test_in_semver_projects_group_resolution_stores_current_release_version(self
43814381
# a group
43824382
grp_resolution = GroupResolution.objects.get(group=group)
43834383

4384-
assert grp_resolution.current_release_version == release_2.version
4384+
assert grp_resolution.current_release_version == release_21_1_2.version
43854385

43864386
# "resolvedInNextRelease" with semver releases is considered as "resolvedInRelease"
43874387
assert grp_resolution.type == GroupResolution.Type.in_release
43884388
assert grp_resolution.status == GroupResolution.Status.resolved
43894389

43904390
# Add release that is between 2 and 3 to ensure that any release after release 2 should
43914391
# not have a resolution
4392-
release_4 = self.create_release(version="fake_package@21.1.1+1")
4392+
release_21_1_1_plus_1 = self.create_release(version="fake_package@21.1.1+1")
4393+
release_21_1_3 = self.create_release(version="fake_package@21.1.3")
43934394

4394-
for release in [release_1, release_2]:
4395+
for release in [release_21_1_0, release_21_1_1, release_21_1_1_plus_1, release_21_1_2]:
43954396
assert GroupResolution.has_resolution(group=group, release=release)
43964397

4397-
for release in [release_3, release_4]:
4398+
for release in [release_21_1_3]:
43984399
assert not GroupResolution.has_resolution(group=group, release=release)
43994400

44004401
# Ensure that Activity has `current_release_version` set on `Resolved in next release`
@@ -4404,7 +4405,7 @@ def test_in_semver_projects_group_resolution_stores_current_release_version(self
44044405
ident=grp_resolution.id,
44054406
)
44064407

4407-
assert activity.data["current_release_version"] == release_2.version
4408+
assert activity.data["current_release_version"] == release_21_1_2.version
44084409

44094410
def test_in_non_semver_projects_group_resolution_stores_current_release_version(self) -> None:
44104411
"""

0 commit comments

Comments
 (0)