Skip to content

Commit 47b15c7

Browse files
authored
Merge pull request #3726 from lolgab/mill1
2 parents a5c9660 + 0f5ee01 commit 47b15c7

File tree

5 files changed

+94
-8
lines changed

5 files changed

+94
-8
lines changed

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

Lines changed: 18 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ final class MillAlg[F[_]](defaultResolvers: List[Resolver])(implicit
3939
workspaceAlg.buildRootDir(buildRoot).flatMap(findBuildFile).map(_.nonEmpty)
4040

4141
private def findBuildFile(buildRootDir: File): F[Option[File]] =
42-
List("build.sc", "build.mill", "build.mill.scala")
42+
List("build.mill", "build.mill.scala", "build.sc")
4343
.map(buildRootDir / _)
4444
.findM(fileAlg.isRegularFile)
4545

@@ -90,11 +90,23 @@ final class MillAlg[F[_]](defaultResolvers: List[Resolver])(implicit
9090
override protected val scalafixIssue: Option[String] =
9191
Some("https://github.com/scala-steward-org/scala-steward/issues/2838")
9292

93-
private def getMillVersion(buildRootDir: File): F[Option[Version]] =
94-
List(
95-
buildRootDir / s".$millVersionName",
96-
buildRootDir / ".config" / millVersionName
97-
).collectFirstSomeM(fileAlg.readFile).map(_.flatMap(parser.parseMillVersion))
93+
private def getMillVersion(buildRootDir: File): F[Option[Version]] = {
94+
val fromConfigFile =
95+
List(
96+
buildRootDir / s".$millVersionName",
97+
buildRootDir / ".config" / millVersionName
98+
).collectFirstSomeM(fileAlg.readFile(_).map(_.flatMap(parser.parseMillVersion)))
99+
val fromBuildFile = List(
100+
buildRootDir / "build.mill",
101+
buildRootDir / "build.mill.scala",
102+
buildRootDir / "build.sc"
103+
).collectFirstSomeM(fileAlg.readFile(_).map(_.flatMap(parser.parseBuildFileMillVersion)))
104+
105+
fromBuildFile.flatMap {
106+
case None => fromConfigFile
107+
case some => F.pure(some)
108+
}
109+
}
98110

99111
private def getMillPluginDeps(
100112
millVersion: Version,

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

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,12 @@ object parser {
4646
def parseMillVersion(s: String): Option[Version] =
4747
Option(s.trim).filter(_.nonEmpty).map(Version.apply)
4848

49+
private val millVersionRegex = """\s*\/\/\|\s*mill-version:\s*['"]?(.+?)['"]?\s*""".r
50+
def parseBuildFileMillVersion(s: String): Option[Version] =
51+
s.linesIterator.collectFirst { case millVersionRegex(version) =>
52+
Version(version)
53+
}
54+
4955
/** Used to correctly format the Mill plugin artifacts will when included look like:
5056
* - import $ivy.`com.goyeau::mill-scalafix::0.2.10`
5157
*

modules/core/src/test/scala/org/scalasteward/core/buildtool/BuildToolDispatcherTest.scala

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -43,16 +43,16 @@ class BuildToolDispatcherTest extends FunSuite {
4343
val expectedState = initial.copy(trace =
4444
Cmd("test", "-f", s"$repoDir/gradle/libs.versions.toml") +:
4545
Cmd("test", "-f", s"$repoDir/pom.xml") +:
46-
Cmd("test", "-f", s"$repoDir/build.sc") +:
4746
Cmd("test", "-f", s"$repoDir/build.mill") +:
4847
Cmd("test", "-f", s"$repoDir/build.mill.scala") +:
48+
Cmd("test", "-f", s"$repoDir/build.sc") +:
4949
Cmd("test", "-f", s"$repoDir/build.sbt") +:
5050
allGreps ++:
5151
Cmd("test", "-f", s"$repoDir/mvn-build/gradle/libs.versions.toml") +:
5252
Cmd("test", "-f", s"$repoDir/mvn-build/pom.xml") +:
53-
Cmd("test", "-f", s"$repoDir/mvn-build/build.sc") +:
5453
Cmd("test", "-f", s"$repoDir/mvn-build/build.mill") +:
5554
Cmd("test", "-f", s"$repoDir/mvn-build/build.mill.scala") +:
55+
Cmd("test", "-f", s"$repoDir/mvn-build/build.sc") +:
5656
Cmd("test", "-f", s"$repoDir/mvn-build/build.sbt") +:
5757
allGreps ++:
5858
Log("Get dependencies in . from sbt") +:

modules/core/src/test/scala/org/scalasteward/core/buildtool/mill/MillAlgTest.scala

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,9 @@ class MillAlgTest extends FunSuite {
2222
val state = millAlg.getDependencies(buildRoot).runS(initial).unsafeRunSync()
2323
val expected = initial.copy(
2424
trace = Vector(
25+
Cmd("read", s"$buildRootDir/build.mill"),
26+
Cmd("read", s"$buildRootDir/build.mill.scala"),
27+
Cmd("read", s"$buildRootDir/build.sc"),
2528
Cmd("read", s"$buildRootDir/.mill-version"),
2629
Cmd("read", s"$buildRootDir/.config/mill-version"),
2730
Cmd("write", predef),
@@ -53,8 +56,13 @@ class MillAlgTest extends FunSuite {
5356
val state = millAlg.getDependencies(buildRoot).runS(initial).unsafeRunSync()
5457
val expected = initial.copy(
5558
trace = Vector(
59+
Cmd("read", s"$buildRootDir/build.mill"),
60+
Cmd("read", s"$buildRootDir/build.mill.scala"),
61+
Cmd("read", s"$buildRootDir/build.sc"),
5662
Cmd("read", s"$buildRootDir/.mill-version"),
5763
millCmd,
64+
Cmd("test", "-f", s"$buildRootDir/build.mill"),
65+
Cmd("test", "-f", s"$buildRootDir/build.mill.scala"),
5866
Cmd("test", "-f", s"$buildRootDir/build.sc"),
5967
Cmd("read", s"$buildRootDir/build.sc")
6068
)
@@ -84,15 +92,51 @@ class MillAlgTest extends FunSuite {
8492
val state = millAlg.getDependencies(buildRoot).runS(initial).unsafeRunSync()
8593
val expected = initial.copy(
8694
trace = Vector(
95+
Cmd("read", s"$buildRootDir/build.mill"),
96+
Cmd("read", s"$buildRootDir/build.mill.scala"),
97+
Cmd("read", s"$buildRootDir/build.sc"),
8798
Cmd("read", s"$buildRootDir/.mill-version"),
8899
millCmd,
100+
Cmd("test", "-f", s"$buildRootDir/build.mill"),
101+
Cmd("test", "-f", s"$buildRootDir/build.mill.scala"),
89102
Cmd("test", "-f", s"$buildRootDir/build.sc"),
90103
Cmd("read", s"$buildRootDir/build.sc")
91104
)
92105
)
93106
assertEquals(state, expected)
94107
}
95108

109+
test("getDependencies, 1 <= version") {
110+
val repo = Repo("mill-alg", "test-3")
111+
val buildRoot = BuildRoot(repo, ".")
112+
val buildRootDir = workspaceAlg.buildRootDir(buildRoot).unsafeRunSync()
113+
val millCmd = Cmd.execSandboxed(
114+
buildRootDir,
115+
"mill",
116+
"--no-server",
117+
"--ticker",
118+
"false",
119+
"--import",
120+
s"ivy:org.scala-steward::${BuildInfo.millPluginArtifactName}::${BuildInfo.millPluginVersion}",
121+
"show",
122+
extractDeps
123+
)
124+
val initial = MockState.empty
125+
.copy(commandOutputs = Map(millCmd -> Right(List("""{"modules":[]}"""))))
126+
.addFiles(buildRootDir / "build.mill" -> "//| mill-version: 1.0.6")
127+
.unsafeRunSync()
128+
val state = millAlg.getDependencies(buildRoot).runS(initial).unsafeRunSync()
129+
val expected = initial.copy(
130+
trace = Vector(
131+
Cmd("read", s"$buildRootDir/build.mill"),
132+
millCmd,
133+
Cmd("test", "-f", s"$buildRootDir/build.mill"),
134+
Cmd("read", s"$buildRootDir/build.mill")
135+
)
136+
)
137+
assertEquals(state, expected)
138+
}
139+
96140
test("predef-content") {
97141
assert(MillAlg.content(None).contains("_mill$MILL_BIN_PLATFORM"))
98142
assert(MillAlg.content(Some(Version("0.6.1"))).contains("_mill0.6"))

modules/core/src/test/scala/org/scalasteward/core/buildtool/mill/MillVersionParserTest.scala

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,4 +19,28 @@ class MillVersionParserTest extends FunSuite {
1919
val parsed = parser.parseMillVersion(versionFileContent).map(_.value)
2020
assertEquals(parsed, expected)
2121
}
22+
23+
test(s"parse version from build.mill file") {
24+
val buildMillFileContent = """
25+
|//| mill-version: 1.0.5
26+
|""".stripMargin
27+
val parsed = parser.parseBuildFileMillVersion(buildMillFileContent).map(_.value)
28+
assertEquals(parsed, Some("1.0.5"))
29+
}
30+
31+
test(s"parse quoted version from build.mill file") {
32+
val buildMillFileContent = """
33+
|//| mill-version: "1.0.5"
34+
|""".stripMargin
35+
val parsed = parser.parseBuildFileMillVersion(buildMillFileContent).map(_.value)
36+
assertEquals(parsed, Some("1.0.5"))
37+
}
38+
39+
test(s"parse single quoted version from build.mill file") {
40+
val buildMillFileContent = """
41+
|//| mill-version: '1.0.5'
42+
|""".stripMargin
43+
val parsed = parser.parseBuildFileMillVersion(buildMillFileContent).map(_.value)
44+
assertEquals(parsed, Some("1.0.5"))
45+
}
2246
}

0 commit comments

Comments
 (0)