Skip to content

Commit ecd2d10

Browse files
refactoring: remove ForgeApiAlg.labelPullRequest
ForgeApiAlg.labelPullRequest only used during creation of pull request. Some providers such as GitLab, Azure, Gitea can add labels to PRs in the same API call used for PR creation and it's unreasonable to make it as a separate call. For providers that do not support it, labelPullRequest() is kept as private member
1 parent 144ebbd commit ecd2d10

22 files changed

+185
-110
lines changed

modules/core/src/main/scala/org/scalasteward/core/forge/ForgeApiAlg.scala

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -40,8 +40,6 @@ trait ForgeApiAlg[F[_]] {
4040

4141
def commentPullRequest(repo: Repo, number: PullRequestNumber, comment: String): F[Comment]
4242

43-
def labelPullRequest(repo: Repo, number: PullRequestNumber, labels: List[String]): F[Unit]
44-
4543
final def createForkOrGetRepo(repo: Repo, doNotFork: Boolean): F[RepoOut] =
4644
if (doNotFork) getRepo(repo) else createFork(repo)
4745

modules/core/src/main/scala/org/scalasteward/core/forge/azurerepos/AzureReposApiAlg.scala

Lines changed: 0 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,6 @@ package org.scalasteward.core.forge.azurerepos
1818

1919
import cats.MonadThrow
2020
import cats.syntax.all._
21-
import io.circe.Json
22-
import io.circe.syntax.KeyOps
2321
import org.http4s.{Request, Uri}
2422
import org.scalasteward.core.application.Config.AzureReposCfg
2523
import org.scalasteward.core.data.Repo
@@ -90,20 +88,6 @@ final class AzureReposApiAlg[F[_]](
9088
modify(repo)
9189
)
9290

93-
// https://docs.microsoft.com/en-us/rest/api/azure/devops/git/pull-request-labels/create?view=azure-devops-rest-7.1
94-
override def labelPullRequest(
95-
repo: Repo,
96-
number: PullRequestNumber,
97-
labels: List[String]
98-
): F[Unit] =
99-
client
100-
.postWithBody[Json, Json](
101-
url.labelPullRequest(repo, number),
102-
Json.obj("name" := labels.mkString("-")),
103-
modify(repo)
104-
)
105-
.void
106-
10791
private def warnIfAssigneesAreUsed =
10892
logger.warn("assignees are not supported by AzureRepos")
10993

modules/core/src/main/scala/org/scalasteward/core/forge/azurerepos/JsonCodec.scala

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ final private[azurerepos] case class PullRequestPayload(
2828
sourceRefName: String,
2929
targetRefName: String,
3030
title: String,
31+
labels: Option[List[String]],
3132
description: String
3233
)
3334

@@ -39,6 +40,7 @@ private[azurerepos] object PullRequestPayload {
3940
sourceRefName = withPrefix(data.head),
4041
targetRefName = data.base.name,
4142
title = data.title,
43+
labels = Option.when(data.labels.nonEmpty)(data.labels),
4244
description = data.body
4345
)
4446
}

modules/core/src/main/scala/org/scalasteward/core/forge/azurerepos/Url.scala

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,4 @@ class Url(apiHost: Uri, organization: String) {
4949

5050
def commentPullRequest(repo: Repo, number: PullRequestNumber): Uri =
5151
pullRequests(repo) / number.value / "threads"
52-
53-
def labelPullRequest(repo: Repo, number: PullRequestNumber): Uri =
54-
pullRequests(repo) / number.value / "labels"
5552
}

modules/core/src/main/scala/org/scalasteward/core/forge/bitbucket/BitbucketApiAlg.scala

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,7 @@ class BitbucketApiAlg[F[_]](
9292
for {
9393
_ <- F.whenA(data.assignees.nonEmpty)(warnIfAssigneesAreUsed)
9494
_ <- F.whenA(data.reviewers.nonEmpty)(warnIfReviewersAreUsed)
95+
_ <- F.whenA(data.labels.nonEmpty)(warnIfLabelsAreUsed)
9596
pullRequestOut <- create
9697
} yield pullRequestOut
9798
}
@@ -132,11 +133,7 @@ class BitbucketApiAlg[F[_]](
132133
)
133134
.map((cc: CreateComment) => Comment(cc.content.raw))
134135

135-
override def labelPullRequest(
136-
repo: Repo,
137-
number: PullRequestNumber,
138-
labels: List[String]
139-
): F[Unit] =
136+
private def warnIfLabelsAreUsed =
140137
logger.warn(
141138
"Bitbucket does not support PR labels, remove --add-labels to make this warning disappear"
142139
)

modules/core/src/main/scala/org/scalasteward/core/forge/bitbucketserver/BitbucketServerApiAlg.scala

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,7 @@ final class BitbucketServerApiAlg[F[_]](
7070
reviewers <- useDefaultReviewers(repo)
7171
_ <- F.whenA(data.assignees.nonEmpty)(warnIfAssigneesAreUsed)
7272
_ <- F.whenA(data.reviewers.nonEmpty)(warnIfReviewersAreUsed)
73+
_ <- F.whenA(data.labels.nonEmpty)(warnIfLabelsAreUsed)
7374
req = Json.NewPR(
7475
title = data.title,
7576
description = data.body,
@@ -121,11 +122,7 @@ final class BitbucketServerApiAlg[F[_]](
121122
.get[Json.Page[Json.PR]](url.listPullRequests(repo, s"refs/heads/$head"), modify(repo))
122123
.map(_.values.map(_.toPullRequestOut))
123124

124-
override def labelPullRequest(
125-
repo: Repo,
126-
number: PullRequestNumber,
127-
labels: List[String]
128-
): F[Unit] =
125+
private def warnIfLabelsAreUsed =
129126
logger.warn(
130127
"Bitbucket does not support PR labels, remove --add-labels to make this warning disappear"
131128
)

modules/core/src/main/scala/org/scalasteward/core/forge/data/NewPullRequestData.scala

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -223,6 +223,7 @@ object NewPullRequestData {
223223
artifactIdToUrl: Map[String, Uri] = Map.empty,
224224
artifactIdToUpdateInfoUrls: Map[String, List[UpdateInfoUrl]] = Map.empty,
225225
filesWithOldVersion: List[String] = List.empty,
226+
addLabels: Boolean = false,
226227
labels: List[String] = List.empty
227228
): NewPullRequestData =
228229
NewPullRequestData(
@@ -243,7 +244,7 @@ object NewPullRequestData {
243244
),
244245
head = branchName,
245246
base = data.baseBranch,
246-
labels = labels,
247+
labels = if (addLabels) labels else List.empty,
247248
assignees = data.repoConfig.assignees,
248249
reviewers = data.repoConfig.reviewers
249250
)

modules/core/src/main/scala/org/scalasteward/core/forge/gitea/GiteaApiAlg.scala

Lines changed: 0 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -255,25 +255,6 @@ final class GiteaApiAlg[F[_]: HttpJsonClient](
255255
}
256256
}
257257

258-
override def labelPullRequest(
259-
repo: Repo,
260-
number: PullRequestNumber,
261-
labels: List[String]
262-
): F[Unit] = {
263-
def attachLabels(labels: Vector[Int]): F[Unit] =
264-
if (labels.nonEmpty)
265-
client
266-
.postWithBody[Vector[Label], AttachLabelReq](
267-
url.pullRequestLabels(repo, number),
268-
AttachLabelReq(labels),
269-
modify(repo)
270-
)
271-
.void
272-
else ().pure[F]
273-
274-
getOrCreateLabel(repo, labels.toVector) >>= attachLabels
275-
}
276-
277258
def getOrCreateLabel(repo: Repo, labels: Vector[String]): F[Vector[Int]] =
278259
listLabels(repo).flatMap { repoLabels =>
279260
val existing = repoLabels.filter(label => labels.contains(label.name))

modules/core/src/main/scala/org/scalasteward/core/forge/github/GitHubApiAlg.scala

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@ final class GitHubApiAlg[F[_]](
5353

5454
for {
5555
pullRequestOut <- create
56+
_ <- F.whenA(data.labels.nonEmpty)(labelPullRequest(repo, pullRequestOut.number, data.labels))
5657
_ <-
5758
F.whenA(data.assignees.nonEmpty)(addAssignees(repo, pullRequestOut.number, data.assignees))
5859
_ <-
@@ -92,7 +93,7 @@ final class GitHubApiAlg[F[_]](
9293
.postWithBody(url.comments(repo, number), Comment(comment), modify(repo))
9394

9495
/** https://docs.github.com/en/rest/reference/issues#add-labels-to-an-issue */
95-
override def labelPullRequest(
96+
private def labelPullRequest(
9697
repo: Repo,
9798
number: PullRequestNumber,
9899
labels: List[String]

modules/core/src/main/scala/org/scalasteward/core/forge/gitlab/GitLabApiAlg.scala

Lines changed: 2 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ final private[gitlab] case class MergeRequestPayload(
3636
id: String,
3737
title: String,
3838
description: String,
39+
labels: Option[List[String]],
3940
assignee_ids: Option[List[Int]],
4041
reviewer_ids: Option[List[Int]],
4142
target_project_id: Long,
@@ -58,6 +59,7 @@ private[gitlab] object MergeRequestPayload {
5859
description = data.body,
5960
assignee_ids = Option.when(assignees.nonEmpty)(assignees),
6061
reviewer_ids = Option.when(reviewers.nonEmpty)(reviewers),
62+
labels = Option.when(data.labels.nonEmpty)(data.labels),
6163
target_project_id = projectId,
6264
source_branch = data.head,
6365
target_branch = data.base
@@ -329,17 +331,4 @@ final class GitLabApiAlg[F[_]: Parallel](
329331
): F[Comment] =
330332
client.postWithBody(url.comments(repo, number), Comment(comment), modify(repo))
331333

332-
// https://docs.gitlab.com/ee/api/merge_requests.html#update-mr
333-
override def labelPullRequest(
334-
repo: Repo,
335-
number: PullRequestNumber,
336-
labels: List[String]
337-
): F[Unit] =
338-
client
339-
.putWithBody[Json, Json](
340-
url.existingMergeRequest(repo, number),
341-
Json.obj("labels" := labels.mkString(",")),
342-
modify(repo)
343-
)
344-
.void
345334
}

modules/core/src/main/scala/org/scalasteward/core/nurture/NurtureAlg.scala

Lines changed: 8 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -234,13 +234,14 @@ final class NurtureAlg[F[_]](config: ForgeCfg)(implicit
234234
allLabels = labelsFor(data.update, edits, filesWithOldVersion, artifactIdToVersionScheme)
235235
labels = filterLabels(allLabels, data.repoData.config.pullRequests.includeMatchedLabels)
236236
requestData = NewPullRequestData.from(
237-
data,
238-
branchName,
239-
edits,
240-
artifactIdToUrl,
241-
artifactIdToUpdateInfoUrls.toMap,
242-
filesWithOldVersion,
243-
labels
237+
data = data,
238+
branchName = branchName,
239+
edits = edits,
240+
artifactIdToUrl = artifactIdToUrl,
241+
artifactIdToUpdateInfoUrls = artifactIdToUpdateInfoUrls.toMap,
242+
filesWithOldVersion = filesWithOldVersion,
243+
addLabels = config.addLabels,
244+
labels = labels
244245
)
245246
} yield requestData
246247

@@ -249,9 +250,6 @@ final class NurtureAlg[F[_]](config: ForgeCfg)(implicit
249250
_ <- logger.info(s"Create PR ${data.updateBranch.name}")
250251
requestData <- preparePullRequest(data, edits)
251252
pr <- forgeApiAlg.createPullRequest(data.repo, requestData)
252-
_ <- forgeApiAlg
253-
.labelPullRequest(data.repo, pr.number, requestData.labels)
254-
.whenA(config.addLabels && requestData.labels.nonEmpty)
255253
prData = PullRequestData[Id](
256254
pr.html_url,
257255
data.baseSha1,

modules/core/src/test/scala/org/scalasteward/core/forge/azurerepos/AzureReposApiAlgTest.scala

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -266,10 +266,4 @@ class AzureReposApiAlgTest extends CatsEffectSuite with Http4sDsl[MockEff] {
266266
assertIO(obtained, expected)
267267
}
268268

269-
test("labelPullRequest") {
270-
azureReposApiAlg
271-
.labelPullRequest(repo, PullRequestNumber(26), List("dependency-updates"))
272-
.runA(state)
273-
.assert
274-
}
275269
}
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
package org.scalasteward.core.forge.azurerepos
2+
3+
import io.circe.literal._
4+
import io.circe.syntax._
5+
import munit.FunSuite
6+
import org.scalasteward.core.forge.data.NewPullRequestData
7+
import org.scalasteward.core.git.Branch
8+
9+
class JsonCodecTest extends FunSuite {
10+
import JsonCodec._
11+
12+
private val data = NewPullRequestData(
13+
title = "Test MR title",
14+
body = "Test MR body",
15+
head = "source",
16+
base = Branch("main"),
17+
labels = Nil,
18+
assignees = Nil,
19+
reviewers = Nil
20+
)
21+
22+
test("PullRequestPayload") {
23+
val obtained = PullRequestPayload.from(data).asJson
24+
val expected =
25+
json"""{
26+
"sourceRefName" : "refs/heads/source",
27+
"targetRefName" : "main",
28+
"title" : "Test MR title",
29+
"labels" : null,
30+
"description" : "Test MR body"
31+
}"""
32+
33+
assertEquals(obtained, expected)
34+
}
35+
36+
test("PullRequestPayload with labels") {
37+
val obtained = PullRequestPayload.from(data.copy(labels = List("foo", "bar"))).asJson
38+
val expected =
39+
json"""{
40+
"sourceRefName" : "refs/heads/source",
41+
"targetRefName" : "main",
42+
"title" : "Test MR title",
43+
"labels" : [ "foo", "bar" ],
44+
"description" : "Test MR body"
45+
}"""
46+
47+
assertEquals(obtained, expected)
48+
}
49+
}

modules/core/src/test/scala/org/scalasteward/core/forge/azurerepos/UrlTest.scala

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -60,11 +60,4 @@ class UrlTest extends FunSuite {
6060
)
6161
}
6262

63-
test("labelPullRequest") {
64-
assertEquals(
65-
url.labelPullRequest(repo, PullRequestNumber(42)).toString,
66-
"https://dev.azure.com/my-azure-org/scala-steward-org/" +
67-
"_apis%2Fgit%2Frepositories/scala-steward/pullrequests/42/labels?api-version=7.1-preview.1"
68-
)
69-
}
7063
}

modules/core/src/test/scala/org/scalasteward/core/forge/data/NewPullRequestDataTest.scala

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -572,6 +572,7 @@ class NewPullRequestDataTest extends FunSuite {
572572
val obtained = from(
573573
data,
574574
"scala-steward:update/logback-classic-1.2.3",
575+
addLabels = true,
575576
labels = labelsFor(data.update)
576577
)
577578

@@ -643,6 +644,7 @@ class NewPullRequestDataTest extends FunSuite {
643644
val obtained = from(
644645
data,
645646
"scala-steward:update/logback-classic-1.2.3",
647+
addLabels = true,
646648
labels = labelsFor(data.update)
647649
)
648650

modules/core/src/test/scala/org/scalasteward/core/forge/gitea/GiteaApiAlgTest.scala

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -191,12 +191,6 @@ class GiteaApiAlgTest extends CatsEffectSuite with Http4sDsl[MockEff] {
191191
}
192192
}
193193

194-
test("label pr") {
195-
giteaAlg
196-
.labelPullRequest(repo, PullRequestNumber(2), List("label1"))
197-
.runA(state)
198-
}
199-
200194
test("create fork") {
201195
giteaAlg
202196
.createFork(repo)

0 commit comments

Comments
 (0)