Skip to content

Commit eef0b0f

Browse files
authored
feat(code-mappings): Add support for Go automatic code-mappings (EA) (#68147)
Adds EA support for Go automatic code mappings. [Associated getSentry PR](https://github.com/getsentry/getsentry/pull/13512) [Associated Options Automator PR](https://github.com/getsentry/sentry-options-automator/pull/1013)
1 parent 0f38ff4 commit eef0b0f

File tree

4 files changed

+61
-1
lines changed

4 files changed

+61
-1
lines changed

src/sentry/conf/server.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1531,6 +1531,8 @@ def custom_parameter_sort(parameter: dict) -> tuple[str, int]:
15311531
"organizations:default-high-priority-alerts": False,
15321532
# Enables automatically deriving of code mappings
15331533
"organizations:derive-code-mappings": True,
1534+
# Enables automatically deriving of code mappings for Go Projects
1535+
"organizations:derive-code-mappings-go": False,
15341536
# Enable device.class as a selectable column
15351537
"organizations:device-classification": False,
15361538
# Enables synthesis of device.class in ingest

src/sentry/features/temporary.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,7 @@ def register_temporary_features(manager: FeatureManager):
6464
manager.add("organizations:default-high-priority-alerts", OrganizationFeature, FeatureHandlerStrategy.INTERNAL)
6565
manager.add("organizations:deprecate-fid-from-performance-score", OrganizationFeature, FeatureHandlerStrategy.INTERNAL)
6666
manager.add("organizations:derive-code-mappings", OrganizationFeature, FeatureHandlerStrategy.INTERNAL)
67+
manager.add("organizations:derive-code-mappings-go", OrganizationFeature, FeatureHandlerStrategy.INTERNAL)
6768
manager.add("organizations:device-class-synthesis", OrganizationFeature, FeatureHandlerStrategy.INTERNAL)
6869
manager.add("organizations:device-classification", OrganizationFeature, FeatureHandlerStrategy.REMOTE)
6970
manager.add("organizations:discover", OrganizationFeature, FeatureHandlerStrategy.INTERNAL)

src/sentry/tasks/derive_code_mappings.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@
2222
from sentry.utils.locking import UnableToAcquireLock
2323
from sentry.utils.safe import get_path
2424

25-
SUPPORTED_LANGUAGES = ["javascript", "python", "node", "ruby", "php"]
25+
SUPPORTED_LANGUAGES = ["javascript", "python", "node", "ruby", "php", "go"]
2626

2727
logger = logging.getLogger(__name__)
2828

@@ -102,6 +102,11 @@ def derive_code_mappings(
102102
logger.info("Event should not be processed.", extra=extra)
103103
return
104104

105+
if data["platform"].startswith("go") and not features.has(
106+
"organizations:derive-code-mappings-go", org
107+
):
108+
return
109+
105110
stacktrace_paths: list[str] = identify_stacktrace_paths(data)
106111
if not stacktrace_paths:
107112
logger.info("No stacktrace paths found.", extra=extra)

tests/sentry/tasks/test_derive_code_mappings.py

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -341,6 +341,58 @@ def test_derive_code_mappings_starts_with_app_dot_dot_slash(self):
341341
assert code_mapping.repository.name == repo_name
342342

343343

344+
class TestGoDeriveCodeMappings(BaseDeriveCodeMappings):
345+
def setUp(self):
346+
super().setUp()
347+
self.platform = "go"
348+
self.event_data = self.generate_data(
349+
[
350+
{"in_app": True, "filename": "/Users/JohnDoe/code/sentry/capybara.go"},
351+
{
352+
"in_app": True,
353+
"filename": "/Users/JohnDoe/Documents/code/sentry/kangaroo.go",
354+
},
355+
{
356+
"in_app": True,
357+
"filename": "/src/cmd/vroom/profile.go",
358+
},
359+
],
360+
self.platform,
361+
)
362+
363+
@responses.activate
364+
@with_feature({"organizations:derive-code-mappings-go": True})
365+
def test_derive_code_mappings_go_abs_filename(self):
366+
repo_name = "go_repo"
367+
with patch(
368+
"sentry.integrations.github.client.GitHubClientMixin.get_trees_for_org"
369+
) as mock_get_trees_for_org:
370+
mock_get_trees_for_org.return_value = {
371+
repo_name: RepoTree(Repo(repo_name, "master"), ["sentry/capybara.go"])
372+
}
373+
derive_code_mappings(self.project.id, self.event_data)
374+
code_mapping = RepositoryProjectPathConfig.objects.all()[0]
375+
assert code_mapping.stack_root == "/Users/JohnDoe/code/"
376+
assert code_mapping.source_root == ""
377+
assert code_mapping.repository.name == repo_name
378+
379+
@responses.activate
380+
@with_feature({"organizations:derive-code-mappings-go": True})
381+
def test_derive_code_mappings_go_long_abs_filename(self):
382+
repo_name = "go_repo"
383+
with patch(
384+
"sentry.integrations.github.client.GitHubClientMixin.get_trees_for_org"
385+
) as mock_get_trees_for_org:
386+
mock_get_trees_for_org.return_value = {
387+
repo_name: RepoTree(Repo(repo_name, "master"), ["sentry/kangaroo.go"])
388+
}
389+
derive_code_mappings(self.project.id, self.event_data)
390+
code_mapping = RepositoryProjectPathConfig.objects.all()[0]
391+
assert code_mapping.stack_root == "/Users/JohnDoe/Documents/code/"
392+
assert code_mapping.source_root == ""
393+
assert code_mapping.repository.name == repo_name
394+
395+
344396
class TestPhpDeriveCodeMappings(BaseDeriveCodeMappings):
345397
def setUp(self):
346398
super().setUp()

0 commit comments

Comments
 (0)