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..2d0d23c8cac0f9 100644 --- a/src/sentry/web/frontend/js_sdk_loader.py +++ b/src/sentry/web/frontend/js_sdk_loader.py @@ -67,6 +67,7 @@ def _get_loader_config( "hasDebug": False, } + is_v7_sdk = sdk_version >= Version("7.0.0") and sdk_version < Version("8.0.0") is_greater_or_equal_v7_sdk = sdk_version >= Version("7.0.0") is_lazy = True @@ -89,12 +90,12 @@ def _get_loader_config( 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: diff --git a/tests/sentry/web/frontend/test_js_sdk_loader.py b/tests/sentry/web/frontend/test_js_sdk_loader.py index e7d187e6460ae1..6506d800abe5b6 100644 --- a/tests/sentry/web/frontend/test_js_sdk_loader.py +++ b/tests/sentry/web/frontend/test_js_sdk_loader.py @@ -175,6 +175,42 @@ 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.0.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=["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"