Utilize GitHub integration to fetch information about public issues/PRs (#10827)

* fix: use github APIs to unfurl public gh issues/prs

* fix: revert

* fix: multiple gh accounts

* fix: use replacements
This commit is contained in:
Apoorv Mishra
2025-12-13 05:35:14 +05:30
committed by GitHub
parent d5dbf286cc
commit 948e557bdd
2 changed files with 15 additions and 9 deletions
+2 -8
View File
@@ -14,20 +14,14 @@ export const isURLMentionable = ({
integration: Integration;
}): boolean => {
const { hostname, pathname } = url;
const pathParts = pathname.split("/");
switch (integration.service) {
case IntegrationService.GitHub: {
const settings =
integration.settings as IntegrationSettings<IntegrationType.Embed>;
return (
hostname === "github.com" &&
settings.github?.installation.account.name === pathParts[1] // ensure installed org/account name matches with the provided url.
);
return hostname === "github.com";
}
case IntegrationService.Linear: {
const pathParts = pathname.split("/");
const settings =
integration.settings as IntegrationSettings<IntegrationType.Embed>;
+13 -1
View File
@@ -4,6 +4,7 @@ import {
type OAuthWebFlowAuthOptions,
type InstallationAuthOptions,
} from "@octokit/auth-app";
import { Sequelize } from "sequelize";
import { Endpoints, OctokitResponse } from "@octokit/types";
import { Octokit } from "octokit";
import pluralize from "pluralize";
@@ -229,11 +230,22 @@ export class GitHub {
return;
}
// Find integration, prioritizing one where the installation account matches the resource owner
const integration = (await Integration.findOne({
where: {
service: IntegrationService.GitHub,
teamId: actor.teamId,
"settings.github.installation.account.name": resource.owner,
},
order: [
[
Sequelize.literal(
`CASE WHEN "settings"->'github'->'installation'->'account'->>'name' = :owner THEN 0 ELSE 1 END`
),
"ASC",
],
],
replacements: {
owner: resource.owner,
},
})) as Integration<IntegrationType.Embed>;