From bff84e21eaeaafcc1267e69faa293a57fba1d9fd Mon Sep 17 00:00:00 2001 From: Matthias Kurz Date: Mon, 10 Jul 2023 23:05:10 +0200 Subject: [PATCH] Support scala-steward.conf (makes sense in .github and .config folder) --- docs/repo-specific-configuration.md | 4 +-- .../core/repoconfig/RepoConfigAlg.scala | 8 +++-- .../core/repoconfig/RepoConfigAlgTest.scala | 32 +++++++++++++++++-- .../docs/mdoc/repo-specific-configuration.md | 4 +-- 4 files changed, 39 insertions(+), 9 deletions(-) diff --git a/docs/repo-specific-configuration.md b/docs/repo-specific-configuration.md index fde386b7af..bb0432a039 100644 --- a/docs/repo-specific-configuration.md +++ b/docs/repo-specific-configuration.md @@ -1,7 +1,7 @@ # Repository-specific configuration -You can add a configuration file `.scala-steward.conf` to configure how Scala Steward updates your repository. -The `.scala-steward.conf` configuration file can be located in the root of your repository, in `.github` directory or in `.config` directory (searched in this order). +You can add a configuration file named either `.scala-steward.conf` or `scala-steward.conf` to configure how Scala Steward updates your repository. +The `[.]scala-steward.conf` configuration file can be located in the root of your repository, in `.github` directory or in `.config` directory (searched in this order). If a configuration file exists in more than one location, only the first found file is taken into account. ```properties diff --git a/modules/core/src/main/scala/org/scalasteward/core/repoconfig/RepoConfigAlg.scala b/modules/core/src/main/scala/org/scalasteward/core/repoconfig/RepoConfigAlg.scala index 68a5d4ddef..30ae3c12fe 100644 --- a/modules/core/src/main/scala/org/scalasteward/core/repoconfig/RepoConfigAlg.scala +++ b/modules/core/src/main/scala/org/scalasteward/core/repoconfig/RepoConfigAlg.scala @@ -43,7 +43,7 @@ final class RepoConfigAlg[F[_]](maybeGlobalRepoConfig: Option[RepoConfig])(impli )(readRepoConfigFromFile(_)) _ <- configParsingResult.fold( F.unit, - error => logger.info(s"Failed to parse $repoConfigBasename: ${error.getMessage}"), + error => logger.info(s"Failed to parse $activeConfigFile: ${error.getMessage}"), repoConfig => logger.info(s"Parsed repo config ${repoConfig.show}") ) } yield configParsingResult @@ -86,8 +86,10 @@ object RepoConfigAlg { private def activeConfigFile[F[_]]( repoDir: File )(implicit fileAlg: FileAlg[F], logger: Logger[F], F: Monad[F]): F[Option[File]] = { - val configFileCandidates: F[List[File]] = repoConfigFileSearchPath - .map(_ :+ repoConfigBasename) + val configFileCandidates: F[List[File]] = (repoConfigFileSearchPath + .map(_ :+ repoConfigBasename) ++ + repoConfigFileSearchPath + .map(_ :+ repoConfigBasename.substring(1))) .map(path => path.foldLeft(repoDir)(_ / _)) .filterA(fileAlg.isRegularFile) diff --git a/modules/core/src/test/scala/org/scalasteward/core/repoconfig/RepoConfigAlgTest.scala b/modules/core/src/test/scala/org/scalasteward/core/repoconfig/RepoConfigAlgTest.scala index 76077e33ee..fb620b7497 100644 --- a/modules/core/src/test/scala/org/scalasteward/core/repoconfig/RepoConfigAlgTest.scala +++ b/modules/core/src/test/scala/org/scalasteward/core/repoconfig/RepoConfigAlgTest.scala @@ -264,7 +264,7 @@ class RepoConfigAlgTest extends FunSuite { assert(clue(log).contains(startOfErrorMsg)) } - test("config file in .github/") { + test("hidden config file in .github/") { val repo = Repo("test", "dot-github-config") val repoDir = workspaceAlg.repoDir(repo).unsafeRunSync() val rootConfigFile = repoDir / ".scala-steward.conf" @@ -278,7 +278,21 @@ class RepoConfigAlgTest extends FunSuite { assert(config.maybeRepoConfig.isDefined) } - test("config file in .config/") { + test("not hidden config file in .github/") { + val repo = Repo("test", "dot-github-config") + val repoDir = workspaceAlg.repoDir(repo).unsafeRunSync() + val rootConfigFile = repoDir / "scala-steward.conf" + val dotGithubConfigFile = repoDir / ".github" / "scala-steward.conf" + val initialState = MockState.empty.addFiles(dotGithubConfigFile -> "").unsafeRunSync() + val config = repoConfigAlg.readRepoConfig(repo).runA(initialState).unsafeRunSync() + + assert(!fileAlg.isRegularFile(rootConfigFile).unsafeRunSync()) + assert(fileAlg.isRegularFile(dotGithubConfigFile).unsafeRunSync()) + + assert(config.maybeRepoConfig.isDefined) + } + + test("hidden config file in .config/") { val repo = Repo("test", "dot-config-config") val repoDir = workspaceAlg.repoDir(repo).unsafeRunSync() val rootConfigFile = repoDir / ".scala-steward.conf" @@ -292,6 +306,20 @@ class RepoConfigAlgTest extends FunSuite { assert(config.maybeRepoConfig.isDefined) } + test("not hidden config file in .config/") { + val repo = Repo("test", "dot-config-config") + val repoDir = workspaceAlg.repoDir(repo).unsafeRunSync() + val rootConfigFile = repoDir / "scala-steward.conf" + val dotConfigConfigFile = repoDir / ".config" / "scala-steward.conf" + val initialState = MockState.empty.addFiles(dotConfigConfigFile -> "").unsafeRunSync() + val config = repoConfigAlg.readRepoConfig(repo).runA(initialState).unsafeRunSync() + + assert(!fileAlg.isRegularFile(rootConfigFile).unsafeRunSync()) + assert(fileAlg.isRegularFile(dotConfigConfigFile).unsafeRunSync()) + + assert(config.maybeRepoConfig.isDefined) + } + test("log warning on multiple config files") { val repo = Repo("test", "multiple-config") val repoDir = workspaceAlg.repoDir(repo).unsafeRunSync() diff --git a/modules/docs/mdoc/repo-specific-configuration.md b/modules/docs/mdoc/repo-specific-configuration.md index 8469e51157..6d46149505 100644 --- a/modules/docs/mdoc/repo-specific-configuration.md +++ b/modules/docs/mdoc/repo-specific-configuration.md @@ -1,7 +1,7 @@ # Repository-specific configuration -You can add a configuration file `.scala-steward.conf` to configure how Scala Steward updates your repository. -The `.scala-steward.conf` configuration file can be located in the root of your repository, in `.github` directory or in `.config` directory (searched in this order). +You can add a configuration file named either `.scala-steward.conf` or `scala-steward.conf` to configure how Scala Steward updates your repository. +The `[.]scala-steward.conf` configuration file can be located in the root of your repository, in `.github` directory or in `.config` directory (searched in this order). If a configuration file exists in more than one location, only the first found file is taken into account. ```scala mdoc:passthrough