private def closeObsoletePullRequests()

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