Skip to content

Commit 910df9c

Browse files
authored
fix(releases): Include fix within get_current_release_version_of_group() (#80821)
In #80737 we provided a fix within `get_latest_release()` but it makes more sense to include it inside of `get_current_release_version_of_group()` for it will make it available to other parts of the codebase. For example: https://github.com/getsentry/sentry/blob/c0797226ec0dc304d766796713121a880df38811/src/sentry/integrations/tasks/sync_status_inbound.py#L112-L114
1 parent 303b930 commit 910df9c

File tree

2 files changed

+45
-26
lines changed

2 files changed

+45
-26
lines changed

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

+22-26
Original file line numberDiff line numberDiff line change
@@ -136,20 +136,25 @@ def get_current_release_version_of_group(group: Group, follows_semver: bool = Fa
136136
"""
137137
current_release_version = None
138138
if follows_semver:
139-
try:
140-
# This sets current_release_version to the latest semver version associated with a group
141-
associated_release_id = GroupRelease.objects.filter(
142-
project_id=group.project.id, group_id=group.id
143-
).values_list("release_id")
144-
145-
current_release_version = (
146-
get_semver_releases(group.project)
147-
.filter(id__in=associated_release_id)
148-
.values_list("version", flat=True)[:1]
149-
.get()
150-
)
151-
except Release.DoesNotExist:
152-
pass
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
157+
153158
else:
154159
# This sets current_release_version to the most recent release associated with a group
155160
# In order to be able to do that, `use_cache` has to be set to False. Otherwise,
@@ -404,18 +409,9 @@ def update_groups(
404409
release_version=release.version,
405410
)
406411

407-
if (
408-
features.has(
409-
"organizations:releases-resolve-next-release-semver-fix",
410-
project.organization,
411-
)
412-
and follows_semver
413-
):
414-
current_release_version = get_release_to_resolve_by(projects[0]).version
415-
else:
416-
current_release_version = get_current_release_version_of_group(
417-
group=group, follows_semver=follows_semver
418-
)
412+
current_release_version = get_current_release_version_of_group(
413+
group, follows_semver
414+
)
419415

420416
if current_release_version:
421417
resolution_params.update(

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

+23
Original file line numberDiff line numberDiff line change
@@ -499,6 +499,29 @@ def test_resolved_in_next_release_no_release(self):
499499
assert not GroupResolution.objects.filter(group=group).exists()
500500
assert response.data["statusDetails"] == {}
501501

502+
@with_feature("organizations:releases-resolve-next-release-semver-fix")
503+
def test_resolved_in_next_release_with_flag_no_release(self):
504+
self.login_as(user=self.user)
505+
506+
project = self.create_project()
507+
project.flags.has_releases = True
508+
project.save()
509+
event = self.store_event(data={}, project_id=project.id)
510+
group = event.group
511+
assert group is not None
512+
513+
url = f"/api/0/organizations/{group.organization.slug}/issues/{group.id}/"
514+
response = self.client.put(url, data={"status": "resolvedInNextRelease"})
515+
assert response.status_code == 200, response.content
516+
517+
# Refetch from DB to ensure the latest state is fetched
518+
group = Group.objects.get(id=group.id, project=group.project.id)
519+
assert group.status == GroupStatus.RESOLVED
520+
521+
# no GroupResolution because there is no release
522+
assert not GroupResolution.objects.filter(group=group).exists()
523+
assert response.data["statusDetails"] == {}
524+
502525
def test_snooze_duration(self):
503526
group = self.create_group(status=GroupStatus.RESOLVED)
504527

0 commit comments

Comments
 (0)