Skip to content

Commit 70c854b

Browse files
feat(github): Support Github multi org in Github installation pipeline (#90709)
1 parent 7276ae5 commit 70c854b

File tree

5 files changed

+627
-80
lines changed

5 files changed

+627
-80
lines changed

src/sentry/features/temporary.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -502,6 +502,8 @@ def register_temporary_features(manager: FeatureManager):
502502
manager.add("organizations:jira-paginated-projects", OrganizationFeature, FeatureHandlerStrategy.FLAGPOLE, api_expose=False)
503503
# Enable single trace summary
504504
manager.add("organizations:single-trace-summary", OrganizationFeature, FeatureHandlerStrategy.FLAGPOLE, api_expose=True)
505+
# Enable users to connect many Sentry orgs to a single Github org
506+
manager.add("organizations:github-multi-org", OrganizationFeature, FeatureHandlerStrategy.FLAGPOLE, api_expose=False)
505507
# Enable Relay extracting logs from breadcrumbs for a project.
506508
manager.add("projects:ourlogs-breadcrumb-extraction", ProjectFeature, FeatureHandlerStrategy.FLAGPOLE, api_expose=False)
507509

src/sentry/integrations/github/client.py

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -86,13 +86,32 @@ def authorize_request(self, prepared_request: PreparedRequest) -> PreparedReques
8686

8787
def get_installation_info(self, installation_id: int | str) -> dict[str, Any]:
8888
"""
89-
https://docs.github.com/en/rest/apps/apps?apiVersion=2022-11-28#get-an-installation-for-the-authenticated-app
89+
Authentication: JWT
90+
Docs: https://docs.github.com/en/rest/apps/apps?apiVersion=2022-11-28#get-an-installation-for-the-authenticated-app
9091
"""
9192
return self.get(f"/app/installations/{installation_id}")
9293

9394
def get_user_info(self) -> dict[str, Any]:
95+
"""
96+
Authentication: Access Token
97+
Docs: https://docs.github.com/en/rest/users/users?apiVersion=2022-11-28#get-the-authenticated-user
98+
"""
9499
return self.get("/user")
95100

101+
def get_user_info_installations(self):
102+
"""
103+
Authentication: Access Token
104+
Docs: https://docs.github.com/en/rest/apps/installations?apiVersion=2022-11-28#list-app-installations-accessible-to-the-user-access-token
105+
"""
106+
return self.get("/user/installations")
107+
108+
def get_organization_memberships_for_user(self):
109+
"""
110+
Authentication: Access Token
111+
Docs: https://docs.github.com/en/rest/orgs/members?apiVersion=2022-11-28#get-an-organization-membership-for-the-authenticated-user
112+
"""
113+
return self.get("/user/memberships/orgs")
114+
96115

97116
class GithubProxyClient(IntegrationProxyClient):
98117
integration: Integration | RpcIntegration # late init

0 commit comments

Comments
 (0)