app/lib/sentry/SentryReporter.scala (47 lines of code) (raw):

package lib.sentry import com.madgag.git._ import com.madgag.scalagithub.model.PullRequest import io.lemonlabs.uri.Uri import lib.sentry.model.CreateRelease import lib.{PullRequestCheckpointsStateChangeSummary, RepoLevelDetails, RepoSnapshot, UpdateReporter} import org.eclipse.jgit.revwalk.RevWalk import play.api.Logging import scala.concurrent.Future class SentryReporter( sentry: SentryApiClient ) extends UpdateReporter with Logging { override def report(repoSnapshot: RepoSnapshot, pr: PullRequest, checkpointsChangeSummary: PullRequestCheckpointsStateChangeSummary): Unit = { if (checkpointsChangeSummary.newlyMerged) { logger.info(s"action taking: ${pr.prId} is newly merged") val repoLevelDetails = repoSnapshot.repoLevelDetails for { sentryRelease <- sentryReleaseOption(repoSnapshot, pr) } { val ref = lib.sentry.model.Ref( repoLevelDetails.repo.repoId, sentryRelease.mergeCommit, sentryRelease.mergeCommit.asRevCommit(new RevWalk(repoLevelDetails.gitRepo.getObjectDatabase.threadLocalResources.reader())).getParents.headOption) logger.info(s"${pr.prId.slug} : ref=$ref") sentry.createRelease(CreateRelease( sentryRelease.version, Some(sentryRelease.version), Some(Uri.parse(pr.html_url)), sentryRelease.projects, refs=Seq(ref) )) } } } private def sentryReleaseOption(repoSnapshot: RepoSnapshot, pr: PullRequest): Option[PRSentryRelease] = { val sentryProjects = for { configs <- repoSnapshot.activeConfByPullRequest.get(pr).toSeq config <- configs sentryConf <- config.sentry.toSeq sentryProject <- sentryConf.projects } yield sentryProject val sentryReleaseOpt = for { mergeCommit <- pr.merge_commit_sha if sentryProjects.nonEmpty } yield PRSentryRelease(mergeCommit, sentryProjects) sentryReleaseOpt } }