From 2eb06e56f31b6175c9cefc3a2b4385ede89f4af7 Mon Sep 17 00:00:00 2001 From: s1gr1d Date: Tue, 5 Mar 2024 13:54:57 +0100 Subject: [PATCH 1/3] use es5/es6 bundles only in v7 JS loader --- src/sentry/api/endpoints/project_key_details.py | 1 + src/sentry/loader/browsersdkversion.py | 1 + src/sentry/projectoptions/defaults.py | 1 + src/sentry/web/frontend/js_sdk_loader.py | 11 ++++++----- 4 files changed, 9 insertions(+), 5 deletions(-) diff --git a/src/sentry/api/endpoints/project_key_details.py b/src/sentry/api/endpoints/project_key_details.py index f4c26ade8040da..94a2f073b475b1 100644 --- a/src/sentry/api/endpoints/project_key_details.py +++ b/src/sentry/api/endpoints/project_key_details.py @@ -88,6 +88,7 @@ def get(self, request: Request, project, key_id) -> Response: help_text="The Sentry Javascript SDK version to use. The currently supported options are:", # Ideally we would call get_browser_sdk_version_choices() here but that requires # passing in project to this decorator + # todo: v8 add version choices=[("latest", "Most recent version"), ("7.x", "Version 7 releases")], required=False, ), diff --git a/src/sentry/loader/browsersdkversion.py b/src/sentry/loader/browsersdkversion.py index 2f52084f69ab6e..2d4be2289dc6ee 100644 --- a/src/sentry/loader/browsersdkversion.py +++ b/src/sentry/loader/browsersdkversion.py @@ -37,6 +37,7 @@ def get_highest_browser_sdk_version(versions): def get_all_browser_sdk_version_versions(): + # todo: v8 add version return ["latest", "7.x", "6.x", "5.x", "4.x"] diff --git a/src/sentry/projectoptions/defaults.py b/src/sentry/projectoptions/defaults.py index 01c81f163da873..071901d2b693d0 100644 --- a/src/sentry/projectoptions/defaults.py +++ b/src/sentry/projectoptions/defaults.py @@ -169,6 +169,7 @@ ) # The available loader SDK versions +# todo: v8 add version register( key="sentry:loader_available_sdk_versions", epoch_defaults={1: ["7.x", "6.x", "5.x", "4.x"], 11: ["7.x"]}, diff --git a/src/sentry/web/frontend/js_sdk_loader.py b/src/sentry/web/frontend/js_sdk_loader.py index cf6c28744a2cad..c29ad4c0582297 100644 --- a/src/sentry/web/frontend/js_sdk_loader.py +++ b/src/sentry/web/frontend/js_sdk_loader.py @@ -67,7 +67,8 @@ def _get_loader_config( "hasDebug": False, } - is_greater_or_equal_v7_sdk = sdk_version >= Version("7.0.0") + is_v7_sdk = sdk_version >= Version("7.0.0") and sdk_version < Version("8.0.0") + is_v7_or_higher_sdk = sdk_version >= Version("7.0.0") is_lazy = True bundle_kind_modifier = "" @@ -80,21 +81,21 @@ def _get_loader_config( # https://docs.sentry.io/platforms/javascript/install/cdn/ # We depend on fixes in the tracing bundle that are only available in v7 - if is_greater_or_equal_v7_sdk and has_performance: + if is_v7_or_higher_sdk and has_performance: bundle_kind_modifier += ".tracing" is_lazy = False # If the project does not have a v7 sdk set, we cannot load the replay bundle. - if is_greater_or_equal_v7_sdk and has_replay: + if is_v7_or_higher_sdk and has_replay: bundle_kind_modifier += ".replay" is_lazy = False - # From JavaScript SDK version 7 onwards, the default bundle code is ES6, however, in the loader we + # In JavaScript SDK version 7, the default bundle code is ES6, however, in the loader we # want to provide the ES5 version. This is why we need to modify the requested bundle name here. # # If we are loading replay, do not add the es5 modifier, as those bundles are # ES6 only. - if is_greater_or_equal_v7_sdk and not has_replay: + if is_v7_sdk and not has_replay: bundle_kind_modifier += ".es5" if has_debug: From 8bc6ead58974cb5ebf7543c8d13758457f5171bf Mon Sep 17 00:00:00 2001 From: s1gr1d Date: Tue, 5 Mar 2024 15:43:03 +0100 Subject: [PATCH 2/3] review comments --- src/sentry/web/frontend/js_sdk_loader.py | 6 +++--- .../sentry/web/frontend/test_js_sdk_loader.py | 18 ++++++++++++++++++ 2 files changed, 21 insertions(+), 3 deletions(-) diff --git a/src/sentry/web/frontend/js_sdk_loader.py b/src/sentry/web/frontend/js_sdk_loader.py index c29ad4c0582297..2d0d23c8cac0f9 100644 --- a/src/sentry/web/frontend/js_sdk_loader.py +++ b/src/sentry/web/frontend/js_sdk_loader.py @@ -68,7 +68,7 @@ def _get_loader_config( } is_v7_sdk = sdk_version >= Version("7.0.0") and sdk_version < Version("8.0.0") - is_v7_or_higher_sdk = sdk_version >= Version("7.0.0") + is_greater_or_equal_v7_sdk = sdk_version >= Version("7.0.0") is_lazy = True bundle_kind_modifier = "" @@ -81,12 +81,12 @@ def _get_loader_config( # https://docs.sentry.io/platforms/javascript/install/cdn/ # We depend on fixes in the tracing bundle that are only available in v7 - if is_v7_or_higher_sdk and has_performance: + if is_greater_or_equal_v7_sdk and has_performance: bundle_kind_modifier += ".tracing" is_lazy = False # If the project does not have a v7 sdk set, we cannot load the replay bundle. - if is_v7_or_higher_sdk and has_replay: + if is_greater_or_equal_v7_sdk and has_replay: bundle_kind_modifier += ".replay" is_lazy = False diff --git a/tests/sentry/web/frontend/test_js_sdk_loader.py b/tests/sentry/web/frontend/test_js_sdk_loader.py index e7d187e6460ae1..09a648d5f3e35e 100644 --- a/tests/sentry/web/frontend/test_js_sdk_loader.py +++ b/tests/sentry/web/frontend/test_js_sdk_loader.py @@ -175,6 +175,24 @@ def test_returns_latest_pre_v8_version_when_latest_is_selected_various_v8_versio self.assertTemplateUsed(resp, "sentry/js-sdk-loader.js.tmpl") assert b"/7.100.0/bundle.tracing.replay.min.js" in resp.content + @mock.patch( + "sentry.loader.browsersdkversion.load_version_from_file", + return_value=["8.1.0", "8.0.0", "8", "8.0.0-alpha.0"], + ) + @mock.patch( + "sentry.loader.browsersdkversion.get_selected_browser_sdk_version", return_value="8.x" + ) + def test_equal_to_v8_returns_default_bundle( + self, load_version_from_file, get_selected_browser_sdk_version + ): + settings.JS_SDK_LOADER_DEFAULT_SDK_URL = "https://browser.sentry-cdn.com/%s/bundle%s.min.js" + self.projectkey.data = {} + self.projectkey.save() + resp = self.client.get(self.path) + assert resp.status_code == 200 + self.assertTemplateUsed(resp, "sentry/js-sdk-loader.js.tmpl") + assert b"/8.0.0/bundle.min.js" in resp.content + @mock.patch("sentry.loader.browsersdkversion.load_version_from_file", return_value=["7.37.0"]) @mock.patch( "sentry.loader.browsersdkversion.get_selected_browser_sdk_version", return_value="7.x" From 1a73a88aefb0d1986a2b7d691b8ecb9793409921 Mon Sep 17 00:00:00 2001 From: s1gr1d Date: Wed, 6 Mar 2024 10:05:48 +0100 Subject: [PATCH 3/3] fix tests --- .../sentry/web/frontend/test_js_sdk_loader.py | 20 ++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/tests/sentry/web/frontend/test_js_sdk_loader.py b/tests/sentry/web/frontend/test_js_sdk_loader.py index 09a648d5f3e35e..6506d800abe5b6 100644 --- a/tests/sentry/web/frontend/test_js_sdk_loader.py +++ b/tests/sentry/web/frontend/test_js_sdk_loader.py @@ -177,7 +177,7 @@ def test_returns_latest_pre_v8_version_when_latest_is_selected_various_v8_versio @mock.patch( "sentry.loader.browsersdkversion.load_version_from_file", - return_value=["8.1.0", "8.0.0", "8", "8.0.0-alpha.0"], + return_value=["8.0.0"], ) @mock.patch( "sentry.loader.browsersdkversion.get_selected_browser_sdk_version", return_value="8.x" @@ -193,6 +193,24 @@ def test_equal_to_v8_returns_default_bundle( self.assertTemplateUsed(resp, "sentry/js-sdk-loader.js.tmpl") assert b"/8.0.0/bundle.min.js" in resp.content + @mock.patch( + "sentry.loader.browsersdkversion.load_version_from_file", + return_value=["8.1.0", "8.0.0", "8", "8.0.0-alpha.0"], + ) + @mock.patch( + "sentry.loader.browsersdkversion.get_selected_browser_sdk_version", return_value="8.x" + ) + def test_returns_latest_v8_version_when_various_v8_versions_available( + self, load_version_from_file, get_selected_browser_sdk_version + ): + settings.JS_SDK_LOADER_DEFAULT_SDK_URL = "https://browser.sentry-cdn.com/%s/bundle%s.min.js" + self.projectkey.data = {} + self.projectkey.save() + resp = self.client.get(self.path) + assert resp.status_code == 200 + self.assertTemplateUsed(resp, "sentry/js-sdk-loader.js.tmpl") + assert b"/8.1.0/bundle.min.js" in resp.content + @mock.patch("sentry.loader.browsersdkversion.load_version_from_file", return_value=["7.37.0"]) @mock.patch( "sentry.loader.browsersdkversion.get_selected_browser_sdk_version", return_value="7.x"