diff --git a/src/sentry/integrations/utils/github_permissions.py b/src/sentry/integrations/utils/github_permissions.py index 726c5fb60ab7..7dc082589bb6 100644 --- a/src/sentry/integrations/utils/github_permissions.py +++ b/src/sentry/integrations/utils/github_permissions.py @@ -197,13 +197,16 @@ def get_missing_github_app_permissions( def get_github_permissions_update_url( installation_id: str, account_type: str | None, account_login: str ) -> str | None: + # GitHub Enterprise installations are keyed as "{host}:{installation id}". + host, _, installation_id = installation_id.rpartition(":") + base_url = f"https://{host or 'github.com'}" if not installation_id: return None if account_type == "Organization": if not account_login: return None return ( - f"https://github.com/organizations/{account_login}" + f"{base_url}/organizations/{account_login}" f"/settings/installations/{installation_id}/permissions/update" ) - return f"https://github.com/settings/installations/{installation_id}/permissions/update" + return f"{base_url}/settings/installations/{installation_id}/permissions/update" diff --git a/tests/sentry/integrations/utils/test_github_permissions.py b/tests/sentry/integrations/utils/test_github_permissions.py index e10a241a6f34..ea0b3f3b0892 100644 --- a/tests/sentry/integrations/utils/test_github_permissions.py +++ b/tests/sentry/integrations/utils/test_github_permissions.py @@ -188,6 +188,13 @@ def test_a_mistyped_required_level_stops_enforcing_rather_than_raising( "example-user", "https://github.com/settings/installations/123/permissions/update", ), + ( + "example.ghe.com:123", + "Organization", + "example-org", + "https://example.ghe.com/organizations/example-org" + "/settings/installations/123/permissions/update", + ), ("123", "Organization", "", None), ("", "User", "example-user", None), ],