in modules/core/src/main/scala/org/scalasteward/core/nurture/NurtureAlg.scala [92:119]
private def processUpdate(data: UpdateData): F[ProcessResult] =
for {
_ <- logger.info(s"Process update ${data.update.show}")
head = config.tpe.pullRequestHeadFor(data.fork, data.updateBranch)
pullRequests <- forgeApiAlg.listPullRequests(data.repo, head, data.baseBranch)
result <- pullRequests.headOption match {
case Some(pr) if pr.state.isClosed && data.update.isInstanceOf[Update.Single] =>
logger.info(s"PR ${pr.html_url} is closed") >>
deleteRemoteBranch(data.repo, data.updateBranch).as(Ignored)
case Some(pr) if !pr.state.isClosed =>
logger.info(s"Found PR ${pr.html_url}") >> updatePullRequest(data, pr.number)
case _ =>
applyNewUpdate(data).flatTap {
case Created(newPrNumber) => closeObsoletePullRequests(data, newPrNumber)
case _ => F.unit
}
}
_ <- pullRequests.headOption.traverse_ { pr =>
val prData = PullRequestData[Id](
pr.html_url,
data.baseSha1,
data.update,
pr.state,
pr.number,
data.updateBranch
)
pullRequestRepository.createOrUpdate(data.repo, prData)
}