kaneo (minimalist kanban) fork to experiment adding a tangled integration github.com/usekaneo/kaneo
at main 85 lines 1.8 kB view raw
1import type { Octokit } from "octokit"; 2 3const labelColors: Record<string, string> = { 4 "priority:low": "0EA5E9", 5 "priority:medium": "EAB308", 6 "priority:high": "F97316", 7 "priority:urgent": "EF4444", 8 "status:to-do": "6B7280", 9 "status:in-progress": "3B82F6", 10 "status:in-review": "8B5CF6", 11 "status:done": "10B981", 12 "status:planned": "8B5CF6", 13 "status:archived": "6B7280", 14}; 15 16export function getLabelColor(labelName: string): string { 17 return labelColors[labelName] || "6B7280"; 18} 19 20export async function ensureLabelsExist( 21 octokit: Octokit, 22 owner: string, 23 repo: string, 24 labels: string[], 25) { 26 for (const labelName of labels) { 27 try { 28 await octokit.rest.issues.getLabel({ 29 owner, 30 repo, 31 name: labelName, 32 }); 33 } catch { 34 try { 35 const color = getLabelColor(labelName); 36 await octokit.rest.issues.createLabel({ 37 owner, 38 repo, 39 name: labelName, 40 color, 41 }); 42 } catch (createError) { 43 console.error(`Failed to create label "${labelName}":`, createError); 44 } 45 } 46 } 47} 48 49export async function addLabelsToIssue( 50 octokit: Octokit, 51 owner: string, 52 repo: string, 53 issueNumber: number, 54 labels: string[], 55) { 56 try { 57 await ensureLabelsExist(octokit, owner, repo, labels); 58 59 await octokit.rest.issues.addLabels({ 60 owner, 61 repo, 62 issue_number: issueNumber, 63 labels, 64 }); 65 } catch (error) { 66 console.error("Failed to add labels to issue:", error); 67 } 68} 69 70export async function removeLabel( 71 octokit: Octokit, 72 owner: string, 73 repo: string, 74 issueNumber: number, 75 labelName: string, 76) { 77 try { 78 await octokit.rest.issues.removeLabel({ 79 owner, 80 repo, 81 issue_number: issueNumber, 82 name: labelName, 83 }); 84 } catch {} 85}