Skip to content

Commit 5357f28

Browse files
authored
Merge pull request #3000 from danielleontiev/optimize-lables-adding
refactoring: remove ForgeApiAlg.labelPullRequest
2 parents e60240f + ecd2d10 commit 5357f28

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)