diff options
author | Chris Rebert <code@rebertia.com> | 2014-10-11 02:51:07 +0400 |
---|---|---|
committer | Chris Rebert <code@rebertia.com> | 2014-10-11 02:51:07 +0400 |
commit | fa989f6b95d93b3b6d15b812c29a2402e8e9bbf0 (patch) | |
tree | e85425666452a34723d83983c330cc48fbb8f78b /src | |
parent | 49fd8cbe9fa747d7b27ac1f482a9f5e936bd176f (diff) |
un-hardcode repos to watch; also fixes #18
Diffstat (limited to 'src')
7 files changed, 38 insertions, 30 deletions
diff --git a/src/main/resources/application.conf b/src/main/resources/application.conf index c991fd8..26456d3 100644 --- a/src/main/resources/application.conf +++ b/src/main/resources/application.conf @@ -21,6 +21,8 @@ spray.can { rorschach { default-port = 9090 + close-bad-pull-requests = off + github-repos-to-watch = ["cvrebert/rorschach-test"] username = throwaway9475947 password = XXXXXXXX web-hook-secret-key = abcdefg diff --git a/src/main/scala/com/getbootstrap/rorschach/github/GitHubActorWithLogging.scala b/src/main/scala/com/getbootstrap/rorschach/github/GitHubActorWithLogging.scala index d2ab6f6..190c559 100644 --- a/src/main/scala/com/getbootstrap/rorschach/github/GitHubActorWithLogging.scala +++ b/src/main/scala/com/getbootstrap/rorschach/github/GitHubActorWithLogging.scala @@ -1,12 +1,10 @@ package com.getbootstrap.rorschach.github -import org.eclipse.egit.github.core.RepositoryId import org.eclipse.egit.github.core.client.GitHubClient import com.getbootstrap.rorschach.server.{Settings, ActorWithLogging} abstract class GitHubActorWithLogging extends ActorWithLogging { - private val settings = Settings(context.system) - protected val BootstrapRepoId = new RepositoryId("twbs", "bootstrap") + protected val settings = Settings(context.system) protected val gitHubClient = new GitHubClient() gitHubClient.setCredentials(settings.BotUsername, settings.BotPassword) } diff --git a/src/main/scala/com/getbootstrap/rorschach/github/GitHubPullRequestCommenter.scala b/src/main/scala/com/getbootstrap/rorschach/github/GitHubPullRequestCommenter.scala index 77171c2..7d394c6 100644 --- a/src/main/scala/com/getbootstrap/rorschach/github/GitHubPullRequestCommenter.scala +++ b/src/main/scala/com/getbootstrap/rorschach/github/GitHubPullRequestCommenter.scala @@ -31,7 +31,7 @@ class GitHubPullRequestCommenter extends GitHubActorWithLogging { } override def receive = { - case PullRequestFeedback(prNum, requester, messages) => { + case PullRequestFeedback(repo, prNum, requester, messages) => { val username = requester.getLogin val messagesMarkdown = messages.map{ "* " + _ }.mkString("\n") val commentMarkdown = s""" @@ -47,14 +47,16 @@ class GitHubPullRequestCommenter extends GitHubActorWithLogging { |(*Please note that this is a [fully automated](https://github.com/cvrebert/rorschach) comment.*) """.stripMargin - tryToCommentOn(BootstrapRepoId, prNum, commentMarkdown) match { + tryToCommentOn(repo, 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}") + if (settings.CloseBadPullRequests) { + tryToClose(repo, 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}") + } } } } diff --git a/src/main/scala/com/getbootstrap/rorschach/github/PullRequestFeedback.scala b/src/main/scala/com/getbootstrap/rorschach/github/PullRequestFeedback.scala index 511fe48..05ff63d 100644 --- a/src/main/scala/com/getbootstrap/rorschach/github/PullRequestFeedback.scala +++ b/src/main/scala/com/getbootstrap/rorschach/github/PullRequestFeedback.scala @@ -1,8 +1,9 @@ package com.getbootstrap.rorschach.github -import org.eclipse.egit.github.core.User +import org.eclipse.egit.github.core.{RepositoryId,User} case class PullRequestFeedback( + repo: RepositoryId, prNum: PullRequestNumber, requester: User, messages: Seq[String] diff --git a/src/main/scala/com/getbootstrap/rorschach/server/PullRequestEventHandler.scala b/src/main/scala/com/getbootstrap/rorschach/server/PullRequestEventHandler.scala index b2ed228..4e5591f 100644 --- a/src/main/scala/com/getbootstrap/rorschach/server/PullRequestEventHandler.scala +++ b/src/main/scala/com/getbootstrap/rorschach/server/PullRequestEventHandler.scala @@ -25,29 +25,30 @@ class PullRequestEventHandler(commenter: ActorRef) extends GitHubActorWithLoggin case pr: PullRequest => { val bsBase = pr.getBase val prHead = pr.getHead - bsBase.getRepo.repositoryId match { - case BootstrapRepoId => { - val base = bsBase.commitSha - val head = prHead.commitSha - val foreignRepoId = prHead.getRepo.repositoryId - - val fileMessages = modifiedFilesFor(foreignRepoId, base, head) match { - case Failure(exc) => { - log.error(exc, s"Could not get modified files for commits ${base}...${head} for ${foreignRepoId}") - Nil - } - case Success(modifiedFiles) => { - ModifiedFilesAuditor.audit(modifiedFiles) - } + val destinationRepo = bsBase.getRepo.repositoryId + if (settings.repoIds contains destinationRepo) { + val base = bsBase.commitSha + val head = prHead.commitSha + val foreignRepoId = prHead.getRepo.repositoryId + + val fileMessages = modifiedFilesFor(foreignRepoId, base, head) match { + case Failure(exc) => { + log.error(exc, s"Could not get modified files for commits ${base}...${head} for ${foreignRepoId}") + Nil } - val branchMessages = BaseAndHeadBranchesAuditor.audit(baseBranch = bsBase.getRef, headBranch = prHead.getRef) - - val allMessages = fileMessages ++ branchMessages - if (allMessages.nonEmpty) { - commenter ! PullRequestFeedback(pr.number, pr.getUser, allMessages) + case Success(modifiedFiles) => { + ModifiedFilesAuditor.audit(modifiedFiles) } } - case otherRepo => log.error(s"Received event from GitHub about irrelevant repository: ${otherRepo}") + val branchMessages = BaseAndHeadBranchesAuditor.audit(baseBranch = bsBase.getRef, headBranch = prHead.getRef) + + val allMessages = fileMessages ++ branchMessages + if (allMessages.nonEmpty) { + commenter ! PullRequestFeedback(destinationRepo, pr.number, pr.getUser, allMessages) + } + } + else { + log.error(s"Received event from GitHub about irrelevant repository: ${destinationRepo}") } } } diff --git a/src/main/scala/com/getbootstrap/rorschach/server/RorschachActor.scala b/src/main/scala/com/getbootstrap/rorschach/server/RorschachActor.scala index 4a3751b..96b1118 100644 --- a/src/main/scala/com/getbootstrap/rorschach/server/RorschachActor.scala +++ b/src/main/scala/com/getbootstrap/rorschach/server/RorschachActor.scala @@ -8,7 +8,7 @@ import spray.http._ class RorschachActor(protected val pullRequestEventHandler: ActorRef) extends ActorWithLogging with HttpService { import GitHubPullRequestWebHooksDirectives.authenticatedPullRequestEvent - val settings = Settings(context.system) + private val settings = Settings(context.system) override def actorRefFactory = context override def receive = runRoute(theOnlyRoute) diff --git a/src/main/scala/com/getbootstrap/rorschach/server/Settings.scala b/src/main/scala/com/getbootstrap/rorschach/server/Settings.scala index 20788d8..37375aa 100644 --- a/src/main/scala/com/getbootstrap/rorschach/server/Settings.scala +++ b/src/main/scala/com/getbootstrap/rorschach/server/Settings.scala @@ -1,5 +1,6 @@ package com.getbootstrap.rorschach.server +import scala.collection.JavaConverters._ import com.typesafe.config.Config import akka.actor.ActorSystem import akka.actor.Extension @@ -7,13 +8,16 @@ import akka.actor.ExtensionId import akka.actor.ExtensionIdProvider import akka.actor.ExtendedActorSystem import akka.util.ByteString +import org.eclipse.egit.github.core.RepositoryId import com.getbootstrap.rorschach.util.Utf8String class SettingsImpl(config: Config) extends Extension { + val repoIds: Set[RepositoryId] = config.getStringList("rorschach.github-repos-to-watch").asScala.toSet.map{ (repoFullName: String) => RepositoryId.createFromId(repoFullName) } val BotUsername: String = config.getString("rorschach.username") val BotPassword: String = config.getString("rorschach.password") val WebHookSecretKey: ByteString = ByteString(config.getString("rorschach.web-hook-secret-key").utf8Bytes) val DefaultPort: Int = config.getInt("rorschach.default-port") + val CloseBadPullRequests: Boolean = config.getBoolean("rorschach.close-bad-pull-requests") } object Settings extends ExtensionId[SettingsImpl] with ExtensionIdProvider { override def lookup() = Settings |