Skip to content

Conversation

@srest2021
Copy link
Member

@srest2021 srest2021 commented Dec 9, 2025

Fixes CW-27

Add a Seer onboarding/settings status endpoint OrganizationSeerOnboardingCheck to be used by the onboarding wizard and in the checkout page.

Response format:

{
"hasSupportedScmIntegration": bool,
"isCodeReviewEnabled": bool,
"isAutofixEnabled": bool,
"isSeerConfigured": bool
}
  • hasSupportedScmIntegration: Check if the organization has an active GitHub or GitHub Enterprise integration.
  • isCodeReviewEnabled: Check if code review is enabled for any active repository in the organization. This setting will live in the new RepositorySeerSettings model.
  • isAutofixEnabled: Check if autofix/RCA automation is enabled for any active project in the organization, ie, if any project has sentry:autofix_automation_tuning not set to "off" or null.
  • isSeerConfigured: hasSupportedScmIntegration and (isCodeReviewEnabled or isAutofixEnabled)

@linear
Copy link

linear bot commented Dec 9, 2025

@github-actions github-actions bot added the Scope: Backend Automatically applied to PRs that change backend components label Dec 9, 2025
@codecov
Copy link

codecov bot commented Dec 9, 2025

❌ 11 Tests Failed:

Tests completed Failed Passed Skipped
112 11 101 2
View the top 3 failed test(s) by shortest run time
::tests.sentry.api.endpoints.secret_scanning.test_github
Stack Traces | 0s run time
#x1B[31mImportError while importing test module '.../endpoints/secret_scanning/test_github.py'.
Hint: make sure your test modules/packages have valid Python names.
Traceback:
#x1B[1m#x1B[.../hostedtoolcache/Python/3.13.1........./x64/lib/python3.13/importlib/__init__.py#x1B[0m:88: in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
#x1B[1m#x1B[.../endpoints/secret_scanning/test_github.py#x1B[0m:18: in <module>
    class SecretScanningGitHubTest(TestCase):
#x1B[1m#x1B[.../endpoints/secret_scanning/test_github.py#x1B[0m:19: in SecretScanningGitHubTest
    path = reverse("sentry-api-0-secret-scanning-github")
#x1B[1m#x1B[31m.venv/lib/python3.13.../django/urls/base.py#x1B[0m:98: in reverse
    resolved_url = resolver._reverse_with_prefix(view, prefix, *args, **kwargs)
#x1B[1m#x1B[31m.venv/lib/python3.13.../django/urls/resolvers.py#x1B[0m:749: in _reverse_with_prefix
    self._populate()
#x1B[1m#x1B[31m.venv/lib/python3.13.../django/urls/resolvers.py#x1B[0m:548: in _populate
    for url_pattern in reversed(self.url_patterns):
#x1B[1m#x1B[31m.venv/lib/python3.13.../django/utils/functional.py#x1B[0m:47: in __get__
    res = instance.__dict__[self.name] = self.func(instance)
#x1B[1m#x1B[31m.venv/lib/python3.13.../django/urls/resolvers.py#x1B[0m:718: in url_patterns
    patterns = getattr(self.urlconf_module, "urlpatterns", self.urlconf_module)
#x1B[1m#x1B[31m.venv/lib/python3.13.../django/utils/functional.py#x1B[0m:47: in __get__
    res = instance.__dict__[self.name] = self.func(instance)
#x1B[1m#x1B[31m.venv/lib/python3.13.../django/urls/resolvers.py#x1B[0m:711: in urlconf_module
    return import_module(self.urlconf_name)
#x1B[1m#x1B[.../hostedtoolcache/Python/3.13.1........./x64/lib/python3.13/importlib/__init__.py#x1B[0m:88: in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
#x1B[1m#x1B[.../sentry/conf/urls.py#x1B[0m:3: in <module>
    from sentry.web.urls import urlpatterns
#x1B[1m#x1B[.../sentry/web/urls.py#x1B[0m:167: in <module>
    include("sentry.api.urls"),
#x1B[1m#x1B[31m.venv/lib/python3.13.../django/urls/conf.py#x1B[0m:39: in include
    urlconf_module = import_module(urlconf_module)
#x1B[1m#x1B[.../hostedtoolcache/Python/3.13.1........./x64/lib/python3.13/importlib/__init__.py#x1B[0m:88: in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
#x1B[1m#x1B[.../sentry/api/urls.py#x1B[0m:526: in <module>
    from sentry.seer.endpoints.organization_seer_onboarding_check import OrganizationSeerOnboardingCheck
#x1B[1m#x1B[.../seer/endpoints/organization_seer_onboarding_check.py#x1B[0m:17: in <module>
    from sentry.models.repositoryseersettings import RepositorySeerSettings
#x1B[1m#x1B[31mE   ModuleNotFoundError: No module named 'sentry.models.repositoryseersettings'#x1B[0m#x1B[0m
::tests.sentry.api.endpoints.test_api_tokens
Stack Traces | 0s run time
#x1B[31mImportError while importing test module '.../api/endpoints/test_api_tokens.py'.
Hint: make sure your test modules/packages have valid Python names.
Traceback:
#x1B[1m#x1B[.../hostedtoolcache/Python/3.13.1........./x64/lib/python3.13/importlib/__init__.py#x1B[0m:88: in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
#x1B[1m#x1B[.../api/endpoints/test_api_tokens.py#x1B[0m:160: in <module>
    class ApiTokensSuperuserTest(APITestCase):
#x1B[1m#x1B[.../api/endpoints/test_api_tokens.py#x1B[0m:161: in ApiTokensSuperuserTest
    url = reverse("sentry-api-0-api-tokens")
#x1B[1m#x1B[31m.venv/lib/python3.13.../django/urls/base.py#x1B[0m:98: in reverse
    resolved_url = resolver._reverse_with_prefix(view, prefix, *args, **kwargs)
#x1B[1m#x1B[31m.venv/lib/python3.13.../django/urls/resolvers.py#x1B[0m:749: in _reverse_with_prefix
    self._populate()
#x1B[1m#x1B[31m.venv/lib/python3.13.../django/urls/resolvers.py#x1B[0m:548: in _populate
    for url_pattern in reversed(self.url_patterns):
#x1B[1m#x1B[31m.venv/lib/python3.13.../django/utils/functional.py#x1B[0m:47: in __get__
    res = instance.__dict__[self.name] = self.func(instance)
#x1B[1m#x1B[31m.venv/lib/python3.13.../django/urls/resolvers.py#x1B[0m:718: in url_patterns
    patterns = getattr(self.urlconf_module, "urlpatterns", self.urlconf_module)
#x1B[1m#x1B[31m.venv/lib/python3.13.../django/utils/functional.py#x1B[0m:47: in __get__
    res = instance.__dict__[self.name] = self.func(instance)
#x1B[1m#x1B[31m.venv/lib/python3.13.../django/urls/resolvers.py#x1B[0m:711: in urlconf_module
    return import_module(self.urlconf_name)
#x1B[1m#x1B[.../hostedtoolcache/Python/3.13.1........./x64/lib/python3.13/importlib/__init__.py#x1B[0m:88: in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
#x1B[1m#x1B[.../sentry/conf/urls.py#x1B[0m:3: in <module>
    from sentry.web.urls import urlpatterns
#x1B[1m#x1B[.../sentry/web/urls.py#x1B[0m:167: in <module>
    include("sentry.api.urls"),
#x1B[1m#x1B[31m.venv/lib/python3.13.../django/urls/conf.py#x1B[0m:39: in include
    urlconf_module = import_module(urlconf_module)
#x1B[1m#x1B[.../hostedtoolcache/Python/3.13.1........./x64/lib/python3.13/importlib/__init__.py#x1B[0m:88: in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
#x1B[1m#x1B[.../sentry/api/urls.py#x1B[0m:526: in <module>
    from sentry.seer.endpoints.organization_seer_onboarding_check import OrganizationSeerOnboardingCheck
#x1B[1m#x1B[.../seer/endpoints/organization_seer_onboarding_check.py#x1B[0m:17: in <module>
    from sentry.models.repositoryseersettings import RepositorySeerSettings
#x1B[1m#x1B[31mE   ModuleNotFoundError: No module named 'sentry.models.repositoryseersettings'#x1B[0m#x1B[0m
::tests.sentry.api.endpoints.test_system_options
Stack Traces | 0s run time
#x1B[31mImportError while importing test module '.../api/endpoints/test_system_options.py'.
Hint: make sure your test modules/packages have valid Python names.
Traceback:
#x1B[1m#x1B[.../hostedtoolcache/Python/3.13.1........./x64/lib/python3.13/importlib/__init__.py#x1B[0m:88: in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
#x1B[1m#x1B[.../api/endpoints/test_system_options.py#x1B[0m:9: in <module>
    class SystemOptionsTest(APITestCase):
#x1B[1m#x1B[.../api/endpoints/test_system_options.py#x1B[0m:10: in SystemOptionsTest
    url = reverse("sentry-api-0-system-options")
#x1B[1m#x1B[31m.venv/lib/python3.13.../django/urls/base.py#x1B[0m:98: in reverse
    resolved_url = resolver._reverse_with_prefix(view, prefix, *args, **kwargs)
#x1B[1m#x1B[31m.venv/lib/python3.13.../django/urls/resolvers.py#x1B[0m:749: in _reverse_with_prefix
    self._populate()
#x1B[1m#x1B[31m.venv/lib/python3.13.../django/urls/resolvers.py#x1B[0m:548: in _populate
    for url_pattern in reversed(self.url_patterns):
#x1B[1m#x1B[31m.venv/lib/python3.13.../django/utils/functional.py#x1B[0m:47: in __get__
    res = instance.__dict__[self.name] = self.func(instance)
#x1B[1m#x1B[31m.venv/lib/python3.13.../django/urls/resolvers.py#x1B[0m:718: in url_patterns
    patterns = getattr(self.urlconf_module, "urlpatterns", self.urlconf_module)
#x1B[1m#x1B[31m.venv/lib/python3.13.../django/utils/functional.py#x1B[0m:47: in __get__
    res = instance.__dict__[self.name] = self.func(instance)
#x1B[1m#x1B[31m.venv/lib/python3.13.../django/urls/resolvers.py#x1B[0m:711: in urlconf_module
    return import_module(self.urlconf_name)
#x1B[1m#x1B[.../hostedtoolcache/Python/3.13.1........./x64/lib/python3.13/importlib/__init__.py#x1B[0m:88: in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
#x1B[1m#x1B[.../sentry/conf/urls.py#x1B[0m:3: in <module>
    from sentry.web.urls import urlpatterns
#x1B[1m#x1B[.../sentry/web/urls.py#x1B[0m:167: in <module>
    include("sentry.api.urls"),
#x1B[1m#x1B[31m.venv/lib/python3.13.../django/urls/conf.py#x1B[0m:39: in include
    urlconf_module = import_module(urlconf_module)
#x1B[1m#x1B[.../hostedtoolcache/Python/3.13.1........./x64/lib/python3.13/importlib/__init__.py#x1B[0m:88: in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
#x1B[1m#x1B[.../sentry/api/urls.py#x1B[0m:526: in <module>
    from sentry.seer.endpoints.organization_seer_onboarding_check import OrganizationSeerOnboardingCheck
#x1B[1m#x1B[.../seer/endpoints/organization_seer_onboarding_check.py#x1B[0m:17: in <module>
    from sentry.models.repositoryseersettings import RepositorySeerSettings
#x1B[1m#x1B[31mE   ModuleNotFoundError: No module named 'sentry.models.repositoryseersettings'#x1B[0m#x1B[0m
::tests.sentry.hybridcloud.apigateway.test_apigateway
Stack Traces | 0s run time
#x1B[31mImportError while importing test module '.../hybridcloud/apigateway/test_apigateway.py'.
Hint: make sure your test modules/packages have valid Python names.
Traceback:
#x1B[1m#x1B[.../hostedtoolcache/Python/3.13.1.../x64/lib/python3.13/importlib/__init__.py#x1B[0m:88: in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
#x1B[1m#x1B[.../hybridcloud/apigateway/test_apigateway.py#x1B[0m:11: in <module>
    from sentry.testutils.helpers.apigateway import ApiGatewayTestCase, verify_request_params
#x1B[1m#x1B[.../testutils/helpers/apigateway.py#x1B[0m:14: in <module>
    import sentry.api.urls as api_urls
#x1B[1m#x1B[.../sentry/api/urls.py#x1B[0m:526: in <module>
    from sentry.seer.endpoints.organization_seer_onboarding_check import OrganizationSeerOnboardingCheck
#x1B[1m#x1B[.../seer/endpoints/organization_seer_onboarding_check.py#x1B[0m:17: in <module>
    from sentry.models.repositoryseersettings import RepositorySeerSettings
#x1B[1m#x1B[31mE   ModuleNotFoundError: No module named 'sentry.models.repositoryseersettings'#x1B[0m#x1B[0m
::tests.sentry.hybridcloud.apigateway.test_apigateway_helpers
Stack Traces | 0s run time
#x1B[31mImportError while importing test module '.../hybridcloud/apigateway/test_apigateway_helpers.py'.
Hint: make sure your test modules/packages have valid Python names.
Traceback:
#x1B[1m#x1B[.../hostedtoolcache/Python/3.13.1.../x64/lib/python3.13/importlib/__init__.py#x1B[0m:88: in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
#x1B[1m#x1B[.../hybridcloud/apigateway/test_apigateway_helpers.py#x1B[0m:6: in <module>
    from sentry.testutils.helpers.apigateway import ApiGatewayTestCase, verify_request_body
#x1B[1m#x1B[.../testutils/helpers/apigateway.py#x1B[0m:14: in <module>
    import sentry.api.urls as api_urls
#x1B[1m#x1B[.../sentry/api/urls.py#x1B[0m:526: in <module>
    from sentry.seer.endpoints.organization_seer_onboarding_check import OrganizationSeerOnboardingCheck
#x1B[1m#x1B[.../seer/endpoints/organization_seer_onboarding_check.py#x1B[0m:17: in <module>
    from sentry.models.repositoryseersettings import RepositorySeerSettings
#x1B[1m#x1B[31mE   ModuleNotFoundError: No module named 'sentry.models.repositoryseersettings'#x1B[0m#x1B[0m
::tests.sentry.hybridcloud.apigateway.test_proxy
Stack Traces | 0s run time
#x1B[31mImportError while importing test module '.../hybridcloud/apigateway/test_proxy.py'.
Hint: make sure your test modules/packages have valid Python names.
Traceback:
#x1B[1m#x1B[.../hostedtoolcache/Python/3.13.1.../x64/lib/python3.13/importlib/__init__.py#x1B[0m:88: in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
#x1B[1m#x1B[.../hybridcloud/apigateway/test_proxy.py#x1B[0m:9: in <module>
    from sentry.testutils.helpers.apigateway import (
#x1B[1m#x1B[.../testutils/helpers/apigateway.py#x1B[0m:14: in <module>
    import sentry.api.urls as api_urls
#x1B[1m#x1B[.../sentry/api/urls.py#x1B[0m:526: in <module>
    from sentry.seer.endpoints.organization_seer_onboarding_check import OrganizationSeerOnboardingCheck
#x1B[1m#x1B[.../seer/endpoints/organization_seer_onboarding_check.py#x1B[0m:17: in <module>
    from sentry.models.repositoryseersettings import RepositorySeerSettings
#x1B[1m#x1B[31mE   ModuleNotFoundError: No module named 'sentry.models.repositoryseersettings'#x1B[0m#x1B[0m
::tests.sentry.integrations.msteams.test_webhook
Stack Traces | 0s run time
#x1B[31mImportError while importing test module '.../integrations/msteams/test_webhook.py'.
Hint: make sure your test modules/packages have valid Python names.
Traceback:
#x1B[1m#x1B[.../hostedtoolcache/Python/3.13.1........./x64/lib/python3.13/importlib/__init__.py#x1B[0m:88: in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
#x1B[1m#x1B[.../integrations/msteams/test_webhook.py#x1B[0m:35: in <module>
    webhook_url = reverse("sentry-integration-msteams-webhooks")
#x1B[1m#x1B[31m.venv/lib/python3.13.../django/urls/base.py#x1B[0m:98: in reverse
    resolved_url = resolver._reverse_with_prefix(view, prefix, *args, **kwargs)
#x1B[1m#x1B[31m.venv/lib/python3.13.../django/urls/resolvers.py#x1B[0m:749: in _reverse_with_prefix
    self._populate()
#x1B[1m#x1B[31m.venv/lib/python3.13.../django/urls/resolvers.py#x1B[0m:548: in _populate
    for url_pattern in reversed(self.url_patterns):
#x1B[1m#x1B[31m.venv/lib/python3.13.../django/utils/functional.py#x1B[0m:47: in __get__
    res = instance.__dict__[self.name] = self.func(instance)
#x1B[1m#x1B[31m.venv/lib/python3.13.../django/urls/resolvers.py#x1B[0m:718: in url_patterns
    patterns = getattr(self.urlconf_module, "urlpatterns", self.urlconf_module)
#x1B[1m#x1B[31m.venv/lib/python3.13.../django/utils/functional.py#x1B[0m:47: in __get__
    res = instance.__dict__[self.name] = self.func(instance)
#x1B[1m#x1B[31m.venv/lib/python3.13.../django/urls/resolvers.py#x1B[0m:711: in urlconf_module
    return import_module(self.urlconf_name)
#x1B[1m#x1B[.../hostedtoolcache/Python/3.13.1........./x64/lib/python3.13/importlib/__init__.py#x1B[0m:88: in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
#x1B[1m#x1B[.../sentry/conf/urls.py#x1B[0m:3: in <module>
    from sentry.web.urls import urlpatterns
#x1B[1m#x1B[.../sentry/web/urls.py#x1B[0m:167: in <module>
    include("sentry.api.urls"),
#x1B[1m#x1B[31m.venv/lib/python3.13.../django/urls/conf.py#x1B[0m:39: in include
    urlconf_module = import_module(urlconf_module)
#x1B[1m#x1B[.../hostedtoolcache/Python/3.13.1........./x64/lib/python3.13/importlib/__init__.py#x1B[0m:88: in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
#x1B[1m#x1B[.../sentry/api/urls.py#x1B[0m:526: in <module>
    from sentry.seer.endpoints.organization_seer_onboarding_check import OrganizationSeerOnboardingCheck
#x1B[1m#x1B[.../seer/endpoints/organization_seer_onboarding_check.py#x1B[0m:17: in <module>
    from sentry.models.repositoryseersettings import RepositorySeerSettings
#x1B[1m#x1B[31mE   ModuleNotFoundError: No module named 'sentry.models.repositoryseersettings'#x1B[0m#x1B[0m
::tests.sentry.middleware.integrations.parsers.test_github
Stack Traces | 0s run time
#x1B[31mImportError while importing test module '.../integrations/parsers/test_github.py'.
Hint: make sure your test modules/packages have valid Python names.
Traceback:
#x1B[1m#x1B[.../hostedtoolcache/Python/3.13.1........./x64/lib/python3.13/importlib/__init__.py#x1B[0m:88: in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
#x1B[1m#x1B[.../integrations/parsers/test_github.py#x1B[0m:29: in <module>
    class GithubRequestParserTest(TestCase):
#x1B[1m#x1B[.../integrations/parsers/test_github.py#x1B[0m:31: in GithubRequestParserTest
    path = reverse("sentry-integration-github-webhook")
#x1B[1m#x1B[31m.venv/lib/python3.13.../django/urls/base.py#x1B[0m:98: in reverse
    resolved_url = resolver._reverse_with_prefix(view, prefix, *args, **kwargs)
#x1B[1m#x1B[31m.venv/lib/python3.13.../django/urls/resolvers.py#x1B[0m:749: in _reverse_with_prefix
    self._populate()
#x1B[1m#x1B[31m.venv/lib/python3.13.../django/urls/resolvers.py#x1B[0m:548: in _populate
    for url_pattern in reversed(self.url_patterns):
#x1B[1m#x1B[31m.venv/lib/python3.13.../django/utils/functional.py#x1B[0m:47: in __get__
    res = instance.__dict__[self.name] = self.func(instance)
#x1B[1m#x1B[31m.venv/lib/python3.13.../django/urls/resolvers.py#x1B[0m:718: in url_patterns
    patterns = getattr(self.urlconf_module, "urlpatterns", self.urlconf_module)
#x1B[1m#x1B[31m.venv/lib/python3.13.../django/utils/functional.py#x1B[0m:47: in __get__
    res = instance.__dict__[self.name] = self.func(instance)
#x1B[1m#x1B[31m.venv/lib/python3.13.../django/urls/resolvers.py#x1B[0m:711: in urlconf_module
    return import_module(self.urlconf_name)
#x1B[1m#x1B[.../hostedtoolcache/Python/3.13.1........./x64/lib/python3.13/importlib/__init__.py#x1B[0m:88: in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
#x1B[1m#x1B[.../sentry/conf/urls.py#x1B[0m:3: in <module>
    from sentry.web.urls import urlpatterns
#x1B[1m#x1B[.../sentry/web/urls.py#x1B[0m:167: in <module>
    include("sentry.api.urls"),
#x1B[1m#x1B[31m.venv/lib/python3.13.../django/urls/conf.py#x1B[0m:39: in include
    urlconf_module = import_module(urlconf_module)
#x1B[1m#x1B[.../hostedtoolcache/Python/3.13.1........./x64/lib/python3.13/importlib/__init__.py#x1B[0m:88: in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
#x1B[1m#x1B[.../sentry/api/urls.py#x1B[0m:526: in <module>
    from sentry.seer.endpoints.organization_seer_onboarding_check import OrganizationSeerOnboardingCheck
#x1B[1m#x1B[.../seer/endpoints/organization_seer_onboarding_check.py#x1B[0m:17: in <module>
    from sentry.models.repositoryseersettings import RepositorySeerSettings
#x1B[1m#x1B[31mE   ModuleNotFoundError: No module named 'sentry.models.repositoryseersettings'#x1B[0m#x1B[0m
::tests.sentry.middleware.integrations.parsers.test_github_enterprise
Stack Traces | 0s run time
#x1B[31mImportError while importing test module '.../integrations/parsers/test_github_enterprise.py'.
Hint: make sure your test modules/packages have valid Python names.
Traceback:
#x1B[1m#x1B[.../hostedtoolcache/Python/3.13.1........./x64/lib/python3.13/importlib/__init__.py#x1B[0m:88: in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
#x1B[1m#x1B[.../integrations/parsers/test_github_enterprise.py#x1B[0m:23: in <module>
    class GithubEnterpriseRequestParserTest(TestCase):
#x1B[1m#x1B[.../integrations/parsers/test_github_enterprise.py#x1B[0m:25: in GithubEnterpriseRequestParserTest
    path = reverse("sentry-integration-github-enterprise-webhook")
#x1B[1m#x1B[31m.venv/lib/python3.13.../django/urls/base.py#x1B[0m:98: in reverse
    resolved_url = resolver._reverse_with_prefix(view, prefix, *args, **kwargs)
#x1B[1m#x1B[31m.venv/lib/python3.13.../django/urls/resolvers.py#x1B[0m:749: in _reverse_with_prefix
    self._populate()
#x1B[1m#x1B[31m.venv/lib/python3.13.../django/urls/resolvers.py#x1B[0m:548: in _populate
    for url_pattern in reversed(self.url_patterns):
#x1B[1m#x1B[31m.venv/lib/python3.13.../django/utils/functional.py#x1B[0m:47: in __get__
    res = instance.__dict__[self.name] = self.func(instance)
#x1B[1m#x1B[31m.venv/lib/python3.13.../django/urls/resolvers.py#x1B[0m:718: in url_patterns
    patterns = getattr(self.urlconf_module, "urlpatterns", self.urlconf_module)
#x1B[1m#x1B[31m.venv/lib/python3.13.../django/utils/functional.py#x1B[0m:47: in __get__
    res = instance.__dict__[self.name] = self.func(instance)
#x1B[1m#x1B[31m.venv/lib/python3.13.../django/urls/resolvers.py#x1B[0m:711: in urlconf_module
    return import_module(self.urlconf_name)
#x1B[1m#x1B[.../hostedtoolcache/Python/3.13.1........./x64/lib/python3.13/importlib/__init__.py#x1B[0m:88: in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
#x1B[1m#x1B[.../sentry/conf/urls.py#x1B[0m:3: in <module>
    from sentry.web.urls import urlpatterns
#x1B[1m#x1B[.../sentry/web/urls.py#x1B[0m:167: in <module>
    include("sentry.api.urls"),
#x1B[1m#x1B[31m.venv/lib/python3.13.../django/urls/conf.py#x1B[0m:39: in include
    urlconf_module = import_module(urlconf_module)
#x1B[1m#x1B[.../hostedtoolcache/Python/3.13.1........./x64/lib/python3.13/importlib/__init__.py#x1B[0m:88: in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
#x1B[1m#x1B[.../sentry/api/urls.py#x1B[0m:526: in <module>
    from sentry.seer.endpoints.organization_seer_onboarding_check import OrganizationSeerOnboardingCheck
#x1B[1m#x1B[.../seer/endpoints/organization_seer_onboarding_check.py#x1B[0m:17: in <module>
    from sentry.models.repositoryseersettings import RepositorySeerSettings
#x1B[1m#x1B[31mE   ModuleNotFoundError: No module named 'sentry.models.repositoryseersettings'#x1B[0m#x1B[0m
::tests.sentry.middleware.integrations.parsers.test_vercel
Stack Traces | 0s run time
#x1B[31mImportError while importing test module '.../integrations/parsers/test_vercel.py'.
Hint: make sure your test modules/packages have valid Python names.
Traceback:
#x1B[1m#x1B[.../hostedtoolcache/Python/3.13.1........./x64/lib/python3.13/importlib/__init__.py#x1B[0m:88: in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
#x1B[1m#x1B[.../integrations/parsers/test_vercel.py#x1B[0m:13: in <module>
    class VercelRequestParserTest(TestCase):
#x1B[1m#x1B[.../integrations/parsers/test_vercel.py#x1B[0m:16: in VercelRequestParserTest
    factory.get(reverse("sentry-extensions-vercel-configure")),
#x1B[1m#x1B[31m.venv/lib/python3.13.../django/urls/base.py#x1B[0m:98: in reverse
    resolved_url = resolver._reverse_with_prefix(view, prefix, *args, **kwargs)
#x1B[1m#x1B[31m.venv/lib/python3.13.../django/urls/resolvers.py#x1B[0m:749: in _reverse_with_prefix
    self._populate()
#x1B[1m#x1B[31m.venv/lib/python3.13.../django/urls/resolvers.py#x1B[0m:548: in _populate
    for url_pattern in reversed(self.url_patterns):
#x1B[1m#x1B[31m.venv/lib/python3.13.../django/utils/functional.py#x1B[0m:47: in __get__
    res = instance.__dict__[self.name] = self.func(instance)
#x1B[1m#x1B[31m.venv/lib/python3.13.../django/urls/resolvers.py#x1B[0m:718: in url_patterns
    patterns = getattr(self.urlconf_module, "urlpatterns", self.urlconf_module)
#x1B[1m#x1B[31m.venv/lib/python3.13.../django/utils/functional.py#x1B[0m:47: in __get__
    res = instance.__dict__[self.name] = self.func(instance)
#x1B[1m#x1B[31m.venv/lib/python3.13.../django/urls/resolvers.py#x1B[0m:711: in urlconf_module
    return import_module(self.urlconf_name)
#x1B[1m#x1B[.../hostedtoolcache/Python/3.13.1........./x64/lib/python3.13/importlib/__init__.py#x1B[0m:88: in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
#x1B[1m#x1B[.../sentry/conf/urls.py#x1B[0m:3: in <module>
    from sentry.web.urls import urlpatterns
#x1B[1m#x1B[.../sentry/web/urls.py#x1B[0m:167: in <module>
    include("sentry.api.urls"),
#x1B[1m#x1B[31m.venv/lib/python3.13.../django/urls/conf.py#x1B[0m:39: in include
    urlconf_module = import_module(urlconf_module)
#x1B[1m#x1B[.../hostedtoolcache/Python/3.13.1........./x64/lib/python3.13/importlib/__init__.py#x1B[0m:88: in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
#x1B[1m#x1B[.../sentry/api/urls.py#x1B[0m:526: in <module>
    from sentry.seer.endpoints.organization_seer_onboarding_check import OrganizationSeerOnboardingCheck
#x1B[1m#x1B[.../seer/endpoints/organization_seer_onboarding_check.py#x1B[0m:17: in <module>
    from sentry.models.repositoryseersettings import RepositorySeerSettings
#x1B[1m#x1B[31mE   ModuleNotFoundError: No module named 'sentry.models.repositoryseersettings'#x1B[0m#x1B[0m
::tests.sentry.seer.endpoints.test_organization_seer_onboarding_check
Stack Traces | 0s run time
#x1B[31mImportError while importing test module '.../seer/endpoints/test_organization_seer_onboarding_check.py'.
Hint: make sure your test modules/packages have valid Python names.
Traceback:
#x1B[1m#x1B[.../hostedtoolcache/Python/3.13.1.../x64/lib/python3.13/importlib/__init__.py#x1B[0m:88: in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
#x1B[1m#x1B[.../seer/endpoints/test_organization_seer_onboarding_check.py#x1B[0m:4: in <module>
    from sentry.models.repositoryseersettings import RepositorySeerSettings
#x1B[1m#x1B[31mE   ModuleNotFoundError: No module named 'sentry.models.repositoryseersettings'#x1B[0m#x1B[0m

To view more test analytics, go to the Test Analytics Dashboard
📋 Got 3 mins? Take this short survey to help us improve Test Analytics.

@srest2021
Copy link
Member Author

@sentry review

@srest2021
Copy link
Member Author

@sentry review

@srest2021 srest2021 changed the title feat(codegen): Add Seer setup status endpoint feat(codegen): Add Seer onboarding/settings status endpoint Dec 9, 2025
@srest2021 srest2021 changed the base branch from master to Ajay/add-repository-settings-table December 10, 2025 18:14
@github-actions github-actions bot added the Scope: Frontend Automatically applied to PRs that change frontend components label Dec 10, 2025
@github-actions
Copy link
Contributor

🚨 Warning: This pull request contains Frontend and Backend changes!

It's discouraged to make changes to Sentry's Frontend and Backend in a single pull request. The Frontend and Backend are not atomically deployed. If the changes are interdependent of each other, they must be separated into two pull requests and be made forward or backwards compatible, such that the Backend or Frontend can be safely deployed independently.

Have questions? Please ask in the #discuss-dev-infra channel.

Base automatically changed from Ajay/add-repository-settings-table to master December 10, 2025 18:22
@srest2021 srest2021 changed the title feat(codegen): Add Seer onboarding/settings status endpoint feat(code-review): Add Seer onboarding/settings status endpoint Dec 10, 2025
@srest2021 srest2021 marked this pull request as ready for review December 10, 2025 18:53
@srest2021 srest2021 requested review from a team as code owners December 10, 2025 18:53
@srest2021 srest2021 requested a review from a team December 10, 2025 18:54
Copy link
Member

@JoshFerge JoshFerge left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

API changes LGTM, will let someone else chime in on business logic

@billyvg billyvg requested a review from a team December 10, 2025 19:49
Copy link
Member

@suejung-sentry suejung-sentry left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks great, this will be really useful

@srest2021
Copy link
Member Author

@suejung-sentry @JoshFerge yeah I think we are good with the current rate limits, they're the same as in organization_seer_setup_check.py and group_autofix_setup_check.py

@srest2021 srest2021 merged commit 81e4e64 into master Dec 11, 2025
70 checks passed
@srest2021 srest2021 deleted the srest2021/CW-27 branch December 11, 2025 00:25
@github-actions github-actions bot locked and limited conversation to collaborators Dec 26, 2025
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

Scope: Backend Automatically applied to PRs that change backend components Scope: Frontend Automatically applied to PRs that change frontend components

Projects

None yet

Development

Successfully merging this pull request may close these issues.

7 participants