diff --git a/modules/core/src/main/scala/org/scalasteward/core/buildtool/mill/MillAlg.scala b/modules/core/src/main/scala/org/scalasteward/core/buildtool/mill/MillAlg.scala index 763b960e8b..842dbde79e 100644 --- a/modules/core/src/main/scala/org/scalasteward/core/buildtool/mill/MillAlg.scala +++ b/modules/core/src/main/scala/org/scalasteward/core/buildtool/mill/MillAlg.scala @@ -39,7 +39,7 @@ final class MillAlg[F[_]](defaultResolvers: List[Resolver])(implicit workspaceAlg.buildRootDir(buildRoot).flatMap(findBuildFile).map(_.nonEmpty) private def findBuildFile(buildRootDir: File): F[Option[File]] = - List("build.sc", "build.mill", "build.mill.scala") + List("build.mill", "build.mill.scala", "build.sc") .map(buildRootDir / _) .findM(fileAlg.isRegularFile) @@ -90,11 +90,23 @@ final class MillAlg[F[_]](defaultResolvers: List[Resolver])(implicit override protected val scalafixIssue: Option[String] = Some("https://github.com/scala-steward-org/scala-steward/issues/2838") - private def getMillVersion(buildRootDir: File): F[Option[Version]] = - List( - buildRootDir / s".$millVersionName", - buildRootDir / ".config" / millVersionName - ).collectFirstSomeM(fileAlg.readFile).map(_.flatMap(parser.parseMillVersion)) + private def getMillVersion(buildRootDir: File): F[Option[Version]] = { + val fromConfigFile = + List( + buildRootDir / s".$millVersionName", + buildRootDir / ".config" / millVersionName + ).collectFirstSomeM(fileAlg.readFile(_).map(_.flatMap(parser.parseMillVersion))) + val fromBuildFile = List( + buildRootDir / "build.mill", + buildRootDir / "build.mill.scala", + buildRootDir / "build.sc" + ).collectFirstSomeM(fileAlg.readFile(_).map(_.flatMap(parser.parseBuildFileMillVersion))) + + fromBuildFile.flatMap { + case None => fromConfigFile + case some => F.pure(some) + } + } private def getMillPluginDeps( millVersion: Version, diff --git a/modules/core/src/main/scala/org/scalasteward/core/buildtool/mill/parser.scala b/modules/core/src/main/scala/org/scalasteward/core/buildtool/mill/parser.scala index beb1fc9273..d2c6eefc29 100644 --- a/modules/core/src/main/scala/org/scalasteward/core/buildtool/mill/parser.scala +++ b/modules/core/src/main/scala/org/scalasteward/core/buildtool/mill/parser.scala @@ -46,6 +46,12 @@ object parser { def parseMillVersion(s: String): Option[Version] = Option(s.trim).filter(_.nonEmpty).map(Version.apply) + private val millVersionRegex = """\s*\/\/\|\s*mill-version:\s*['"]?(.+?)['"]?\s*""".r + def parseBuildFileMillVersion(s: String): Option[Version] = + s.linesIterator.collectFirst { case millVersionRegex(version) => + Version(version) + } + /** Used to correctly format the Mill plugin artifacts will when included look like: * - import $ivy.`com.goyeau::mill-scalafix::0.2.10` * diff --git a/modules/core/src/test/scala/org/scalasteward/core/buildtool/BuildToolDispatcherTest.scala b/modules/core/src/test/scala/org/scalasteward/core/buildtool/BuildToolDispatcherTest.scala index d89d9e5e90..0700953426 100644 --- a/modules/core/src/test/scala/org/scalasteward/core/buildtool/BuildToolDispatcherTest.scala +++ b/modules/core/src/test/scala/org/scalasteward/core/buildtool/BuildToolDispatcherTest.scala @@ -43,16 +43,16 @@ class BuildToolDispatcherTest extends FunSuite { val expectedState = initial.copy(trace = Cmd("test", "-f", s"$repoDir/gradle/libs.versions.toml") +: Cmd("test", "-f", s"$repoDir/pom.xml") +: - Cmd("test", "-f", s"$repoDir/build.sc") +: Cmd("test", "-f", s"$repoDir/build.mill") +: Cmd("test", "-f", s"$repoDir/build.mill.scala") +: + Cmd("test", "-f", s"$repoDir/build.sc") +: Cmd("test", "-f", s"$repoDir/build.sbt") +: allGreps ++: Cmd("test", "-f", s"$repoDir/mvn-build/gradle/libs.versions.toml") +: Cmd("test", "-f", s"$repoDir/mvn-build/pom.xml") +: - Cmd("test", "-f", s"$repoDir/mvn-build/build.sc") +: Cmd("test", "-f", s"$repoDir/mvn-build/build.mill") +: Cmd("test", "-f", s"$repoDir/mvn-build/build.mill.scala") +: + Cmd("test", "-f", s"$repoDir/mvn-build/build.sc") +: Cmd("test", "-f", s"$repoDir/mvn-build/build.sbt") +: allGreps ++: Log("Get dependencies in . from sbt") +: diff --git a/modules/core/src/test/scala/org/scalasteward/core/buildtool/mill/MillAlgTest.scala b/modules/core/src/test/scala/org/scalasteward/core/buildtool/mill/MillAlgTest.scala index 1462879fbf..dbf6997961 100644 --- a/modules/core/src/test/scala/org/scalasteward/core/buildtool/mill/MillAlgTest.scala +++ b/modules/core/src/test/scala/org/scalasteward/core/buildtool/mill/MillAlgTest.scala @@ -22,6 +22,9 @@ class MillAlgTest extends FunSuite { val state = millAlg.getDependencies(buildRoot).runS(initial).unsafeRunSync() val expected = initial.copy( trace = Vector( + Cmd("read", s"$buildRootDir/build.mill"), + Cmd("read", s"$buildRootDir/build.mill.scala"), + Cmd("read", s"$buildRootDir/build.sc"), Cmd("read", s"$buildRootDir/.mill-version"), Cmd("read", s"$buildRootDir/.config/mill-version"), Cmd("write", predef), @@ -53,8 +56,13 @@ class MillAlgTest extends FunSuite { val state = millAlg.getDependencies(buildRoot).runS(initial).unsafeRunSync() val expected = initial.copy( trace = Vector( + Cmd("read", s"$buildRootDir/build.mill"), + Cmd("read", s"$buildRootDir/build.mill.scala"), + Cmd("read", s"$buildRootDir/build.sc"), Cmd("read", s"$buildRootDir/.mill-version"), millCmd, + Cmd("test", "-f", s"$buildRootDir/build.mill"), + Cmd("test", "-f", s"$buildRootDir/build.mill.scala"), Cmd("test", "-f", s"$buildRootDir/build.sc"), Cmd("read", s"$buildRootDir/build.sc") ) @@ -84,8 +92,13 @@ class MillAlgTest extends FunSuite { val state = millAlg.getDependencies(buildRoot).runS(initial).unsafeRunSync() val expected = initial.copy( trace = Vector( + Cmd("read", s"$buildRootDir/build.mill"), + Cmd("read", s"$buildRootDir/build.mill.scala"), + Cmd("read", s"$buildRootDir/build.sc"), Cmd("read", s"$buildRootDir/.mill-version"), millCmd, + Cmd("test", "-f", s"$buildRootDir/build.mill"), + Cmd("test", "-f", s"$buildRootDir/build.mill.scala"), Cmd("test", "-f", s"$buildRootDir/build.sc"), Cmd("read", s"$buildRootDir/build.sc") ) @@ -93,6 +106,37 @@ class MillAlgTest extends FunSuite { assertEquals(state, expected) } + test("getDependencies, 1 <= version") { + val repo = Repo("mill-alg", "test-3") + val buildRoot = BuildRoot(repo, ".") + val buildRootDir = workspaceAlg.buildRootDir(buildRoot).unsafeRunSync() + val millCmd = Cmd.execSandboxed( + buildRootDir, + "mill", + "--no-server", + "--ticker", + "false", + "--import", + s"ivy:org.scala-steward::${BuildInfo.millPluginArtifactName}::${BuildInfo.millPluginVersion}", + "show", + extractDeps + ) + val initial = MockState.empty + .copy(commandOutputs = Map(millCmd -> Right(List("""{"modules":[]}""")))) + .addFiles(buildRootDir / "build.mill" -> "//| mill-version: 1.0.6") + .unsafeRunSync() + val state = millAlg.getDependencies(buildRoot).runS(initial).unsafeRunSync() + val expected = initial.copy( + trace = Vector( + Cmd("read", s"$buildRootDir/build.mill"), + millCmd, + Cmd("test", "-f", s"$buildRootDir/build.mill"), + Cmd("read", s"$buildRootDir/build.mill") + ) + ) + assertEquals(state, expected) + } + test("predef-content") { assert(MillAlg.content(None).contains("_mill$MILL_BIN_PLATFORM")) assert(MillAlg.content(Some(Version("0.6.1"))).contains("_mill0.6")) diff --git a/modules/core/src/test/scala/org/scalasteward/core/buildtool/mill/MillVersionParserTest.scala b/modules/core/src/test/scala/org/scalasteward/core/buildtool/mill/MillVersionParserTest.scala index d8ff1df99b..67652ec655 100644 --- a/modules/core/src/test/scala/org/scalasteward/core/buildtool/mill/MillVersionParserTest.scala +++ b/modules/core/src/test/scala/org/scalasteward/core/buildtool/mill/MillVersionParserTest.scala @@ -19,4 +19,28 @@ class MillVersionParserTest extends FunSuite { val parsed = parser.parseMillVersion(versionFileContent).map(_.value) assertEquals(parsed, expected) } + + test(s"parse version from build.mill file") { + val buildMillFileContent = """ + |//| mill-version: 1.0.5 + |""".stripMargin + val parsed = parser.parseBuildFileMillVersion(buildMillFileContent).map(_.value) + assertEquals(parsed, Some("1.0.5")) + } + + test(s"parse quoted version from build.mill file") { + val buildMillFileContent = """ + |//| mill-version: "1.0.5" + |""".stripMargin + val parsed = parser.parseBuildFileMillVersion(buildMillFileContent).map(_.value) + assertEquals(parsed, Some("1.0.5")) + } + + test(s"parse single quoted version from build.mill file") { + val buildMillFileContent = """ + |//| mill-version: '1.0.5' + |""".stripMargin + val parsed = parser.parseBuildFileMillVersion(buildMillFileContent).map(_.value) + assertEquals(parsed, Some("1.0.5")) + } } diff --git a/project/Dependencies.scala b/project/Dependencies.scala index 00fd3689ff..aff2f735ea 100644 --- a/project/Dependencies.scala +++ b/project/Dependencies.scala @@ -44,6 +44,6 @@ object Dependencies { val scalacheck = "org.scalacheck" %% "scalacheck" % "1.19.0" val scalaStewardMillPluginArtifactName = "scala-steward-mill-plugin" val scalaStewardMillPlugin = - "org.scala-steward" % s"${scalaStewardMillPluginArtifactName}_mill0.11_2.13" % "0.18.2" + "org.scala-steward" % s"${scalaStewardMillPluginArtifactName}_mill1_3" % "0.19.0" val tomlj = "org.tomlj" % "tomlj" % "1.1.1" }