kaneo (minimalist kanban) fork to experiment adding a tangled integration github.com/usekaneo/kaneo
at main 64 lines 1.8 kB view raw
1import type { PluginContext, TaskPriorityChangedEvent } from "../../types"; 2import type { GitHubConfig } from "../config"; 3import { findExternalLinksByTask } from "../services/link-manager"; 4import { getGithubApp, getInstallationIdForRepo } from "../utils/github-app"; 5import { addLabelsToIssue, removeLabel } from "../utils/labels"; 6 7export async function handleTaskPriorityChanged( 8 event: TaskPriorityChangedEvent, 9 context: PluginContext, 10): Promise<void> { 11 const githubApp = getGithubApp(); 12 if (!githubApp) { 13 return; 14 } 15 16 const config = context.config as GitHubConfig; 17 const { repositoryOwner, repositoryName } = config; 18 19 try { 20 const links = await findExternalLinksByTask(event.taskId); 21 const issueLink = links.find( 22 (link) => 23 link.integrationId === context.integrationId && 24 link.resourceType === "issue", 25 ); 26 27 if (!issueLink) { 28 return; 29 } 30 31 let installationId = config.installationId; 32 if (!installationId) { 33 installationId = await getInstallationIdForRepo( 34 repositoryOwner, 35 repositoryName, 36 ); 37 } 38 39 const octokit = await githubApp.getInstallationOctokit(installationId); 40 const issueNumber = Number.parseInt(issueLink.externalId, 10); 41 42 if (event.oldPriority && event.oldPriority !== "no-priority") { 43 await removeLabel( 44 octokit, 45 repositoryOwner, 46 repositoryName, 47 issueNumber, 48 `priority:${event.oldPriority}`, 49 ); 50 } 51 52 if (event.newPriority && event.newPriority !== "no-priority") { 53 await addLabelsToIssue( 54 octokit, 55 repositoryOwner, 56 repositoryName, 57 issueNumber, 58 [`priority:${event.newPriority}`], 59 ); 60 } 61 } catch (error) { 62 console.error("Failed to update GitHub issue priority:", error); 63 } 64}