UNPKG

git-pr-ai

Version:

A tool to automatically extract JIRA ticket numbers from branch names and create GitHub/GitLab PRs

74 lines (72 loc) 2.71 kB
#!/usr/bin/env node import { loadConfig } from "./config-BqoKKiEi.js"; //#region src/jira.ts function extractJiraTicket(branchName) { const jiraPattern = /([A-Z0-9]+-\d+)/; const match = branchName.match(jiraPattern); if (!match) { console.log("ℹ️ No JIRA ticket found in branch name, proceeding without it"); return null; } return match[1]; } function createJiraApiUrl(baseUrl, ticketKey) { return `${baseUrl}/rest/api/3/issue/${ticketKey}?fields=summary,description,issuetype,priority,status,assignee,labels`; } function createJiraAuthHeader(email, apiToken) { return Buffer.from(`${email}:${apiToken}`).toString("base64"); } async function fetchJiraTicketData(url, authHeader) { const response = await fetch(url, { headers: { Authorization: `Basic ${authHeader}`, Accept: "application/json" } }); if (!response.ok) throw new Error(`HTTP ${response.status}`); const data = await response.json(); return data; } async function getJiraTicketTitle(ticketKey) { const config = await loadConfig(); if (!config.jira) { console.log("ℹ️ No JIRA configuration found, using ticket key only"); return null; } try { const { baseUrl, email, apiToken } = config.jira; const apiUrl = createJiraApiUrl(baseUrl, ticketKey); const authHeader = createJiraAuthHeader(email, apiToken); const data = await fetchJiraTicketData(apiUrl, authHeader); return data.fields.summary ?? null; } catch (error) { console.warn(`⚠️ Error fetching JIRA ticket ${ticketKey}:`, error instanceof Error ? error.message : String(error)); return null; } } async function getJiraTicketDetails(ticketKey) { const config = await loadConfig(); if (!config.jira) { console.log("ℹ️ No JIRA configuration found"); return null; } try { const { baseUrl, email, apiToken } = config.jira; const apiUrl = createJiraApiUrl(baseUrl, ticketKey); const authHeader = createJiraAuthHeader(email, apiToken); const data = await fetchJiraTicketData(apiUrl, authHeader); return { key: ticketKey, summary: data.fields.summary || "", description: (typeof data.fields.description === "string" ? data.fields.description : data.fields.description?.content?.[0]?.content?.[0]?.text) || "", issueType: data.fields.issuetype?.name || "", priority: data.fields.priority?.name || "", status: data.fields.status?.name || "", assignee: data.fields.assignee?.displayName, labels: data.fields.labels?.map((label) => String(label)) || [] }; } catch (error) { console.warn(`⚠️ Error fetching JIRA ticket ${ticketKey}:`, error instanceof Error ? error.message : String(error)); return null; } } //#endregion export { extractJiraTicket, getJiraTicketDetails, getJiraTicketTitle };