app/lib/Droid.scala (35 lines of code) (raw):

package lib import org.apache.pekko.stream.Materializer import com.madgag.git._ import com.madgag.scalagithub.GitHub import com.madgag.scalagithub.model.RepoId import lib.sentry.SentryApiClient import play.api.Logger import scala.concurrent.ExecutionContext.Implicits.global import scala.concurrent.Future class Droid( repoSnapshotFactory: RepoSnapshot.Factory, repoUpdater: RepoUpdater, prUpdater: PRUpdater )(implicit g: GitHub, mat: Materializer, sentryApiClientOpt: Option[SentryApiClient] ) { val logger = Logger(getClass) def scan(repoId: RepoId): Future[Seq[PullRequestCheckpointsStateChangeSummary]] = { logger.info(s"Asked to audit ${repoId.fullName}") for { repoSnapshot <- repoSnapshotFactory.snapshot(repoId) pullRequestUpdates <- processMergedPullRequestsOn(repoSnapshot) activeSnapshots <- repoSnapshot.activeSnapshotsF } yield { logger.info(s"${repoId.fullName} has ${activeSnapshots.size} active snapshots : ${activeSnapshots.map(s => s.checkpoint.name -> s.commitIdTry.map(_.map(_.shortName).getOrElse("None"))).toMap}") pullRequestUpdates } } def processMergedPullRequestsOn(repoSnapshot: RepoSnapshot): Future[Seq[PullRequestCheckpointsStateChangeSummary]] = for { _ <- repoUpdater.attemptToCreateMissingLabels(repoSnapshot.repoLevelDetails) summaryOpts <- Future.traverse(repoSnapshot.mergedPullRequestSnapshots)(prSnapshot => prUpdater.process(prSnapshot, repoSnapshot)) } yield summaryOpts.flatten }