Skip to content

Commit 3f58890

Browse files
authored
Merge pull request #3570 from scala-steward-org/topic/multiple-default-resolvers
Support multiple default resolvers
2 parents 677f099 + 958820e commit 3f58890

File tree

8 files changed

+30
-28
lines changed

8 files changed

+30
-28
lines changed

docs/help.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ All command line arguments for the `scala-steward` application.
44

55
```
66
Usage:
7-
scala-steward --workspace <file> --repos-file <uri> [--repos-file <uri>]... [--git-author-name <string>] --git-author-email <string> [--git-author-signing-key <string>] --git-ask-pass <file> [--sign-commits] [--signoff] [--forge-type <forge-type>] [--forge-api-host <uri>] --forge-login <string> [--do-not-fork] [--add-labels] [--ignore-opts-files] [--env-var <name=value>]... [--process-timeout <duration>] [--whitelist <string>]... [--read-only <string>]... [--enable-sandbox | --disable-sandbox] [--max-buffer-size <integer>] [--repo-config <uri>]... [--disable-default-repo-config] [--scalafix-migrations <uri>]... [--disable-default-scalafix-migrations] [--artifact-migrations <uri>]... [--disable-default-artifact-migrations] [--cache-ttl <duration>] [--bitbucket-use-default-reviewers] [--bitbucket-server-use-default-reviewers] [--gitlab-merge-when-pipeline-succeeds] [--gitlab-required-reviewers <integer>] [--gitlab-remove-source-branch] [--azure-repos-organization <string>] [--github-app-id <integer> --github-app-key-file <file>] [--url-checker-test-url <uri>]... [--default-maven-repo <string>] [--refresh-backoff-period <duration>] [--exit-code-success-if-any-repo-succeeds]
7+
scala-steward --workspace <file> --repos-file <uri> [--repos-file <uri>]... [--git-author-name <string>] --git-author-email <string> [--git-author-signing-key <string>] --git-ask-pass <file> [--sign-commits] [--signoff] [--forge-type <forge-type>] [--forge-api-host <uri>] --forge-login <string> [--do-not-fork] [--add-labels] [--ignore-opts-files] [--env-var <name=value>]... [--process-timeout <duration>] [--whitelist <string>]... [--read-only <string>]... [--enable-sandbox | --disable-sandbox] [--max-buffer-size <integer>] [--repo-config <uri>]... [--disable-default-repo-config] [--scalafix-migrations <uri>]... [--disable-default-scalafix-migrations] [--artifact-migrations <uri>]... [--disable-default-artifact-migrations] [--cache-ttl <duration>] [--bitbucket-use-default-reviewers] [--bitbucket-server-use-default-reviewers] [--gitlab-merge-when-pipeline-succeeds] [--gitlab-required-reviewers <integer>] [--gitlab-remove-source-branch] [--azure-repos-organization <string>] [--github-app-id <integer> --github-app-key-file <file>] [--url-checker-test-url <uri>]... [--default-maven-repo <string>]... [--refresh-backoff-period <duration>] [--exit-code-success-if-any-repo-succeeds]
88
scala-steward validate-repo-config
99
1010
@@ -87,7 +87,7 @@ Options and flags:
8787
--url-checker-test-url <uri>
8888
URL for testing the UrlChecker at start-up (can be used multiple times); default: https://github.com
8989
--default-maven-repo <string>
90-
default: https://repo1.maven.org/maven2/
90+
(can be used multiple times); default: https://repo1.maven.org/maven2/
9191
--refresh-backoff-period <duration>
9292
Period of time a failed build won't be triggered again; default: 0days
9393
--exit-code-success-if-any-repo-succeeds

modules/core/src/main/scala/org/scalasteward/core/application/Cli.scala

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -316,11 +316,13 @@ object Cli {
316316
).withDefault(Nel.one(default))
317317
}
318318

319-
private val defaultMavenRepo: Opts[Resolver] = {
319+
private val defaultMavenRepos: Opts[List[Resolver]] = {
320320
val default = Resolver.mavenCentral
321-
option[String]("default-maven-repo", s"default: ${default.location}")
322-
.map(location => Resolver.MavenRepository("default", location, None, None))
323-
.withDefault(default)
321+
options[String]("default-maven-repo", s"$multiple; default: ${default.location}")
322+
.map(_.toList.zipWithIndex.map { case (location, i) =>
323+
Resolver.MavenRepository(s"default-$i", location, None, None)
324+
})
325+
.withDefault(List(default))
324326
}
325327

326328
private val exitCodePolicy: Opts[ExitCodePolicy] = flag(
@@ -347,7 +349,7 @@ object Cli {
347349
azureReposCfg,
348350
gitHubApp,
349351
urlCheckerTestUrls,
350-
defaultMavenRepo,
352+
defaultMavenRepos,
351353
refreshBackoffPeriod,
352354
exitCodePolicy
353355
).mapN(Config.apply).map(Usage.Regular.apply)

modules/core/src/main/scala/org/scalasteward/core/application/Config.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ final case class Config(
6262
azureReposCfg: AzureReposCfg,
6363
githubApp: Option[GitHubApp],
6464
urlCheckerTestUrls: Nel[Uri],
65-
defaultResolver: Resolver,
65+
defaultResolvers: List[Resolver],
6666
refreshBackoffPeriod: FiniteDuration,
6767
exitCodePolicy: ExitCodePolicy
6868
) {

modules/core/src/main/scala/org/scalasteward/core/application/Context.scala

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -172,17 +172,18 @@ object Context {
172172
implicit val pullRequestRepository: PullRequestRepository[F] =
173173
new PullRequestRepository[F](pullRequestsStore)
174174
implicit val scalafixCli: ScalafixCli[F] = new ScalafixCli[F]
175-
implicit val scalafmtAlg: ScalafmtAlg[F] = new ScalafmtAlg[F](config.defaultResolver)
175+
implicit val scalafmtAlg: ScalafmtAlg[F] = new ScalafmtAlg[F](config.defaultResolvers)
176176
implicit val selfCheckAlg: SelfCheckAlg[F] = new SelfCheckAlg[F](config)
177177
implicit val coursierAlg: CoursierAlg[F] = CoursierAlg.create[F]
178178
implicit val versionsCache: VersionsCache[F] =
179179
new VersionsCache[F](config.cacheTtl, versionsStore)
180180
implicit val updateAlg: UpdateAlg[F] = new UpdateAlg[F]
181-
implicit val gradleAlg: GradleAlg[F] = new GradleAlg[F](config.defaultResolver)
181+
implicit val gradleAlg: GradleAlg[F] = new GradleAlg[F](config.defaultResolvers)
182182
implicit val mavenAlg: MavenAlg[F] = new MavenAlg[F](config)
183-
implicit val sbtAlg: SbtAlg[F] = new SbtAlg[F](config)
183+
implicit val sbtAlg: SbtAlg[F] =
184+
new SbtAlg[F](config.defaultResolvers, config.ignoreOptsFiles)
184185
implicit val scalaCliAlg: ScalaCliAlg[F] = new ScalaCliAlg[F]
185-
implicit val millAlg: MillAlg[F] = new MillAlg[F](config.defaultResolver)
186+
implicit val millAlg: MillAlg[F] = new MillAlg[F](config.defaultResolvers)
186187
implicit val buildToolDispatcher: BuildToolDispatcher[F] = new BuildToolDispatcher[F]
187188
implicit val refreshErrorAlg: RefreshErrorAlg[F] =
188189
new RefreshErrorAlg[F](refreshErrorStore, config.refreshBackoffPeriod)

modules/core/src/main/scala/org/scalasteward/core/buildtool/gradle/GradleAlg.scala

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ import org.scalasteward.core.data.{Resolver, Scope}
2525
import org.scalasteward.core.io.{FileAlg, WorkspaceAlg}
2626
import org.typelevel.log4cats.Logger
2727

28-
final class GradleAlg[F[_]](defaultResolver: Resolver)(implicit
28+
final class GradleAlg[F[_]](defaultResolvers: List[Resolver])(implicit
2929
fileAlg: FileAlg[F],
3030
override protected val logger: Logger[F],
3131
workspaceAlg: WorkspaceAlg[F],
@@ -42,7 +42,7 @@ final class GradleAlg[F[_]](defaultResolver: Resolver)(implicit
4242
.map(_.getOrElse(""))
4343
.map(gradleParser.parseDependenciesAndPlugins)
4444
.map { case (dependencies, plugins) =>
45-
val ds = Option.when(dependencies.nonEmpty)(Scope(dependencies, List(defaultResolver)))
45+
val ds = Option.when(dependencies.nonEmpty)(Scope(dependencies, defaultResolvers))
4646
val ps = Option.when(plugins.nonEmpty)(Scope(plugins, List(pluginsResolver)))
4747
ds.toList ++ ps.toList
4848
}

modules/core/src/main/scala/org/scalasteward/core/buildtool/mill/MillAlg.scala

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ import org.scalasteward.core.io.{FileAlg, ProcessAlg, WorkspaceAlg}
2626
import org.scalasteward.core.util.Nel
2727
import org.typelevel.log4cats.Logger
2828

29-
final class MillAlg[F[_]](defaultResolver: Resolver)(implicit
29+
final class MillAlg[F[_]](defaultResolvers: List[Resolver])(implicit
3030
fileAlg: FileAlg[F],
3131
override protected val logger: Logger[F],
3232
processAlg: ProcessAlg[F],
@@ -67,7 +67,7 @@ final class MillAlg[F[_]](defaultResolver: Resolver)(implicit
6767
millBuildVersion <- getMillVersion(buildRootDir)
6868
dependencies <- getProjectDependencies(buildRootDir, millBuildVersion)
6969
millBuildDeps = millBuildVersion.toSeq.map(version =>
70-
Scope(List(millMainArtifact(version)), List(defaultResolver))
70+
Scope(List(millMainArtifact(version)), defaultResolvers)
7171
)
7272
millPluginDeps <- millBuildVersion match {
7373
case None => F.pure(Seq.empty[Scope[List[Dependency]]])
@@ -104,7 +104,7 @@ final class MillAlg[F[_]](defaultResolver: Resolver)(implicit
104104
buildFile <- findBuildFile(buildRootDir)
105105
buildContent <- buildFile.flatTraverse(fileAlg.readFile)
106106
deps = buildContent.toList.map(content =>
107-
Scope(parser.parseMillPluginDeps(content, millVersion), List(defaultResolver))
107+
Scope(parser.parseMillPluginDeps(content, millVersion), defaultResolvers)
108108
)
109109
} yield deps
110110
}

modules/core/src/main/scala/org/scalasteward/core/buildtool/sbt/SbtAlg.scala

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -20,18 +20,17 @@ import better.files.File
2020
import cats.data.OptionT
2121
import cats.effect.{Concurrent, Resource}
2222
import cats.syntax.all.*
23-
import org.scalasteward.core.application.Config
2423
import org.scalasteward.core.buildtool.sbt.command.*
2524
import org.scalasteward.core.buildtool.{BuildRoot, BuildToolAlg}
2625
import org.scalasteward.core.coursier.VersionsCache
27-
import org.scalasteward.core.data.{Dependency, Scope, Version}
26+
import org.scalasteward.core.data.{Dependency, Resolver, Scope, Version}
2827
import org.scalasteward.core.edit.scalafix.{ScalafixCli, ScalafixMigration}
2928
import org.scalasteward.core.io.process.SlurpOptions
3029
import org.scalasteward.core.io.{FileAlg, FileData, ProcessAlg, WorkspaceAlg}
3130
import org.scalasteward.core.util.Nel
3231
import org.typelevel.log4cats.Logger
3332

34-
final class SbtAlg[F[_]](config: Config)(implicit
33+
final class SbtAlg[F[_]](defaultResolvers: List[Resolver], ignoreOptsFiles: Boolean)(implicit
3534
fileAlg: FileAlg[F],
3635
override protected val logger: Logger[F],
3736
processAlg: ProcessAlg[F],
@@ -100,7 +99,7 @@ final class SbtAlg[F[_]](config: Config)(implicit
10099
}
101100

102101
private def scopedSbtDependency(sbtVersion: Version): Option[Scope[Dependency]] =
103-
sbtDependency(sbtVersion).map(dep => Scope(dep, List(config.defaultResolver)))
102+
sbtDependency(sbtVersion).map(dep => Scope(dep, defaultResolvers))
104103

105104
override def runMigration(buildRoot: BuildRoot, migration: ScalafixMigration): F[Unit] =
106105
migration.targetOrDefault match {
@@ -128,7 +127,7 @@ final class SbtAlg[F[_]](config: Config)(implicit
128127

129128
private def latestSbtScalafixVersion: F[Option[Version]] =
130129
versionsCache
131-
.getVersions(Scope(sbtScalafixDependency, List(config.defaultResolver)), None)
130+
.getVersions(Scope(sbtScalafixDependency, defaultResolvers), None)
132131
.map(_.lastOption)
133132

134133
private def runBuildMigration(buildRoot: BuildRoot, migration: ScalafixMigration): F[Unit] =
@@ -163,10 +162,10 @@ final class SbtAlg[F[_]](config: Config)(implicit
163162
}
164163

165164
private def maybeIgnoreOptsFiles(dir: File): Resource[F, Unit] =
166-
if (config.ignoreOptsFiles) ignoreOptsFiles(dir) else Resource.unit[F]
167-
168-
private def ignoreOptsFiles(dir: File): Resource[F, Unit] =
169-
List(".jvmopts", ".sbtopts").traverse_(file => fileAlg.removeTemporarily(dir / file))
165+
if (ignoreOptsFiles)
166+
List(".jvmopts", ".sbtopts").traverse_(file => fileAlg.removeTemporarily(dir / file))
167+
else
168+
Resource.unit[F]
170169

171170
private val project = "project"
172171
}

modules/core/src/main/scala/org/scalasteward/core/scalafmt/ScalafmtAlg.scala

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ import org.scalasteward.core.scalafmt.ScalafmtAlg.{opts, parseScalafmtConf}
2828
import org.scalasteward.core.util.Nel
2929
import org.typelevel.log4cats.Logger
3030

31-
final class ScalafmtAlg[F[_]](defaultResolver: Resolver)(implicit
31+
final class ScalafmtAlg[F[_]](defaultResolvers: List[Resolver])(implicit
3232
fileAlg: FileAlg[F],
3333
logger: Logger[F],
3434
processAlg: ProcessAlg[F],
@@ -48,7 +48,7 @@ final class ScalafmtAlg[F[_]](defaultResolver: Resolver)(implicit
4848

4949
def getScopedScalafmtDependency(buildRoot: BuildRoot): F[Option[Scope.Dependencies]] =
5050
OptionT(getScalafmtVersion(buildRoot))
51-
.map(version => Scope(List(scalafmtDependency(version)), List(defaultResolver)))
51+
.map(version => Scope(List(scalafmtDependency(version)), defaultResolvers))
5252
.value
5353

5454
def reformatChanged(buildRoot: BuildRoot): F[Unit] =

0 commit comments

Comments
 (0)