def actionTaker()

in app/lib/PRUpdater.scala [73:138]


  def actionTaker(
    checkpointsChangeSummary: PullRequestCheckpointsStateChangeSummary,
    repoSnapshot: RepoSnapshot
  )(implicit
    g: GitHub,
    sentryApiClientOpt: Option[SentryApiClient]
  ): Unit = {
    val pr = checkpointsChangeSummary.prCheckpointDetails.pr
    val now = Instant.now()

    def sentryReleaseOpt(): Option[PRSentryRelease] = {
      val sentryProjects = for {
        configs <- repoSnapshot.activeConfByPullRequest.get(pr).toSeq
        config <- configs
        sentryConf <- config.sentry.toSeq
        sentryProject <- sentryConf.projects
      } yield sentryProject

      for {
        mergeCommit <- pr.merge_commit_sha if sentryProjects.nonEmpty
      } yield PRSentryRelease(mergeCommit, sentryProjects)
    }

    val newlySeenSnapshots = checkpointsChangeSummary.changedByState.get(Seen).toSeq.flatten

    logger.info(s"action taking: ${pr.prId} newlySeenSnapshots = $newlySeenSnapshots")

    val mergeToNow = java.time.Duration.between(pr.merged_at.get.toInstant, now)
    val previouslyTouchedByProut = checkpointsChangeSummary.oldState.statusByCheckpoint.nonEmpty
    if (previouslyTouchedByProut || mergeToNow < WorthyOfCommentWindow) {
      logger.trace(s"changedSnapshotsByState : ${checkpointsChangeSummary.changedByState}")

      def commentOn(status: PullRequestCheckpointStatus, additionalAdvice: Option[String] = None) = {

        lazy val fileFinder = repoSnapshot.repoLevelDetails.createFileFinder()

        for (changedSnapshots <- checkpointsChangeSummary.changedByState.get(status)) {

          val checkpoints = changedSnapshots.map(_.snapshot.checkpoint.nameMarkdown).mkString(", ")

          val customAdvices = for {
            s <- changedSnapshots
            messages <- s.snapshot.checkpoint.details.messages
            path <- messages.filePathforStatus(status)
            message <- fileFinder.read(path)
          } yield message
          val advices = if(customAdvices.nonEmpty) customAdvices else CheckpointMessages.defaults.get(status).toSet
          val advice = (advices ++ additionalAdvice).mkString("\n\n")

          pr.comments2.create(CreateComment(s"${status.name} on $checkpoints (${responsibilityAndRecencyFor(pr)}) $advice"))
        }
      }

      for (updateReporter <- repoSnapshot.updateReporters) {
        updateReporter.report(repoSnapshot, pr, checkpointsChangeSummary)
      }

      val sentryDetails: Option[String] = for {
        sentry <- sentryApiClientOpt
        sentryRelease <- sentryReleaseOpt()
      } yield sentryRelease.detailsMarkdown(sentry.org)

      commentOn(Seen, sentryDetails)
      commentOn(Overdue)
    }
  }