Repository: scala-steward-org/scala-steward
Pull request #2538 (2022-02-25 16:00:55)

SBT plugin: Find credentials by realms if possible
Some repository providers use the same host URL for multiple repositories.
Repositories are differentiated by sub-paths.
In the current implementation, Scala Steward uses the first set of credentials that fits the host name.
This leads to all other repositories under the same base path to have invalid credentials.

This PR attempts to solve this issue by matching realm names first and falling back onto the original logic if such a match cannot be made.

Example credentials file
```
credentials += Credentials("Private Repository: org/repo1", "pkgs.org.io", "token", "ABC")
credentials += Credentials("Private Repository: org/repo2, "pkgs.org.io", "token", "DEF")
```
Example build.sbt
```
resolvers += "Private repository: org/repo1" at "https://pkgs.org.io/basic/repo1/maven/"
resolvers += "Private repository: org/repo2" at "https://pkgs.org.io/basic/repo2/maven/"
```

Currently, the first credentials line will be used exclusively, leading to HTTP 401 errors for `repo2`.

With this PR, realm names will be matched first, assigning the correct credentials to `repo2` during `sbt stewardDependencies`

fthomas: I just noticed that the [sbt docs](https://www.scala-sbt.org/1.x/docs/Publishing.html#Credentials) say this about credentials matching:

> NOTE: Credentials matching is done using both: realm and host keys.

Maybe we should do this here too. Instead of looking for credentials that match only the realm or only the host, we only use credentials that match both.
fthomas: I interpret that as both must match at the same time. How about trying to match realm and host both at the same time first, then trying only the realm, and only the host last:
```
for {
  allDirect <- Try(Credentials.allDirect(sbtCredentials)).toOption
  maybeRealmAndHost = allDirect.find(c => c.realm == name && c.host == url.getHost)
  maybeRealm = allDirect.find(_.realm == name)
  maybeHost = allDirect.find(_.host == url.getHost)
} yield maybeRealmAndHost.orElse(maybeRealm).orElse(maybeHost)
```
This should find the correct credentials in case realm or host is ambiguous and keep the lenience of your current proposal.
NeQuissimus: I like that, I'll add the additional check.

Patch:
diff --git a/.scalafmt.conf b/.scalafmt.conf
index 13c0c4b9..c1d8e305 100644
--- a/.scalafmt.conf
+++ b/.scalafmt.conf
@@ -1,4 +1,4 @@
-version = 3.5.8
+version = 3.4.3
 runner.dialect = scala213
 assumeStandardLibraryStripMargin = true
 align.openParenCallSite = false
diff --git a/modules/core/src/main/resources/artifact-migrations.v2.conf b/modules/core/src/main/resources/artifact-migrations.v2.conf
index b9d0aab3..20d2bf3c 100644
--- a/modules/core/src/main/resources/artifact-migrations.v2.conf
+++ b/modules/core/src/main/resources/artifact-migrations.v2.conf
@@ -129,16 +129,6 @@ changes = [
     groupIdAfter = com.typesafe.play
     artifactIdAfter = sbt-play-ebean
   },
-  {
-    groupIdBefore = com.typesafe.sbt
-    groupIdAfter = com.typesafe.play
-    artifactIdAfter = sbt-play-soap
-  },
-  {
-    groupIdBefore = com.typesafe.sbt
-    groupIdAfter = com.github.sbt
-    artifactIdAfter = sbt-git
-  },
   {
     groupIdBefore = com.jsuereth
     groupIdAfter = com.github.sbt
@@ -199,11 +189,6 @@ changes = [
     artifactIdBefore = scalacheck-1-14
     artifactIdAfter = scalacheck-1-15
   },
-  {
-    groupIdAfter = org.scalatestplus
-    artifactIdBefore = scalacheck-1-15
-    artifactIdAfter = scalacheck-1-16
-  },
   {
     groupIdAfter = org.scalatestplus
     artifactIdBefore = testng-6-7
@@ -259,51 +244,6 @@ changes = [
     groupIdAfter = org.typelevel
     artifactIdAfter = cats-time
   },
-  {
-    groupIdBefore = com.lightbend.play
-    groupIdAfter = com.typesafe.play
-    artifactIdAfter = play-file-watch
-  },
-  {
-    groupIdBefore = com.lightbend.play
-    groupIdAfter = com.typesafe.play
-    artifactIdAfter = play-socket-io
-  },
-  {
-    groupIdBefore = com.lightbend.play
-    groupIdAfter = com.typesafe.play
-    artifactIdAfter = lagom-javadsl-grpc-testkit
-  },
-  {
-    groupIdBefore = com.lightbend.play
-    groupIdAfter = com.typesafe.play
-    artifactIdAfter = lagom-scaladsl-grpc-testkit
-  },
-  {
-    groupIdBefore = com.lightbend.play
-    groupIdAfter = com.typesafe.play
-    artifactIdAfter = play-grpc-generators
-  },
-  {
-    groupIdBefore = com.lightbend.play
-    groupIdAfter = com.typesafe.play
-    artifactIdAfter = play-grpc-runtime
-  },
-  {
-    groupIdBefore = com.lightbend.play
-    groupIdAfter = com.typesafe.play
-    artifactIdAfter = play-grpc-scalatest
-  },
-  {
-    groupIdBefore = com.lightbend.play
-    groupIdAfter = com.typesafe.play
-    artifactIdAfter = play-grpc-specs2
-  },
-  {
-    groupIdBefore = com.lightbend.play
-    groupIdAfter = com.typesafe.play
-    artifactIdAfter = play-grpc-testkit
-  },
   {
     groupIdBefore = com.lightbend.sbt
     groupIdAfter = com.github.sbt
@@ -318,110 +258,5 @@ changes = [
     groupIdBefore = ky.korins
     groupIdAfter = pt.kcry
     artifactIdAfter = blake3
-  },
-  {
-    groupIdBefore = org.irundaia.sbt
-    groupIdAfter = io.github.irundaia
-    artifactIdAfter = sbt-sassify
-  },
-  {
-    groupIdBefore = au.com.onegeek
-    groupIdAfter = nl.gn0s1s
-    artifactIdAfter = sbt-dotenv
-  },
-  {
-    groupIdBefore = io.github.davidgregory084
-    groupIdAfter = org.typelevel
-    artifactIdAfter = sbt-tpolecat
-  },
-  {
-    groupIdAfter = com.softwaremill.sttp.client3
-    artifactIdBefore = httpclient-backend
-    artifactIdAfter = core
-  },
-  {
-    groupIdAfter = com.softwaremill.sttp.client3
-    artifactIdBefore = httpclient-backend-fs2
-    artifactIdAfter = fs2
-  },
-  {
-    groupIdAfter = com.softwaremill.sttp.client3
-    artifactIdBefore = httpclient-backend-monix
-    artifactIdAfter = monix
-  },
-  {
-    groupIdAfter = com.softwaremill.sttp.client3
-    artifactIdBefore = httpclient-backend-zio
-    artifactIdAfter = zio
-  },
-  {
-    groupIdAfter = org.bouncycastle
-    artifactIdBefore = bcprov-jdk15on
-    artifactIdAfter = bcprov-jdk18on
-  },
-  {
-    groupIdAfter = org.bouncycastle
-    artifactIdBefore = bcprov-ext-jdk15on
-    artifactIdAfter = bcprov-ext-jdk18on
-  },
-  {
-    groupIdAfter = org.bouncycastle
-    artifactIdBefore = bcprov-debug-jdk15on
-    artifactIdAfter = bcprov-debug-jdk18on
-  },
-  {
-    groupIdAfter = org.bouncycastle
-    artifactIdBefore = bcprov-ext-debug-jdk15on
-    artifactIdAfter = bcprov-ext-debug-jdk18on
-  },
-  {
-    groupIdAfter = org.bouncycastle
-    artifactIdBefore = bcutil-jdk15on
-    artifactIdAfter = bcutil-jdk18on
-  },
-  {
-    groupIdAfter = org.bouncycastle
-    artifactIdBefore = bcpkix-jdk15on
-    artifactIdAfter = bcpkix-jdk18on
-  },
-  {
-    groupIdAfter = org.bouncycastle
-    artifactIdBefore = bcmail-jdk15on
-    artifactIdAfter = bcmail-jdk18on
-  },
-  {
-    groupIdAfter = org.bouncycastle
-    artifactIdBefore = bcjmail-jdk15on
-    artifactIdAfter = bcjmail-jdk18on
-  },
-  {
-    groupIdAfter = org.bouncycastle
-    artifactIdBefore = bcpg-jdk15on
-    artifactIdAfter = bcpg-jdk18on
-  },
-  {
-    groupIdAfter = org.bouncycastle
-    artifactIdBefore = bctls-jdk15on
-    artifactIdAfter = bctls-jdk18on
-  },
-  {
-    groupIdBefore = io.catbird
-    groupIdAfter = org.typelevel
-    artifactIdAfter = catbird-effect
-  },
-  {
-    groupIdBefore = io.catbird
-    groupIdAfter = org.typelevel
-    artifactIdAfter = catbird-effect3
-  },
-  {
-    groupIdBefore = io.catbird
-    groupIdAfter = org.typelevel
-    artifactIdAfter = catbird-finagle
-  },
-  {
-    groupIdBefore = io.catbird
-    groupIdAfter = org.typelevel
-    artifactIdAfter = catbird-util
   }
 ]
diff --git a/modules/core/src/main/resources/default.scala-steward.conf b/modules/core/src/main/resources/default.scala-steward.conf
index b1f9cf45..e87621f4 100644
--- a/modules/core/src/main/resources/default.scala-steward.conf
+++ b/modules/core/src/main/resources/default.scala-steward.conf
@@ -1,8 +1,8 @@
 updates.ignore = [
   // Ignore the next Scala 3 version until it is announced.
-  { groupId = "org.scala-lang", artifactId = "scala3-compiler",     version = { exact = "3.1.3" } },
-  { groupId = "org.scala-lang", artifactId = "scala3-library",      version = { exact = "3.1.3" } },
-  { groupId = "org.scala-lang", artifactId = "scala3-library_sjs1", version = { exact = "3.1.3" } },
+  { groupId = "org.scala-lang", artifactId = "scala3-compiler",     version = { exact = "3.1.2" } },
+  { groupId = "org.scala-lang", artifactId = "scala3-library",      version = { exact = "3.1.2" } },
+  { groupId = "org.scala-lang", artifactId = "scala3-library_sjs1", version = { exact = "3.1.2" } },
 
   // Ignore the next Scala 2.13 version until it is announced.
   { groupId = "org.scala-lang", artifactId = "scala-compiler", version = { exact = "2.13.9" } },
@@ -17,60 +17,60 @@ updates.ignore = [
   { groupId = "org.scala-lang", artifactId = "scalap",         version = { exact = "2.12.16" } },
 
   // Ignore the next Scala.js patch version until it is announced.
-  { groupId = "org.scala-js", artifactId = "sbt-scalajs",                     version = { exact = "1.10.1" } },
-  { groupId = "org.scala-js", artifactId = "scalajs-ir",                      version = { exact = "1.10.1" } },
-  { groupId = "org.scala-js", artifactId = "scalajs-ir_sjs1",                 version = { exact = "1.10.1" } },
-  { groupId = "org.scala-js", artifactId = "scalajs-linker-interface",        version = { exact = "1.10.1" } },
-  { groupId = "org.scala-js", artifactId = "scalajs-linker-interface_sjs1",   version = { exact = "1.10.1" } },
-  { groupId = "org.scala-js", artifactId = "scalajs-linker",                  version = { exact = "1.10.1" } },
-  { groupId = "org.scala-js", artifactId = "scalajs-linker_sjs1",             version = { exact = "1.10.1" } },
-  { groupId = "org.scala-js", artifactId = "scalajs-sbt-test-adapter",        version = { exact = "1.10.1" } },
-  { groupId = "org.scala-js", artifactId = "scalajs-compiler",                version = { exact = "1.10.1" } },
-  { groupId = "org.scala-js", artifactId = "scalajs-library",                 version = { exact = "1.10.1" } },
-  { groupId = "org.scala-js", artifactId = "scalajs-library_2.11",            version = { exact = "1.10.1" } },
-  { groupId = "org.scala-js", artifactId = "scalajs-library_2.12",            version = { exact = "1.10.1" } },
-  { groupId = "org.scala-js", artifactId = "scalajs-library_2.13",            version = { exact = "1.10.1" } },
-  { groupId = "org.scala-js", artifactId = "scalajs-test-interface",          version = { exact = "1.10.1" } },
-  { groupId = "org.scala-js", artifactId = "scalajs-test-interface_2.11",     version = { exact = "1.10.1" } },
-  { groupId = "org.scala-js", artifactId = "scalajs-test-interface_2.12",     version = { exact = "1.10.1" } },
-  { groupId = "org.scala-js", artifactId = "scalajs-test-interface_2.13",     version = { exact = "1.10.1" } },
-  { groupId = "org.scala-js", artifactId = "scalajs-test-bridge",             version = { exact = "1.10.1" } },
-  { groupId = "org.scala-js", artifactId = "scalajs-test-bridge_2.11",        version = { exact = "1.10.1" } },
-  { groupId = "org.scala-js", artifactId = "scalajs-test-bridge_2.12",        version = { exact = "1.10.1" } },
-  { groupId = "org.scala-js", artifactId = "scalajs-test-bridge_2.13",        version = { exact = "1.10.1" } },
-  { groupId = "org.scala-js", artifactId = "scalajs-junit-test-plugin",       version = { exact = "1.10.1" } },
-  { groupId = "org.scala-js", artifactId = "scalajs-junit-test-runtime",      version = { exact = "1.10.1" } },
-  { groupId = "org.scala-js", artifactId = "scalajs-junit-test-runtime_2.11", version = { exact = "1.10.1" } },
-  { groupId = "org.scala-js", artifactId = "scalajs-junit-test-runtime_2.12", version = { exact = "1.10.1" } },
-  { groupId = "org.scala-js", artifactId = "scalajs-junit-test-runtime_2.13", version = { exact = "1.10.1" } },
+  { groupId = "org.scala-js", artifactId = "sbt-scalajs",                     version = { exact = "1.9.1" } },
+  { groupId = "org.scala-js", artifactId = "scalajs-ir",                      version = { exact = "1.9.1" } },
+  { groupId = "org.scala-js", artifactId = "scalajs-ir_sjs1",                 version = { exact = "1.9.1" } },
+  { groupId = "org.scala-js", artifactId = "scalajs-linker-interface",        version = { exact = "1.9.1" } },
+  { groupId = "org.scala-js", artifactId = "scalajs-linker-interface_sjs1",   version = { exact = "1.9.1" } },
+  { groupId = "org.scala-js", artifactId = "scalajs-linker",                  version = { exact = "1.9.1" } },
+  { groupId = "org.scala-js", artifactId = "scalajs-linker_sjs1",             version = { exact = "1.9.1" } },
+  { groupId = "org.scala-js", artifactId = "scalajs-sbt-test-adapter",        version = { exact = "1.9.1" } },
+  { groupId = "org.scala-js", artifactId = "scalajs-compiler",                version = { exact = "1.9.1" } },
+  { groupId = "org.scala-js", artifactId = "scalajs-library",                 version = { exact = "1.9.1" } },
+  { groupId = "org.scala-js", artifactId = "scalajs-library_2.11",            version = { exact = "1.9.1" } },
+  { groupId = "org.scala-js", artifactId = "scalajs-library_2.12",            version = { exact = "1.9.1" } },
+  { groupId = "org.scala-js", artifactId = "scalajs-library_2.13",            version = { exact = "1.9.1" } },
+  { groupId = "org.scala-js", artifactId = "scalajs-test-interface",          version = { exact = "1.9.1" } },
+  { groupId = "org.scala-js", artifactId = "scalajs-test-interface_2.11",     version = { exact = "1.9.1" } },
+  { groupId = "org.scala-js", artifactId = "scalajs-test-interface_2.12",     version = { exact = "1.9.1" } },
+  { groupId = "org.scala-js", artifactId = "scalajs-test-interface_2.13",     version = { exact = "1.9.1" } },
+  { groupId = "org.scala-js", artifactId = "scalajs-test-bridge",             version = { exact = "1.9.1" } },
+  { groupId = "org.scala-js", artifactId = "scalajs-test-bridge_2.11",        version = { exact = "1.9.1" } },
+  { groupId = "org.scala-js", artifactId = "scalajs-test-bridge_2.12",        version = { exact = "1.9.1" } },
+  { groupId = "org.scala-js", artifactId = "scalajs-test-bridge_2.13",        version = { exact = "1.9.1" } },
+  { groupId = "org.scala-js", artifactId = "scalajs-junit-test-plugin",       version = { exact = "1.9.1" } },
+  { groupId = "org.scala-js", artifactId = "scalajs-junit-test-runtime",      version = { exact = "1.9.1" } },
+  { groupId = "org.scala-js", artifactId = "scalajs-junit-test-runtime_2.11", version = { exact = "1.9.1" } },
+  { groupId = "org.scala-js", artifactId = "scalajs-junit-test-runtime_2.12", version = { exact = "1.9.1" } },
+  { groupId = "org.scala-js", artifactId = "scalajs-junit-test-runtime_2.13", version = { exact = "1.9.1" } },
 
   // Ignore the next Scala.js minor version until it is announced.
-  { groupId = "org.scala-js", artifactId = "sbt-scalajs",                     version = { exact = "1.11.0" } },
-  { groupId = "org.scala-js", artifactId = "scalajs-ir",                      version = { exact = "1.11.0" } },
-  { groupId = "org.scala-js", artifactId = "scalajs-ir_sjs1",                 version = { exact = "1.11.0" } },
-  { groupId = "org.scala-js", artifactId = "scalajs-linker-interface",        version = { exact = "1.11.0" } },
-  { groupId = "org.scala-js", artifactId = "scalajs-linker-interface_sjs1",   version = { exact = "1.11.0" } },
-  { groupId = "org.scala-js", artifactId = "scalajs-linker",                  version = { exact = "1.11.0" } },
-  { groupId = "org.scala-js", artifactId = "scalajs-linker_sjs1",             version = { exact = "1.11.0" } },
-  { groupId = "org.scala-js", artifactId = "scalajs-sbt-test-adapter",        version = { exact = "1.11.0" } },
-  { groupId = "org.scala-js", artifactId = "scalajs-compiler",                version = { exact = "1.11.0" } },
-  { groupId = "org.scala-js", artifactId = "scalajs-library",                 version = { exact = "1.11.0" } },
-  { groupId = "org.scala-js", artifactId = "scalajs-library_2.11",            version = { exact = "1.11.0" } },
-  { groupId = "org.scala-js", artifactId = "scalajs-library_2.12",            version = { exact = "1.11.0" } },
-  { groupId = "org.scala-js", artifactId = "scalajs-library_2.13",            version = { exact = "1.11.0" } },
-  { groupId = "org.scala-js", artifactId = "scalajs-test-interface",          version = { exact = "1.11.0" } },
-  { groupId = "org.scala-js", artifactId = "scalajs-test-interface_2.11",     version = { exact = "1.11.0" } },
-  { groupId = "org.scala-js", artifactId = "scalajs-test-interface_2.12",     version = { exact = "1.11.0" } },
-  { groupId = "org.scala-js", artifactId = "scalajs-test-interface_2.13",     version = { exact = "1.11.0" } },
-  { groupId = "org.scala-js", artifactId = "scalajs-test-bridge",             version = { exact = "1.11.0" } },
-  { groupId = "org.scala-js", artifactId = "scalajs-test-bridge_2.11",        version = { exact = "1.11.0" } },
-  { groupId = "org.scala-js", artifactId = "scalajs-test-bridge_2.12",        version = { exact = "1.11.0" } },
-  { groupId = "org.scala-js", artifactId = "scalajs-test-bridge_2.13",        version = { exact = "1.11.0" } },
-  { groupId = "org.scala-js", artifactId = "scalajs-junit-test-plugin",       version = { exact = "1.11.0" } },
-  { groupId = "org.scala-js", artifactId = "scalajs-junit-test-runtime",      version = { exact = "1.11.0" } },
-  { groupId = "org.scala-js", artifactId = "scalajs-junit-test-runtime_2.11", version = { exact = "1.11.0" } },
-  { groupId = "org.scala-js", artifactId = "scalajs-junit-test-runtime_2.12", version = { exact = "1.11.0" } },
-  { groupId = "org.scala-js", artifactId = "scalajs-junit-test-runtime_2.13", version = { exact = "1.11.0" } },
+  { groupId = "org.scala-js", artifactId = "sbt-scalajs",                     version = { exact = "1.10.0" } },
+  { groupId = "org.scala-js", artifactId = "scalajs-ir",                      version = { exact = "1.10.0" } },
+  { groupId = "org.scala-js", artifactId = "scalajs-ir_sjs1",                 version = { exact = "1.10.0" } },
+  { groupId = "org.scala-js", artifactId = "scalajs-linker-interface",        version = { exact = "1.10.0" } },
+  { groupId = "org.scala-js", artifactId = "scalajs-linker-interface_sjs1",   version = { exact = "1.10.0" } },
+  { groupId = "org.scala-js", artifactId = "scalajs-linker",                  version = { exact = "1.10.0" } },
+  { groupId = "org.scala-js", artifactId = "scalajs-linker_sjs1",             version = { exact = "1.10.0" } },
+  { groupId = "org.scala-js", artifactId = "scalajs-sbt-test-adapter",        version = { exact = "1.10.0" } },
+  { groupId = "org.scala-js", artifactId = "scalajs-compiler",                version = { exact = "1.10.0" } },
+  { groupId = "org.scala-js", artifactId = "scalajs-library",                 version = { exact = "1.10.0" } },
+  { groupId = "org.scala-js", artifactId = "scalajs-library_2.11",            version = { exact = "1.10.0" } },
+  { groupId = "org.scala-js", artifactId = "scalajs-library_2.12",            version = { exact = "1.10.0" } },
+  { groupId = "org.scala-js", artifactId = "scalajs-library_2.13",            version = { exact = "1.10.0" } },
+  { groupId = "org.scala-js", artifactId = "scalajs-test-interface",          version = { exact = "1.10.0" } },
+  { groupId = "org.scala-js", artifactId = "scalajs-test-interface_2.11",     version = { exact = "1.10.0" } },
+  { groupId = "org.scala-js", artifactId = "scalajs-test-interface_2.12",     version = { exact = "1.10.0" } },
+  { groupId = "org.scala-js", artifactId = "scalajs-test-interface_2.13",     version = { exact = "1.10.0" } },
+  { groupId = "org.scala-js", artifactId = "scalajs-test-bridge",             version = { exact = "1.10.0" } },
+  { groupId = "org.scala-js", artifactId = "scalajs-test-bridge_2.11",        version = { exact = "1.10.0" } },
+  { groupId = "org.scala-js", artifactId = "scalajs-test-bridge_2.12",        version = { exact = "1.10.0" } },
+  { groupId = "org.scala-js", artifactId = "scalajs-test-bridge_2.13",        version = { exact = "1.10.0" } },
+  { groupId = "org.scala-js", artifactId = "scalajs-junit-test-plugin",       version = { exact = "1.10.0" } },
+  { groupId = "org.scala-js", artifactId = "scalajs-junit-test-runtime",      version = { exact = "1.10.0" } },
+  { groupId = "org.scala-js", artifactId = "scalajs-junit-test-runtime_2.11", version = { exact = "1.10.0" } },
+  { groupId = "org.scala-js", artifactId = "scalajs-junit-test-runtime_2.12", version = { exact = "1.10.0" } },
+  { groupId = "org.scala-js", artifactId = "scalajs-junit-test-runtime_2.13", version = { exact = "1.10.0" } },
 
   { groupId = "com.google.guava", artifactId = "guava", version = "r0" },
 
diff --git a/modules/core/src/main/resources/scalafix-migrations.conf b/modules/core/src/main/resources/scalafix-migrations.conf
index a0799e0c..067fd34d 100644
--- a/modules/core/src/main/resources/scalafix-migrations.conf
+++ b/modules/core/src/main/resources/scalafix-migrations.conf
@@ -56,13 +56,6 @@ migrations = [
     rewriteRules: ["https://raw.githubusercontent.com/blast-hardcheese/guardrail-scalafix-rules/master/rules/src/main/scala/fix/GuardrailScalaResponseTypes.scala"],
     doc: "https://github.com/twilio/guardrail/blob/master/MIGRATING.md#0590-may-contain-type-and-package-naming-changes-that-will-require-changes-in-consuming-code"
   },
-  {
-    groupId: "dev.guardrail",
-    artifactIds: ["sbt-guardrail"],
-    newVersion: "0.72.0",
-    rewriteRules: ["https://raw.githubusercontent.com/guardrail-dev/guardrail-scalafix-rules/master/rules/src/main/scala/fix/GuardrailIterableToVector.scala"],
-    doc: "https://github.com/guardrail-dev/guardrail/blob/master/MIGRATING.md#migrating-to-guardrail-core-0710"
-  },
   {
     groupId: "com.typesafe.akka",
     artifactIds: ["akka-http.*"],
@@ -192,11 +185,5 @@ migrations = [
     newVersion: "0.3.0",
     rewriteRules: ["github:martijnhoekstra/catsparsescalafix/Parser01Fix"],
     doc: "https://github.com/martijnhoekstra/catsparsescalafix/blob/main/readme.md"
-  },
-  {
-    groupId: "io.catbird",
-    artifactIds: ["catbird-effect", "catbird-effect3", "catbird-finagle", "catbird-util"],
-    newVersion: "22.4.0",
-    rewriteRules: ["dependency:RenameIoCatbirdPackage@org.typelevel:catbird-scalafix:22.4.0"]
   }
 ]
diff --git a/modules/core/src/main/scala/org/scalasteward/core/buildtool/sbt/package.scala b/modules/core/src/main/scala/org/scalasteward/core/buildtool/sbt/package.scala
index 2aa3a9dd..92243ce2 100644
--- a/modules/core/src/main/scala/org/scalasteward/core/buildtool/sbt/package.scala
+++ b/modules/core/src/main/scala/org/scalasteward/core/buildtool/sbt/package.scala
@@ -35,13 +35,10 @@ package object sbt {
     Option.when(version >= Version("1.0.0"))(Dependency(sbtGroupId, sbtArtifactId, version))
   }
 
-  val sbtScalaFixGroupId = GroupId("ch.epfl.scala")
-  val sbtScalaFixArtifactId = ArtifactId("sbt-scalafix")
-
   val sbtScalaFixDependency: Dependency =
     Dependency(
-      sbtScalaFixGroupId,
-      sbtScalaFixArtifactId,
+      GroupId("ch.epfl.scala"),
+      ArtifactId("sbt-scalafix"),
       Version(""),
       Some(SbtVersion("1.0")),
       Some(ScalaVersion("2.12"))
diff --git a/modules/core/src/main/scala/org/scalasteward/core/edit/hooks/HookExecutor.scala b/modules/core/src/main/scala/org/scalasteward/core/edit/hooks/HookExecutor.scala
index 09e3046a..e264b8c6 100644
--- a/modules/core/src/main/scala/org/scalasteward/core/edit/hooks/HookExecutor.scala
+++ b/modules/core/src/main/scala/org/scalasteward/core/edit/hooks/HookExecutor.scala
@@ -18,12 +18,7 @@ package org.scalasteward.core.edit.hooks
 
 import cats.MonadThrow
 import cats.syntax.all._
-import org.scalasteward.core.buildtool.sbt.{
-  sbtArtifactId,
-  sbtGroupId,
-  sbtScalaFixArtifactId,
-  sbtScalaFixGroupId
-}
+import org.scalasteward.core.buildtool.sbt.{sbtArtifactId, sbtGroupId}
 import org.scalasteward.core.data._
 import org.scalasteward.core.edit.EditAttempt
 import org.scalasteward.core.edit.EditAttempt.HookEdit
@@ -77,8 +72,7 @@ object HookExecutor {
     (GroupId("com.codecommit"), ArtifactId("sbt-spiewak-bintray")),
     (GroupId("io.github.nafg.mergify"), ArtifactId("sbt-mergify-github-actions")),
     (GroupId("io.chrisdavenport"), ArtifactId("sbt-davenverse")),
-    (GroupId("org.typelevel"), ArtifactId("sbt-typelevel-ci-release")),
-    (GroupId("org.typelevel"), ArtifactId("sbt-typelevel-mergify"))
+    (GroupId("org.typelevel"), ArtifactId("sbt-typelevel-ci-release"))
   )
 
   private val sbtTypelevelModules = List(
@@ -91,7 +85,7 @@ object HookExecutor {
 
   // Modules that most likely require the workflow to be regenerated if updated.
   private val conditionalSbtGitHubActionsModules =
-    (sbtGroupId, sbtArtifactId) :: (sbtScalaFixGroupId, sbtScalaFixArtifactId) :: scalaLangModules
+    (sbtGroupId, sbtArtifactId) :: scalaLangModules
 
   private def sbtGithubActionsHook(
       groupId: GroupId,
diff --git a/modules/core/src/main/scala/org/scalasteward/core/repoconfig/GroupRepoConfig.scala b/modules/core/src/main/scala/org/scalasteward/core/repoconfig/GroupRepoConfig.scala
index ab17387f..12239708 100644
--- a/modules/core/src/main/scala/org/scalasteward/core/repoconfig/GroupRepoConfig.scala
+++ b/modules/core/src/main/scala/org/scalasteward/core/repoconfig/GroupRepoConfig.scala
@@ -19,7 +19,6 @@ package org.scalasteward.core.repoconfig
 import io.circe.Codec
 import io.circe.generic.extras.Configuration
 import io.circe.generic.semiauto.deriveCodec
-import org.scalasteward.core.data.Update
 
 final case class GroupRepoConfig(
     pullRequests: PullRequestsConfig = PullRequestsConfig(),
@@ -33,17 +32,4 @@ object GroupRepoConfig {
   implicit val groupPullConfigCodec: Codec[GroupRepoConfig] =
     deriveCodec
 
-  def configToSlowDownUpdatesFrequency(update: Update): String =
-    update match {
-      case s: Update.Single =>
-        s"""dependencyOverrides = [{
-           |  pullRequests = { frequency = "@monthly" },
-           |  dependency = { groupId = "${s.groupId}", artifactId = "${s.artifactId.name}" }
-           |}]""".stripMargin
-      case g: Update.Group =>
-        s"""dependencyOverrides = [{
-           |  pullRequests = { frequency = "@monthly" },
-           |  dependency = { groupId = "${g.groupId}" }
-           |}]""".stripMargin
-    }
 }
diff --git a/modules/core/src/main/scala/org/scalasteward/core/vcs/data/NewPullRequestData.scala b/modules/core/src/main/scala/org/scalasteward/core/vcs/data/NewPullRequestData.scala
index 52592935..7a99d699 100644
--- a/modules/core/src/main/scala/org/scalasteward/core/vcs/data/NewPullRequestData.scala
+++ b/modules/core/src/main/scala/org/scalasteward/core/vcs/data/NewPullRequestData.scala
@@ -25,7 +25,7 @@ import org.scalasteward.core.edit.EditAttempt
 import org.scalasteward.core.edit.EditAttempt.ScalafixEdit
 import org.scalasteward.core.git
 import org.scalasteward.core.git.Branch
-import org.scalasteward.core.repoconfig.{GroupRepoConfig, RepoConfigAlg}
+import org.scalasteward.core.repoconfig.RepoConfigAlg
 import org.scalasteward.core.util.{Details, Nel}
 
 final case class NewPullRequestData(
@@ -55,7 +55,7 @@ object NewPullRequestData {
     val details = List(
       appliedMigrations,
       oldVersionDetails,
-      adjustFutureUpdates(update).some,
+      ignoreFutureUpdates(update).some,
       configParsingError.map(configParsingErrorDetails)
     ).flatten
 
@@ -130,17 +130,13 @@ object NewPullRequestData {
       )
     }
 
-  def adjustFutureUpdates(update: Update): Details =
+  def ignoreFutureUpdates(update: Update): Details =
     Details(
-      "Adjust future updates",
+      "Ignore future updates",
       s"""|Add this to your `${RepoConfigAlg.repoConfigBasename}` file to ignore future updates of this dependency:
           |```
           |${RepoConfigAlg.configToIgnoreFurtherUpdates(update)}
           |```
-          |Or, add this to slow down future updates of this dependency:
-          |```
-          |${GroupRepoConfig.configToSlowDownUpdatesFrequency(update)}
-          |```
           |""".stripMargin.trim
     )
 
diff --git a/modules/sbt-plugin/src/main/scala/org/scalasteward/sbt/plugin/StewardPlugin.scala b/modules/sbt-plugin/src/main/scala/org/scalasteward/sbt/plugin/StewardPlugin.scala
index 59224901..565a582d 100644
--- a/modules/sbt-plugin/src/main/scala/org/scalasteward/sbt/plugin/StewardPlugin.scala
+++ b/modules/sbt-plugin/src/main/scala/org/scalasteward/sbt/plugin/StewardPlugin.scala
@@ -52,17 +52,22 @@ object StewardPlugin extends AutoPlugin {
           )
         val dependencies = libraryDeps ++ scalafixDeps
 
-        def getCredentials(url: URL): Option[Resolver.Credentials] =
-          Try(Credentials.forHost(sbtCredentials, url.getHost)).toOption.flatten
+        def getCredentials(url: URL, name: String): Option[Resolver.Credentials] =
+          (for {
+            allDirect <- Try(Credentials.allDirect(sbtCredentials)).toOption
+            maybeRealmAndHost = allDirect.find(c => c.realm == name && c.host == url.getHost)
+            maybeRealm = allDirect.find(_.realm == name)
+            maybeHost = allDirect.find(_.host == url.getHost)
+          } yield maybeRealmAndHost.orElse(maybeRealm).orElse(maybeHost)).flatten
             .map(c => Resolver.Credentials(c.userName, c.passwd))
 
         val resolvers = fullResolvers.value.collect {
           case repo: MavenRepository if !repo.root.startsWith("file:") =>
-            val creds = getCredentials(new URL(repo.root))
+            val creds = getCredentials(new URL(repo.root), repo.name)
             Resolver.MavenRepository(repo.name, repo.root, creds)
           case repo: URLRepository =>
             val ivyPatterns = repo.patterns.ivyPatterns.mkString
-            val creds = getCredentials(new URL(ivyPatterns))
+            val creds = getCredentials(new URL(ivyPatterns), repo.name)
             Resolver.IvyRepository(repo.name, ivyPatterns, creds)
         }
 
diff --git a/project/Dependencies.scala b/project/Dependencies.scala
index 30830c6d..c85ee0b2 100644
--- a/project/Dependencies.scala
+++ b/project/Dependencies.scala
@@ -5,10 +5,10 @@ import sbt.librarymanagement.syntax.ExclusionRule
 object Dependencies {
   val bcprovJdk15to18 = "org.bouncycastle" % "bcprov-jdk15to18" % "1.70"
   val betterFiles = "com.github.pathikrit" %% "better-files" % "3.9.1"
-  val catsEffect = "org.typelevel" %% "cats-effect" % "3.3.12"
+  val catsEffect = "org.typelevel" %% "cats-effect" % "3.3.5"
   val catsCore = "org.typelevel" %% "cats-core" % "2.7.0"
   val catsLaws = "org.typelevel" %% "cats-laws" % catsCore.revision
-  val catsParse = "org.typelevel" %% "cats-parse" % "0.3.7"
+  val catsParse = "org.typelevel" %% "cats-parse" % "0.3.6"
   val circeConfig = "io.circe" %% "circe-config" % "0.8.0"
   val circeGeneric = "io.circe" %% "circe-generic" % "0.14.1"
   val circeGenericExtras = "io.circe" %% "circe-generic-extras" % "0.14.1"
@@ -16,31 +16,31 @@ object Dependencies {
   val circeParser = "io.circe" %% "circe-parser" % circeGeneric.revision
   val circeRefined = "io.circe" %% "circe-refined" % circeGeneric.revision
   val commonsIo = "commons-io" % "commons-io" % "2.11.0"
-  val coursierCore = "io.get-coursier" %% "coursier" % "2.1.0-M6"
+  val coursierCore = "io.get-coursier" %% "coursier" % "2.1.0-M5-5-g2cb552ea9"
   val cron4sCore = "com.github.alonsodomin.cron4s" %% "cron4s-core" % "0.6.1"
   val decline = "com.monovore" %% "decline" % "2.2.0"
   val disciplineMunit = "org.typelevel" %% "discipline-munit" % "1.0.9"
-  val fs2Core = "co.fs2" %% "fs2-core" % "3.2.7"
+  val fs2Core = "co.fs2" %% "fs2-core" % "3.2.5"
   val fs2Io = "co.fs2" %% "fs2-io" % fs2Core.revision
-  val http4sCore = "org.http4s" %% "http4s-core" % "1.0.0-M32"
+  val http4sCore = "org.http4s" %% "http4s-core" % "1.0.0-M31"
   val http4sCirce = "org.http4s" %% "http4s-circe" % http4sCore.revision
   val http4sClient = "org.http4s" %% "http4s-client" % http4sCore.revision
   val http4sDsl = "org.http4s" %% "http4s-dsl" % http4sCore.revision
   val http4sBlazeServer = "org.http4s" %% "http4s-blaze-server" % http4sCore.revision
   val http4sOkhttpClient = "org.http4s" %% "http4s-okhttp-client" % http4sCore.revision
-  val log4catsSlf4j = "org.typelevel" %% "log4cats-slf4j" % "2.3.1"
-  val logbackClassic = "ch.qos.logback" % "logback-classic" % "1.2.11"
-  val jjwtApi = "io.jsonwebtoken" % "jjwt-api" % "0.11.3"
+  val log4catsSlf4j = "org.typelevel" %% "log4cats-slf4j" % "2.2.0"
+  val logbackClassic = "ch.qos.logback" % "logback-classic" % "1.2.10"
+  val jjwtApi = "io.jsonwebtoken" % "jjwt-api" % "0.11.2"
   val jjwtImpl = "io.jsonwebtoken" % "jjwt-impl" % jjwtApi.revision
   val jjwtJackson = "io.jsonwebtoken" % "jjwt-jackson" % jjwtApi.revision
-  val millVersion = Def.setting(if (scalaBinaryVersion.value == "2.12") "0.6.3" else "0.10.4")
+  val millVersion = Def.setting(if (scalaBinaryVersion.value == "2.12") "0.6.3" else "0.10.0")
   val millScalalib = Def.setting("com.lihaoyi" %% "mill-scalalib" % millVersion.value)
   val monocleCore = "dev.optics" %% "monocle-core" % "3.1.0"
   val munit = "org.scalameta" %% "munit" % "0.7.29"
   val munitCatsEffect = "org.typelevel" %% "munit-cats-effect-3" % "1.0.7"
   val munitScalacheck = "org.scalameta" %% "munit-scalacheck" % munit.revision
-  val refined = "eu.timepit" %% "refined" % "0.9.29"
+  val refined = "eu.timepit" %% "refined" % "0.9.28"
   val refinedScalacheck = "eu.timepit" %% "refined-scalacheck" % refined.revision
   val scalacacheCaffeine = "com.github.cb372" %% "scalacache-caffeine" % "1.0.0-M5"
-  val scalacheck = "org.scalacheck" %% "scalacheck" % "1.16.0"
+  val scalacheck = "org.scalacheck" %% "scalacheck" % "1.15.4"
 }
diff --git a/project/plugins.sbt b/project/plugins.sbt
index 76ecb48f..9fc33286 100644
--- a/project/plugins.sbt
+++ b/project/plugins.sbt
@@ -4,11 +4,11 @@ addSbtPlugin("com.eed3si9n" % "sbt-buildinfo" % "0.11.0")
 addSbtPlugin("com.github.sbt" % "sbt-ci-release" % "1.5.10")
 addSbtPlugin("org.scalameta" % "sbt-scalafmt" % "2.4.6")
 addSbtPlugin("com.github.cb372" % "sbt-explicit-dependencies" % "0.2.16")
-addSbtPlugin("com.github.tkawachi" % "sbt-doctest" % "0.10.0")
+addSbtPlugin("com.github.tkawachi" % "sbt-doctest" % "0.9.9")
 addSbtPlugin("com.github.sbt" % "sbt-native-packager" % "1.9.9")
-addSbtPlugin("de.heikoseeberger" % "sbt-header" % "5.7.0")
-addSbtPlugin("io.github.davidgregory084" % "sbt-tpolecat" % "0.3.3")
+addSbtPlugin("de.heikoseeberger" % "sbt-header" % "5.6.5")
+addSbtPlugin("io.github.davidgregory084" % "sbt-tpolecat" % "0.1.22")
 addSbtPlugin("pl.project13.scala" % "sbt-jmh" % "0.4.3")
-addSbtPlugin("org.portable-scala" % "sbt-scalajs-crossproject" % "1.2.0")
-addSbtPlugin("org.scalameta" % "sbt-mdoc" % "2.3.2")
+addSbtPlugin("org.portable-scala" % "sbt-scalajs-crossproject" % "1.1.0")
+addSbtPlugin("org.scalameta" % "sbt-mdoc" % "2.3.1")
 addSbtPlugin("org.scoverage" % "sbt-scoverage" % "1.9.3")
diff --git a/repos.md b/repos.md
index 1bcc9d5c..6df680fd 100644
--- a/repos.md
+++ b/repos.md
@@ -1,7 +1,6 @@
-List the repositories here you want Scala Steward to keep up-to-date.
-The format is "- $owner/$repo".
-If you want Scala Steward to keep a non-default branch up-to-date, use "- $owner/$repo:$branch".
-All lines that do not start with a hyphen and space are ignored.
+The repos.md file for the public Scala Steward instance has been moved to
+<https://github.com/scala-steward-org/repos/blob/main/repos-github.md>.
+If you want Scala Steward to keep your project up-to-date, please add it there.
 
 - scala-steward-org/scala-steward
 - scala-steward-org/test-repo-2


Test patch:
diff --git a/modules/core/src/test/scala/org/scalasteward/core/BuiltinConfigFilesTest.scala b/modules/core/src/test/scala/org/scalasteward/core/BuiltinConfigFilesTest.scala
deleted file mode 100644
index 96255294..00000000
--- a/modules/core/src/test/scala/org/scalasteward/core/BuiltinConfigFilesTest.scala
+++ /dev/null
@@ -1,76 +0,0 @@
-package org.scalasteward.core
-
-import better.files._
-import cats.effect.unsafe.implicits.global
-import munit.FunSuite
-import org.scalasteward.core.application.Config.{ArtifactCfg, RepoConfigCfg, ScalafixCfg}
-import org.scalasteward.core.edit.scalafix.ScalafixMigrationsLoader
-import org.scalasteward.core.mock.MockContext.context.{
-  artifactMigrationsLoader,
-  fileAlg,
-  logger,
-  scalafixMigrationsLoader
-}
-import org.scalasteward.core.mock.MockContext.mockState
-import org.scalasteward.core.repoconfig.RepoConfigLoader
-import org.scalasteward.core.update.artifact.ArtifactMigrationsLoader
-
-import scala.util.{Failure, Success, Try}
-
-class BuiltinConfigFilesTest extends FunSuite {
-  private def verifyConfigFile(readThis: String)(block: => Unit): Unit =
-    Try {
-      block
-    } match {
-      case Failure(e) =>
-        fail(s"Invalid format. See ${readThis}", e)
-      case Success(_) => // ok
-    }
-
-  test("migration v2 config is valid") {
-    val migrationsContent =
-      File("../src/main/resources/artifact-migrations.v2.conf").contentAsString
-    val initialState =
-      mockState.addUris(ArtifactMigrationsLoader.defaultArtifactMigrationsUrl -> migrationsContent)
-    verifyConfigFile("See docs/artifact-migrations.md") {
-      val migrations = artifactMigrationsLoader
-        .loadAll(ArtifactCfg(List(), disableDefaults = false))
-        .runA(initialState)
-        .unsafeRunSync()
-      assert(clue(migrations.size) > 1)
-    }
-  }
-
-  test("scalafix migrations config is valid") {
-    val migrationsContent =
-      File("../src/main/resources/scalafix-migrations.conf").contentAsString
-    val initialState =
-      mockState.addUris(ScalafixMigrationsLoader.defaultScalafixMigrationsUrl -> migrationsContent)
-    verifyConfigFile("docs/scalafix-migrations.md") {
-      val migrations = scalafixMigrationsLoader
-        .loadAll(ScalafixCfg(List(), disableDefaults = false))
-        .runA(initialState)
-        .attempt
-        .unsafeRunSync()
-        .getOrElse(List.empty)
-      assert(clue(migrations).size > 1)
-    }
-  }
-
-  test("default config is valid") {
-    val defaultConfigContent =
-      File("../src/main/resources/default.scala-steward.conf").contentAsString
-    val initialState =
-      mockState.addUris(RepoConfigLoader.defaultRepoConfigUrl -> defaultConfigContent)
-    verifyConfigFile("docs/repo-specific-configuration.md") {
-      val repoConfigLoader = new RepoConfigLoader
-      val repoConfig = repoConfigLoader
-        .loadGlobalRepoConfig(RepoConfigCfg(List(), disableDefault = false))
-        .runA(initialState)
-        .attempt
-        .unsafeRunSync()
-        .getOrElse(None)
-      assert(clue(repoConfig).isDefined)
-    }
-  }
-}
diff --git a/modules/core/src/test/scala/org/scalasteward/core/TestInstances.scala b/modules/core/src/test/scala/org/scalasteward/core/TestInstances.scala
index 72def136..cb8aea52 100644
--- a/modules/core/src/test/scala/org/scalasteward/core/TestInstances.scala
+++ b/modules/core/src/test/scala/org/scalasteward/core/TestInstances.scala
@@ -92,15 +92,11 @@ object TestInstances {
   }
 
   implicit val versionCogen: Cogen[Version] =
-    Cogen(
-      _.alnumComponents
-        .map {
-          case n: Version.Component.Numeric => n.toBigInt.toLong
-          case a: Version.Component.Alpha   => a.order.toLong
-          case _                            => 0L
-        }
-        .sum
-    )
+    Cogen(_.alnumComponents.map {
+      case n: Version.Component.Numeric => n.toBigInt.toLong
+      case a: Version.Component.Alpha   => a.order.toLong
+      case _                            => 0L
+    }.sum)
 
   // repoconfig instances
 
diff --git a/modules/core/src/test/scala/org/scalasteward/core/client/ClientConfigurationTest.scala b/modules/core/src/test/scala/org/scalasteward/core/client/ClientConfigurationTest.scala
index ea344bed..8fc0df36 100644
--- a/modules/core/src/test/scala/org/scalasteward/core/client/ClientConfigurationTest.scala
+++ b/modules/core/src/test/scala/org/scalasteward/core/client/ClientConfigurationTest.scala
@@ -46,16 +46,15 @@ class ClientConfigurationTest extends CatsEffectSuite {
     val setUserAgent = ClientConfiguration.setUserAgent[IO](dummyUserAgent)
     val newClient = setUserAgent(initialClient)
 
-    for {
-      _ <- newClient
-        .run(GET(uri"/user-agent"))
-        .use(r => r.status.code.pure[IO])
-        .assertEquals(200)
-      _ <- initialClient
-        .run(GET(uri"/user-agent"))
-        .use(r => r.status.code.pure[IO])
-        .assertEquals(400)
-    } yield ()
+    newClient
+      .run(GET(uri"/user-agent"))
+      .use(r => r.status.code.pure[IO])
+      .assertEquals(200)
+
+    initialClient
+      .run(GET(uri"/user-agent"))
+      .use(r => r.status.code.pure[IO])
+      .assertEquals(400)
   }
 
   test("disableFollowRedirect does not follow redirect") {
diff --git a/modules/core/src/test/scala/org/scalasteward/core/mock/MockContext.scala b/modules/core/src/test/scala/org/scalasteward/core/mock/MockContext.scala
index c5f81193..09740e8a 100644
--- a/modules/core/src/test/scala/org/scalasteward/core/mock/MockContext.scala
+++ b/modules/core/src/test/scala/org/scalasteward/core/mock/MockContext.scala
@@ -25,7 +25,7 @@ object MockContext {
     RepoConfigLoader.defaultRepoConfigUrl ->
       ioFileAlg.readResource("default.scala-steward.conf").unsafeRunSync(),
     ArtifactMigrationsLoader.defaultArtifactMigrationsUrl ->
-      ioFileAlg.readResource("artifact-migrations.v2.conf").unsafeRunSync(),
+      ioFileAlg.readResource("artifact-migrations.conf").unsafeRunSync(),
     ScalafixMigrationsLoader.defaultScalafixMigrationsUrl ->
       ioFileAlg.readResource("scalafix-migrations.conf").unsafeRunSync()
   )
diff --git a/modules/core/src/test/scala/org/scalasteward/core/vcs/data/NewPullRequestDataTest.scala b/modules/core/src/test/scala/org/scalasteward/core/vcs/data/NewPullRequestDataTest.scala
index 92f07680..c0016374 100644
--- a/modules/core/src/test/scala/org/scalasteward/core/vcs/data/NewPullRequestDataTest.scala
+++ b/modules/core/src/test/scala/org/scalasteward/core/vcs/data/NewPullRequestDataTest.scala
@@ -28,7 +28,7 @@ class NewPullRequestDataTest extends FunSuite {
     val expected =
       raw"""|{
             |  "title" : "Update logback-classic to 1.2.3",
-            |  "body" : "Updates ch.qos.logback:logback-classic from 1.2.0 to 1.2.3.\n\n\nI'll automatically update this PR to resolve conflicts as long as you don't change it yourself.\n\nIf you'd like to skip this version, you can just close this PR. If you have any feedback, just mention me in the comments below.\n\nConfigure Scala Steward for your repository with a [`.scala-steward.conf`](https://github.com/scala-steward-org/scala-steward/blob/${org.scalasteward.core.BuildInfo.gitHeadCommit}/docs/repo-specific-configuration.md) file.\n\nHave a fantastic day writing Scala!\n\n<details>\n<summary>Adjust future updates</summary>\n\nAdd this to your `.scala-steward.conf` file to ignore future updates of this dependency:\n```\nupdates.ignore = [ { groupId = \"ch.qos.logback\", artifactId = \"logback-classic\" } ]\n```\nOr, add this to slow down future updates of this dependency:\n```\ndependencyOverrides = [{\n  pullRequests = { frequency = \"@monthly\" },\n  dependency = { groupId = \"ch.qos.logback\", artifactId = \"logback-classic\" }\n}]\n```\n</details>\n\nlabels: library-update, early-semver-patch, semver-spec-patch, commit-count:0",
+            |  "body" : "Updates ch.qos.logback:logback-classic from 1.2.0 to 1.2.3.\n\n\nI'll automatically update this PR to resolve conflicts as long as you don't change it yourself.\n\nIf you'd like to skip this version, you can just close this PR. If you have any feedback, just mention me in the comments below.\n\nConfigure Scala Steward for your repository with a [`.scala-steward.conf`](https://github.com/scala-steward-org/scala-steward/blob/${org.scalasteward.core.BuildInfo.gitHeadCommit}/docs/repo-specific-configuration.md) file.\n\nHave a fantastic day writing Scala!\n\n<details>\n<summary>Ignore future updates</summary>\n\nAdd this to your `.scala-steward.conf` file to ignore future updates of this dependency:\n```\nupdates.ignore = [ { groupId = \"ch.qos.logback\", artifactId = \"logback-classic\" } ]\n```\n</details>\n\nlabels: library-update, early-semver-patch, semver-spec-patch, commit-count:0",
             |  "head" : "scala-steward:update/logback-classic-1.2.3",
             |  "base" : "master",
             |  "draft" : false
@@ -53,7 +53,7 @@ class NewPullRequestDataTest extends FunSuite {
     val expected =
       raw"""|{
             |  "title" : "Update logback-classic to 1.2.3",
-            |  "body" : "Updates ch.qos.logback:logback-classic from 1.2.0 to 1.2.3.\n\n\nI'll automatically update this PR to resolve conflicts as long as you don't change it yourself.\n\nIf you'd like to skip this version, you can just close this PR. If you have any feedback, just mention me in the comments below.\n\nConfigure Scala Steward for your repository with a [`.scala-steward.conf`](https://github.com/scala-steward-org/scala-steward/blob/${org.scalasteward.core.BuildInfo.gitHeadCommit}/docs/repo-specific-configuration.md) file.\n\nHave a fantastic day writing Scala!\n\n<details>\n<summary>Adjust future updates</summary>\n\nAdd this to your `.scala-steward.conf` file to ignore future updates of this dependency:\n```\nupdates.ignore = [ { groupId = \"ch.qos.logback\", artifactId = \"logback-classic\" } ]\n```\nOr, add this to slow down future updates of this dependency:\n```\ndependencyOverrides = [{\n  pullRequests = { frequency = \"@monthly\" },\n  dependency = { groupId = \"ch.qos.logback\", artifactId = \"logback-classic\" }\n}]\n```\n</details>\n<details>\n<summary>Note that the Scala Steward config file `.scala-steward.conf` wasn't parsed correctly</summary>\n\n```\nFailed to parse .scala-steward.conf\n```\n</details>\n\nlabels: library-update, early-semver-patch, semver-spec-patch, commit-count:0",
+            |  "body" : "Updates ch.qos.logback:logback-classic from 1.2.0 to 1.2.3.\n\n\nI'll automatically update this PR to resolve conflicts as long as you don't change it yourself.\n\nIf you'd like to skip this version, you can just close this PR. If you have any feedback, just mention me in the comments below.\n\nConfigure Scala Steward for your repository with a [`.scala-steward.conf`](https://github.com/scala-steward-org/scala-steward/blob/${org.scalasteward.core.BuildInfo.gitHeadCommit}/docs/repo-specific-configuration.md) file.\n\nHave a fantastic day writing Scala!\n\n<details>\n<summary>Ignore future updates</summary>\n\nAdd this to your `.scala-steward.conf` file to ignore future updates of this dependency:\n```\nupdates.ignore = [ { groupId = \"ch.qos.logback\", artifactId = \"logback-classic\" } ]\n```\n</details>\n<details>\n<summary>Note that the Scala Steward config file `.scala-steward.conf` wasn't parsed correctly</summary>\n\n```\nFailed to parse .scala-steward.conf\n```\n</details>\n\nlabels: library-update, early-semver-patch, semver-spec-patch, commit-count:0",
             |  "head" : "scala-steward:update/logback-classic-1.2.3",
             |  "base" : "master",
             |  "draft" : false