kaneo (minimalist kanban) fork to experiment adding a tangled integration github.com/usekaneo/kaneo
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

at cd7cada2f86b4e866a15b4323bb8d6d7ab5bba8b 70 lines 2.1 kB view raw
1import { 2 findExternalLinksByTask, 3 updateExternalLink, 4} from "../../github/services/link-manager"; 5import type { PluginContext, TaskStatusChangedEvent } from "../../types"; 6import type { GiteaConfig } from "../config"; 7import { createGiteaClient } from "../utils/gitea-api"; 8import { addLabelsToIssueGitea, removeLabelGitea } from "../utils/labels"; 9 10export async function handleTaskStatusChanged( 11 event: TaskStatusChangedEvent, 12 context: PluginContext, 13): Promise<void> { 14 const config = context.config as GiteaConfig; 15 if (!config.baseUrl || !config.accessToken) { 16 return; 17 } 18 19 const { repositoryOwner, repositoryName } = config; 20 21 try { 22 const links = await findExternalLinksByTask(event.taskId); 23 const issueLink = links.find( 24 (link) => 25 link.integrationId === context.integrationId && 26 link.resourceType === "issue", 27 ); 28 29 if (!issueLink) { 30 return; 31 } 32 33 const client = createGiteaClient(config); 34 const issueNumber = Number.parseInt(issueLink.externalId, 10); 35 36 await removeLabelGitea(config, issueNumber, `status:${event.oldStatus}`); 37 38 await addLabelsToIssueGitea(config, issueNumber, [ 39 `status:${event.newStatus}`, 40 ]); 41 42 if (event.newStatus === "done") { 43 await client.updateIssue(repositoryOwner, repositoryName, issueNumber, { 44 state: "closed", 45 }); 46 47 await updateExternalLink(issueLink.id, { 48 metadata: { 49 ...(issueLink.metadata ? JSON.parse(issueLink.metadata) : {}), 50 state: "closed", 51 lastOutboundStateSyncAt: Date.now(), 52 }, 53 }); 54 } else if (event.oldStatus === "done" && event.newStatus !== "done") { 55 await client.updateIssue(repositoryOwner, repositoryName, issueNumber, { 56 state: "open", 57 }); 58 59 await updateExternalLink(issueLink.id, { 60 metadata: { 61 ...(issueLink.metadata ? JSON.parse(issueLink.metadata) : {}), 62 state: "open", 63 lastOutboundStateSyncAt: Date.now(), 64 }, 65 }); 66 } 67 } catch (error) { 68 console.error("Failed to update Gitea issue status:", error); 69 } 70}