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)
}
}