import { Octokit, } from "@octokit/rest"; import minimist from "minimist"; const options = minimist(process.argv.slice(2), { boolean: ["help"], string: ["token", "pull", "reviewer", "owner", "repo"], alias: { pr: "pull", h: "help", ["?"]: "help", }, default: { token: process.env.GH_TOKEN, pull: process.env.GH_PULL_NUMBER, reviewer: process.env.REQUESTED_REVIEWER, owner: "microsoft", repo: "TypeScript", }, }); if (options.help) { printHelpAndExit(0); } if (!options.token || !options.pull || !options.reviewer || !options.owner || !options.repo) { console.error("Invalid arguments"); printHelpAndExit(-1); } const pull_number = +options.pull; if (!isFinite(pull_number)) { console.error("Invalid arguments"); printHelpAndExit(-2); } const reviewers = Array.isArray(options.reviewer) ? options.reviewer : [options.reviewer]; main().catch(console.error); async function main() { const gh = new Octokit({ auth: options.token }); const response = await gh.pulls.requestReviewers({ owner: options.owner, repo: options.repo, pull_number, reviewers, }); if (response.status === 201) { console.log(`Added ${reviewers.join(", ")} to ${response.data.url}`); } else { console.log(`Failed to add ${reviewers.join(", ")} to the pull request.`); } } /** * @param {number} exitCode */ function printHelpAndExit(exitCode) { console.log(` usage: request-pr-review.js [options] options: --token Your GitHub auth token. Uses %GH_TOKEN% if present. --owner The GH user or organization for the repo (default: 'microsoft'). --repo The GH repo for the pull request (default: 'TypeScript'). --pull The pull request number. Uses %GH_PULL_NUMBER% if present. --reviewer The GH username of reviewer to add. May be specified multiple times. Uses %REQUESTED_REVIEWER% if present. -h --help Prints this help message. `); return process.exit(exitCode); }