diff options
Diffstat (limited to 'src/main/scala/com/getbootstrap/rorschach/github/GitHubPullRequestCommenter.scala')
-rw-r--r-- | src/main/scala/com/getbootstrap/rorschach/github/GitHubPullRequestCommenter.scala | 61 |
1 files changed, 61 insertions, 0 deletions
diff --git a/src/main/scala/com/getbootstrap/rorschach/github/GitHubPullRequestCommenter.scala b/src/main/scala/com/getbootstrap/rorschach/github/GitHubPullRequestCommenter.scala new file mode 100644 index 0000000..77171c2 --- /dev/null +++ b/src/main/scala/com/getbootstrap/rorschach/github/GitHubPullRequestCommenter.scala @@ -0,0 +1,61 @@ +package com.getbootstrap.rorschach.github + +import scala.util.{Try,Failure,Success} +import org.eclipse.egit.github.core.service.{PullRequestService, IssueService} +import org.eclipse.egit.github.core.RepositoryId +import com.getbootstrap.rorschach.github.util.RichPullRequest +import com.getbootstrap.rorschach.server.Settings + + +class GitHubPullRequestCommenter extends GitHubActorWithLogging { + // val settings = Settings(context.system) + + private def tryToCommentOn(repo: RepositoryId, prNum: PullRequestNumber, commentMarkdown: String) = { + val issueService = new IssueService(gitHubClient) + Try { issueService.createComment(repo, prNum.number, commentMarkdown) } + } + + private def tryToClose(repo: RepositoryId, prNum: PullRequestNumber): Try[None.type] = { + val prService = new PullRequestService(gitHubClient) + val prTry = Try { prService.getPullRequest(repo, prNum.number) } match { + case fetchFail@Failure(exc) => { + log.error(exc, s"Error fetching pull request ${prNum} in order to close it") + fetchFail + } + case Success(pr) => { + pr.status = Closed + Try { prService.editPullRequest(repo, pr) } + } + } + prTry.map{ x => None } + } + + override def receive = { + case PullRequestFeedback(prNum, requester, messages) => { + val username = requester.getLogin + val messagesMarkdown = messages.map{ "* " + _ }.mkString("\n") + val commentMarkdown = s""" + |Hi @${username}! + | + |Thanks for wanting to contribute to Bootstrap by sending this pull request. + |Unfortunately, your pull request seems to have some problems: + |${messagesMarkdown} + | + |You'll need to **fix these mistakes** and revise your pull request before we can proceed further. + |Thanks! + | + |(*Please note that this is a [fully automated](https://github.com/cvrebert/rorschach) comment.*) + """.stripMargin + + tryToCommentOn(BootstrapRepoId, prNum, commentMarkdown) match { + case Success(comment) => log.info(s"Successfully posted comment ${comment.getUrl} for ${prNum}") + case Failure(exc) => log.error(exc, s"Error posting comment for ${prNum}") + } + + tryToClose(BootstrapRepoId, prNum) match { + case Success(_) => log.info(s"Successfully closed ${prNum} due to failed audit(s)") + case Failure(exc) => log.error(exc, s"Error closing ${prNum}") + } + } + } +} |