UNPKG

@xniva/pivotal-github-cli

Version:

A cli tool for Pivotal Tracker users where branch and pull request can be created from story name with reference to it

123 lines (96 loc) 2.76 kB
import axios from "axios"; const repoOwner = process.env.GITHUB_OWNER; const repoName = process.env.GITHUB_REPO; const githubToken = process.env.GITHUB_CREATE_PR_TOKEN; const prPrefix = process.env.PR_PREFIX; const masterBranch = process.env.MAIN_BRANCH; const githubPostRequest = async (url, body, options) => { try { const { data } = await axios.post(url, body, options); return data; } catch (e) { throw e.message; } }; const githubRequest = async (url, type, body = null) => { const options = { headers: { Authorization: `Bearer ${githubToken}`, "Content-Type": "application/json", }, }; let out; if (type === "POST") { out = await githubPostRequest(url, body, options); } return out; }; const getPivotalDataString = ({ storyName, storyId }) => { return `__PivotalTracker:__ [${storyName}](https://www.pivotaltracker.com/story/show/${storyId})`; }; const getBackEndPrDataString = (backendPrNo = null) => { const label = "__BE PR:__ "; if (!backendPrNo) { return label + `_N/A_`; } return ( label + `[#${backendPrNo}](https://github.com/${repoOwner}/${repoName}/pull/${backendPrNo})` ); }; const getDiscussionDataString = (discussionNo = null) => { const label = "__Discussion:__ "; if (!discussionNo) { return label + `_N/A_`; } return ( label + `[#${discussionNo}](https://github.com/${repoOwner}/${repoName}/discussions/${discussionNo})` ); }; const getDesignDataString = (designUrl = null) => { const label = "__Design Reference:__ "; if (!designUrl) { return label + `_N/A_`; } return label + `[here](${designUrl})`; }; const getImageOutDataString = () => { return `__Output:__ _N/A_`; }; const createPullRequest = async ( branchName, commitMessage, storyData, isDraft, backendPrNo = null, discussionNo = null, designUrl = null ) => { const { storyId } = storyData; const url = `https://api.github.com/repos/${repoOwner}/${repoName}/pulls`; const title = `[${prPrefix}]#${storyId} - ${commitMessage}`; const body = `${getPivotalDataString(storyData)} ${getBackEndPrDataString(backendPrNo)} ${getDiscussionDataString(discussionNo)} ${getDesignDataString(designUrl)} ${getImageOutDataString()} `; const data = { title, body, head: branchName, base: masterBranch, draft: isDraft, }; return await githubRequest(url, "POST", data); }; const addReviewers = async (isDraft, pullNumber, reviewers) => { if (isDraft) return; const url = `https://api.github.com/repos/${repoOwner}/${repoName}/pulls/${pullNumber}/requested_reviewers`; const data = { reviewers, }; return await githubRequest(url, "POST", data); }; export { createPullRequest, addReviewers };