diff options
3 files changed, 56 insertions, 4 deletions
diff --git a/src/main/scala/com/getbootstrap/savage/github/pr_action/PullRequestAction.scala b/src/main/scala/com/getbootstrap/savage/github/pr_action/PullRequestAction.scala new file mode 100644 index 0000000..dc00ca0 --- /dev/null +++ b/src/main/scala/com/getbootstrap/savage/github/pr_action/PullRequestAction.scala @@ -0,0 +1,44 @@ +package com.getbootstrap.savage.github.pr_action + +object PullRequestAction { + def apply(name: String): Option[PullRequestAction] = { + name match { + case Assigned.Name => Some(Assigned) + case Unassigned.Name => Some(Unassigned) + case Labeled.Name => Some(Labeled) + case Unlabeled.Name => Some(Unlabeled) + case Opened.Name => Some(Opened) + case Closed.Name => Some(Closed) + case Reopened.Name => Some(Reopened) + case Synchronize.Name => Some(Synchronize) + case _ => None + } + } +} +sealed trait PullRequestAction { + def Name: String +} +object Assigned extends PullRequestAction { + override val Name = "assigned" +} +object Unassigned extends PullRequestAction { + override val Name = "unassigned" +} +object Labeled extends PullRequestAction { + override val Name = "labeled" +} +object Unlabeled extends PullRequestAction { + override val Name = "unlabeled" +} +object Opened extends PullRequestAction { + override val Name = "opened" +} +object Closed extends PullRequestAction { + override val Name = "closed" +} +object Reopened extends PullRequestAction { + override val Name = "reopened" +} +object Synchronize extends PullRequestAction { + override val Name = "synchronize" +} diff --git a/src/main/scala/com/getbootstrap/savage/github/util/package.scala b/src/main/scala/com/getbootstrap/savage/github/util/package.scala index 520378c..7a5bd39 100644 --- a/src/main/scala/com/getbootstrap/savage/github/util/package.scala +++ b/src/main/scala/com/getbootstrap/savage/github/util/package.scala @@ -1,6 +1,8 @@ package com.getbootstrap.savage.github import org.eclipse.egit.github.core._ +import org.eclipse.egit.github.core.event.PullRequestPayload +import com.getbootstrap.savage.github.pr_action.PullRequestAction package object util { private val SafeRepoRegex = "^[0-9a-zA-Z_-]+/[0-9a-zA-Z_-]+$".r @@ -21,10 +23,15 @@ package object util { } implicit class RichPullRequest(pr: PullRequest) { + import org.eclipse.egit.github.core.service.IssueService def number: PullRequestNumber = PullRequestNumber(pr.getNumber).get + def isOpen: Boolean = (pr.getState == IssueService.STATE_OPEN) } implicit class RichRepositoryId(repoId: RepositoryId) { def asPushRemote: String = s"git@github.com:${repoId.generateId}.git" def asPullRemote: String = s"https://github.com/${repoId.generateId}.git" } + implicit class RichPullRequestPayload(payload: PullRequestPayload) { + def action: PullRequestAction = PullRequestAction(payload.getAction).get + } } diff --git a/src/main/scala/com/getbootstrap/savage/server/SavageWebService.scala b/src/main/scala/com/getbootstrap/savage/server/SavageWebService.scala index 2f81f6d..511dc3d 100644 --- a/src/main/scala/com/getbootstrap/savage/server/SavageWebService.scala +++ b/src/main/scala/com/getbootstrap/savage/server/SavageWebService.scala @@ -5,7 +5,8 @@ import akka.actor.ActorRef import spray.routing._ import spray.http._ import com.getbootstrap.savage.PullRequestBuildResult -import com.getbootstrap.savage.github.{BranchDeletionRequest, PullRequestNumber, commit_status} +import com.getbootstrap.savage.github.{BranchDeletionRequest, PullRequestNumber, commit_status, pr_action} +import com.getbootstrap.savage.github.util._ class SavageWebService( protected val pullRequestEventHandler: ActorRef, @@ -44,10 +45,10 @@ class SavageWebService( } case "pull_request" => { authenticatedPullRequestEvent(settings.GitHubWebHookSecretKey.toArray) { event => - event.getAction match { - case "opened" | "synchronize" => { + event.action match { + case pr_action.Opened | pr_action.Synchronize => { val pr = event.getPullRequest - if (pr.getState == "open") { + if (pr.isOpen) { pullRequestEventHandler ! pr complete(StatusCodes.OK) } |