UNPKG

@atomist/automation-client

Version:

Atomist API for software low-level client

51 lines (47 loc) 1.7 kB
import { failureOn, successOn, } from "../../action/ActionResult"; import { deepLink, Issue, raiseIssue, } from "../../util/gitHub"; import { GitHubRepoRef, isGitHubRepoRef, } from "../common/GitHubRepoRef"; import { EditorOrReviewerParameters } from "../common/params/BaseEditorOrReviewerParameters"; import { TokenCredentials } from "../common/ProjectOperationCredentials"; import { ReviewRouter } from "./reviewerToCommand"; import { ProjectReview, ReviewComment, } from "./ReviewResult"; /** * Create an issue from a review, using Markdown * @param {ProjectReview} pr * @param {AllReposByDefaultParameters} params * @param {string} name * @return {any} */ export const issueRaisingReviewRouter: ReviewRouter<EditorOrReviewerParameters> = (pr: ProjectReview, params: EditorOrReviewerParameters, name: string) => { if (isGitHubRepoRef(pr.repoId)) { const issue = toIssue(pr, name); return raiseIssue((params.targets.credentials as TokenCredentials).token, pr.repoId, issue) .then(ap => successOn(pr.repoId)); } else { return Promise.resolve(failureOn(pr.repoId, new Error(`Not a GitHub Repo: ${JSON.stringify(pr.repoId)}`))); } }; function toIssue(pr: ProjectReview, name: string): Issue { return { title: `${pr.comments.length} problems found by ${name}`, body: "Problems:\n\n" + pr.comments.map(c => toMarkdown(pr.repoId as GitHubRepoRef, c)).join("\n"), }; } function toMarkdown(grr: GitHubRepoRef, rc: ReviewComment) { return `-\t**${rc.severity}** - ${rc.category}: [${rc.detail}](${deepLink(grr, rc.sourceLocation)})`; }