diff --git a/src/sentry/feedback/usecases/create_feedback.py b/src/sentry/feedback/usecases/create_feedback.py index 806922a259e9bb..169777997d838a 100644 --- a/src/sentry/feedback/usecases/create_feedback.py +++ b/src/sentry/feedback/usecases/create_feedback.py @@ -133,6 +133,10 @@ def fix_for_issue_platform(event_data: dict[str, Any]) -> dict[str, Any]: ret_event["level"] = event_data.get("level", "info") ret_event["environment"] = event_data.get("environment", "production") + release_value = event_data.get("release") + if release_value: + ret_event["release"] = release_value + if event_data.get("sdk"): ret_event["sdk"] = event_data["sdk"] ret_event["request"] = event_data.get("request", {}) @@ -382,6 +386,9 @@ def create_feedback_issue( else: event_fixed["tags"]["has_linked_error"] = "false" + if event_fixed.get("release"): + event_fixed["tags"]["release"] = event_fixed["release"] + # make sure event data is valid for issue platform validate_issue_platform_event_schema(event_fixed) diff --git a/src/sentry/utils/mockdata/core.py b/src/sentry/utils/mockdata/core.py index a9f8195eb332b6..d3b83931a9dda6 100644 --- a/src/sentry/utils/mockdata/core.py +++ b/src/sentry/utils/mockdata/core.py @@ -1275,6 +1275,9 @@ def create_mock_attachment(event_id, project): def create_mock_user_feedback(project, has_attachment=True): + # Get an existing release for this project instead of creating a new one + release = Release.objects.filter(projects=project).first() + event = { "project_id": project.id, "request": { @@ -1287,7 +1290,6 @@ def create_mock_user_feedback(project, has_attachment=True): "timestamp": time.time(), "received": "2024-4-27T22:23:29.574000+00:00", "environment": next(ENVIRONMENTS), - "release": "frontend@daf1316f209d961443664cd6eb4231ca154db502", "user": { "ip_address": "72.164.175.154", "email": "josh.ferge@sentry.io", @@ -1307,6 +1309,11 @@ def create_mock_user_feedback(project, has_attachment=True): "breadcrumbs": [], "platform": "javascript", } + + # Only add the release field if we found an existing release + if release: + event["release"] = release.version + create_feedback_issue(event, project.id, FeedbackCreationSource.NEW_FEEDBACK_ENVELOPE) if has_attachment: diff --git a/tests/sentry/feedback/usecases/test_create_feedback.py b/tests/sentry/feedback/usecases/test_create_feedback.py index c662c544b211f4..978ff64b16614f 100644 --- a/tests/sentry/feedback/usecases/test_create_feedback.py +++ b/tests/sentry/feedback/usecases/test_create_feedback.py @@ -802,6 +802,9 @@ def test_create_feedback_tags(default_project, mock_produce_occurrence_to_kafka) assert tags["associated_event_id"] == event_id assert tags["has_linked_error"] == "true" + # Adds release to tags + assert tags["release"] == "frontend@daf1316f209d961443664cd6eb4231ca154db502" + @django_db_all def test_create_feedback_tags_no_associated_event_id( @@ -949,3 +952,14 @@ def test_denylist(set_sentry_option, default_project): def test_denylist_not_in_list(set_sentry_option, default_project): with set_sentry_option("feedback.organizations.slug-denylist", ["not-in-list"]): assert is_in_feedback_denylist(default_project.organization) is False + + +@django_db_all +def test_create_feedback_release(default_project, mock_produce_occurrence_to_kafka): + event = mock_feedback_event(default_project.id) + create_feedback_issue(event, default_project.id, FeedbackCreationSource.NEW_FEEDBACK_ENVELOPE) + + assert mock_produce_occurrence_to_kafka.call_count == 1 + produced_event = mock_produce_occurrence_to_kafka.call_args.kwargs["event_data"] + assert produced_event.get("release") is not None + assert produced_event.get("release") == "frontend@daf1316f209d961443664cd6eb4231ca154db502"