in modules/core/src/main/scala/org/scalasteward/core/nurture/NurtureAlg.scala [122:153]
private def closeObsoletePullRequests(data: UpdateData, newNumber: PullRequestNumber): F[Unit] =
data.update.on(
update = pullRequestRepository
.getObsoleteOpenPullRequests(data.repo, _)
.flatMap(_.traverse_(oldPr => closeObsoletePullRequest(data, newNumber, oldPr))),
// We don't support closing obsolete PRs for `GroupedUpdate`s
grouped = _ => Applicative[F].unit
)
private def closeObsoletePullRequest(
data: UpdateData,
newNumber: PullRequestNumber,
oldPr: PullRequestData[Id]
): F[Unit] =
logger.attemptWarn.label_(
s"Closing obsolete PR ${oldPr.url.renderString} for ${oldPr.update.show}"
) {
for {
_ <- pullRequestRepository.changeState(data.repo, oldPr.url, PullRequestState.Closed)
comment = s"Superseded by ${forgeApiAlg.referencePullRequest(newNumber)}."
_ <- forgeApiAlg.commentPullRequest(data.repo, oldPr.number, comment)
oldRemoteBranch = oldPr.updateBranch.withPrefix("origin/")
oldBranchExists <- gitAlg.branchExists(data.repo, oldRemoteBranch)
authors <-
if (oldBranchExists) gitAlg.branchAuthors(data.repo, oldRemoteBranch, data.baseBranch)
else List.empty.pure[F]
_ <- F.whenA(authors.size <= 1) {
forgeApiAlg.closePullRequest(data.repo, oldPr.number) >>
deleteRemoteBranch(data.repo, oldPr.updateBranch)
}
} yield ()
}