Skip to content

Commit fce3937

Browse files
authored
Clean up mill-dist generation (#5014)
- Rename `trait InstallModule` to `DistModule` - Rename `testDep` to `localTestOverrides` - No longer include `mill.runner` in `dist.localTestOverrides`, since those are bundled with the executable classpath and should never be resolved via coursier - `DistModule` is now a bare `Module`, not a `MillPublishJavaModule`. `build.dist` is a non-publish module which defines `def publishArtifacts` itself rather than going through `PublishModule` - `DistModule` defines `def publishArtifacts` directly rather than inheriting/overriding it from `MillPublishJavaModule`. The various publishing `ExternalModule`s all just look for a duck-typed `def publishArtifacts: T[PublishModule.PublishData]`, so we shouldn't actually need to inherit from `PublishModule` for publishing to work - `def uploadToGithub` since we distribute all artifacts on maven central now - Remove `dist0` since it's no longer necessary - Consolidate handling of `def transitiveLocalTestOverrides` in `dist/package.mill` Overall this narrows down the logic around `dist` publishing considerably: we no longer publish them as full `JavaModule`s with associated poms and sourcejars and javadoc and metadata, and instead publish only the executable assembly jar or native image for people to use. Which is what we want, since the `dist` files are all standalone and should never be part of a larger JVM dependency graph.
1 parent 23cff24 commit fce3937

File tree

21 files changed

+168
-211
lines changed

21 files changed

+168
-211
lines changed

build.mill

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -412,7 +412,8 @@ val bridgeVersion = "0.0.1"
412412
trait MillJavaModule extends JavaModule {
413413

414414
// Test setup
415-
def testDep = Task { (s"com.lihaoyi-${artifactId()}", testDepPaths().map(_.path).mkString("\n")) }
415+
def localTestOverride =
416+
Task { (s"com.lihaoyi-${artifactId()}", localTestOverridePaths().map(_.path).mkString("\n")) }
416417

417418
def testArgs: T[Seq[String]] = Task {
418419
// Workaround for Zinc/JNA bug
@@ -423,14 +424,15 @@ trait MillJavaModule extends JavaModule {
423424
else Nil
424425
jnaArgs ++ userLang
425426
}
426-
def testDepPaths = Task { upstreamAssemblyClasspath() ++ Seq(compile().classes) ++ resources() }
427+
def localTestOverridePaths =
428+
Task { upstreamAssemblyClasspath() ++ Seq(compile().classes) ++ resources() }
427429

428-
def testTransitiveDeps: T[Map[String, String]] = Task {
430+
def transitiveLocalTestOverrides: T[Map[String, String]] = Task {
429431
val upstream = Task.traverse(moduleDeps ++ compileModuleDeps) {
430-
case m: MillJavaModule => m.testTransitiveDeps.map(Some(_))
432+
case m: MillJavaModule => m.transitiveLocalTestOverrides.map(Some(_))
431433
case _ => Task.Anon(None)
432434
}().flatten.flatten
433-
val current = Seq(testDep())
435+
val current = Seq(localTestOverride())
434436
upstream.toMap ++ current
435437
}
436438

@@ -441,7 +443,7 @@ trait MillJavaModule extends JavaModule {
441443
else Seq(this, build.libs.main.test)
442444

443445
def localTestOverridesClasspath = Task {
444-
for ((k, v) <- testTransitiveDeps()) {
446+
for ((k, v) <- transitiveLocalTestOverrides()) {
445447
os.write(Task.dest / "mill/local-test-overrides" / k, v, createFolders = true)
446448
}
447449
PathRef(Task.dest)

contrib/package.mill

Lines changed: 12 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -33,12 +33,12 @@ object `package` extends RootModule {
3333

3434
object testng extends JavaModule with ContribModule {
3535

36-
def testTransitiveDeps =
37-
super.testTransitiveDeps() ++
36+
def transitiveLocalTestOverrides =
37+
super.transitiveLocalTestOverrides() ++
3838
Seq(
39-
build.libs.scalalib.testDep(),
40-
build.libs.scalalib.worker.testDep(),
41-
build.libs.testrunner.entrypoint.testDep()
39+
build.libs.scalalib.localTestOverride(),
40+
build.libs.scalalib.worker.localTestOverride(),
41+
build.libs.testrunner.entrypoint.localTestOverride()
4242
)
4343

4444
// pure Java implementation
@@ -60,8 +60,10 @@ object `package` extends RootModule {
6060
def moduleDeps = Seq(twirllib, playlib.api)
6161
def compileModuleDeps = Seq(build.libs.scalalib)
6262

63-
def testTransitiveDeps =
64-
super.testTransitiveDeps() ++ Task.traverse(build.Deps.play.keys.toSeq)(worker(_).testDep)()
63+
def transitiveLocalTestOverrides =
64+
super.transitiveLocalTestOverrides() ++ Task.traverse(
65+
build.Deps.play.keys.toSeq
66+
)(worker(_).localTestOverride)()
6567

6668
def testArgs = Task {
6769
super.testArgs() ++
@@ -108,8 +110,8 @@ object `package` extends RootModule {
108110
def moduleDeps = Seq(scoverage.api)
109111
def compileModuleDeps = Seq(build.libs.scalalib)
110112

111-
def testTransitiveDeps =
112-
super.testTransitiveDeps() ++ Seq(worker2.testDep())
113+
def transitiveLocalTestOverrides =
114+
super.transitiveLocalTestOverrides() ++ Seq(worker2.localTestOverride())
113115

114116
def testArgs = Task {
115117
super.testArgs() ++
@@ -130,7 +132,7 @@ object `package` extends RootModule {
130132

131133
// Worker for Scoverage 2.0
132134
object worker2 extends build.MillPublishScalaModule {
133-
def testDepPaths = Task { Seq(compile().classes) }
135+
def localTestOverridePaths = Task { Seq(compile().classes) }
134136
def compileModuleDeps = Seq(
135137
build.core.api,
136138
scoverage.api

core/util/package.mill

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -38,13 +38,6 @@ object `package` extends build.MillStableScalaModule with BuildInfo {
3838
),
3939
BuildInfo.Value("scalaVersion", scalaVersion(), "Scala version used to compile mill core."),
4040
BuildInfo.Value("millVersion", build.millVersion(), "Mill version."),
41-
BuildInfo.Value(
42-
"millDistModule", {
43-
val selfDep = build.dist.publishSelfDependency()
44-
s"${selfDep.group}:${selfDep.id}"
45-
},
46-
"Coordinates of the module pulling the whole of Mill"
47-
),
4841
BuildInfo.Value("millBinPlatform", build.millBinPlatform(), "Mill binary platform version."),
4942
BuildInfo.Value(
5043
"millAllDistDependencies", {

core/util/src/mill/util/Jvm.scala

Lines changed: 69 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -677,62 +677,75 @@ object Jvm {
677677
val resolutionParams0 = resolutionParams
678678
.addForceVersion(forceVersions.toSeq*)
679679

680-
val testOverridesRepo =
681-
new TestOverridesRepo(os.resource(getClass.getClassLoader) / "mill/local-test-overrides")
682-
683-
val resolve = Resolve()
684-
.withCache(coursierCache0)
685-
.withDependencies(rootDeps)
686-
.withRepositories(testOverridesRepo +: repositories)
687-
.withResolutionParams(resolutionParams0)
688-
.withMapDependenciesOpt(mapDependencies)
689-
.withBoms(boms.iterator.toSeq)
690-
691-
resolve.either() match {
692-
case Left(error) =>
693-
val cantDownloadErrors = error.errors.collect {
694-
case cantDownload: CantDownloadModule => cantDownload
695-
}
696-
if (error.errors.length == cantDownloadErrors.length) {
697-
val extraHeader =
698-
if (offlineMode)
699-
"""
700-
|*** Mill is in offline mode (--offline) ***
701-
|It can not download new dependencies from remote repositories.
702-
|You may need to run Mill without the `--offline` option at least once
703-
|to download required remote dependencies.
704-
|Run `mill __.prepareOffline` to fetch most remote resources at once.
705-
|
706-
|""".stripMargin
707-
else ""
708-
709-
val header =
710-
s"""|
711-
|${extraHeader}Resolution failed for ${cantDownloadErrors.length} modules:
712-
|--------------------------------------------
713-
|""".stripMargin
714-
715-
val helpMessage =
716-
s"""|
717-
|--------------------------------------------
718-
|
719-
|For additional information on library dependencies, see the docs at
720-
|${mill.api.BuildInfo.millDocUrl}/mill/Library_Dependencies.html""".stripMargin
721-
722-
val errLines = cantDownloadErrors
723-
.map { err =>
724-
s" ${err.module.trim}:${err.versionConstraint.asString} \n\t" +
725-
err.perRepositoryErrors.mkString("\n\t")
726-
}
727-
.mkString("\n")
728-
val msg = header + errLines + "\n" + helpMessage + "\n"
729-
Result.Failure(msg)
730-
} else {
731-
throw error
732-
}
733-
case Right(resolution0) =>
734-
val resolution = customizer.fold(resolution0)(_.apply(resolution0))
735-
Result.Success(resolution)
680+
val testOverridesClassloaders = System.getenv("MILL_LOCAL_TEST_OVERRIDE_CLASSPATH") match {
681+
case null => Nil
682+
case cp => Seq(new URLClassLoader(Array(os.Path(cp).toNIO.toUri.toURL)))
683+
}
684+
685+
try {
686+
val envTestOverridesRepo = testOverridesClassloaders.map(cl =>
687+
new TestOverridesRepo(os.resource(cl) / "mill/local-test-overrides")
688+
)
689+
690+
val resourceTestOverridesRepo =
691+
new TestOverridesRepo(os.resource(getClass.getClassLoader) / "mill/local-test-overrides")
692+
693+
val resolve = Resolve()
694+
.withCache(coursierCache0)
695+
.withDependencies(rootDeps)
696+
.withRepositories(Seq(resourceTestOverridesRepo) ++ envTestOverridesRepo ++ repositories)
697+
.withResolutionParams(resolutionParams0)
698+
.withMapDependenciesOpt(mapDependencies)
699+
.withBoms(boms.iterator.toSeq)
700+
701+
resolve.either() match {
702+
case Left(error) =>
703+
val cantDownloadErrors = error.errors.collect {
704+
case cantDownload: CantDownloadModule => cantDownload
705+
}
706+
if (error.errors.length == cantDownloadErrors.length) {
707+
val extraHeader =
708+
if (offlineMode)
709+
"""
710+
|*** Mill is in offline mode (--offline) ***
711+
|It can not download new dependencies from remote repositories.
712+
|You may need to run Mill without the `--offline` option at least once
713+
|to download required remote dependencies.
714+
|Run `mill __.prepareOffline` to fetch most remote resources at once.
715+
|
716+
|""".stripMargin
717+
else ""
718+
719+
val header =
720+
s"""|
721+
|${extraHeader}Resolution failed for ${cantDownloadErrors.length} modules:
722+
|--------------------------------------------
723+
|""".stripMargin
724+
725+
val helpMessage =
726+
s"""|
727+
|--------------------------------------------
728+
|
729+
|For additional information on library dependencies, see the docs at
730+
|${mill.api.BuildInfo.millDocUrl}/mill/Library_Dependencies.html""".stripMargin
731+
732+
val errLines = cantDownloadErrors
733+
.map { err =>
734+
s" ${err.module.trim}:${err.versionConstraint.asString} \n\t" +
735+
err.perRepositoryErrors.mkString("\n\t")
736+
}
737+
.mkString("\n")
738+
val msg = header + errLines + "\n" + helpMessage + "\n"
739+
Result.Failure(msg)
740+
} else {
741+
throw error
742+
}
743+
case Right(resolution0) =>
744+
val resolution = customizer.fold(resolution0)(_.apply(resolution0))
745+
Result.Success(resolution)
746+
}
747+
} finally {
748+
testOverridesClassloaders.foreach(_.close())
736749
}
737750
}
738751

0 commit comments

Comments
 (0)