@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
JavaScript
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 };