kaneo (minimalist kanban) fork to experiment adding a tangled integration
github.com/usekaneo/kaneo
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}