Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/twbs/rorschach.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/scala/com/getbootstrap/rorschach/github/GitHubPullRequestCommenter.scala')
-rw-r--r--src/main/scala/com/getbootstrap/rorschach/github/GitHubPullRequestCommenter.scala61
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}")
+ }
+ }
+ }
+}