Skip to content

Commit 004099f

Browse files
authored
Mill 1 Support (#191)
Pull request: #191
1 parent 7278ef4 commit 004099f

File tree

8 files changed

+539
-103
lines changed

8 files changed

+539
-103
lines changed

build.sc

Lines changed: 68 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -12,17 +12,15 @@ import java.nio.file.attribute.PosixFilePermission
1212
import de.tobiasroeser.mill.integrationtest._
1313
import de.tobiasroeser.mill.vcs.version._
1414

15-
import mill.{Agg, PathRef, T}
15+
import mill._
1616
import mill.contrib.scoverage.ScoverageModule
17-
import mill.define.{Cross, Module, Sources, Target}
18-
import mill.util.Util
1917
import mill.scalalib._
20-
import mill.scalalib.api.ZincWorkerUtil
18+
import mill.scalalib.api.JvmWorkerUtil
2119
import mill.scalalib.publish._
2220

2321
import os.Path
2422

25-
private def baseDir = build.millSourcePath
23+
private def baseDir = build.moduleDir
2624

2725
trait Deps {
2826
// The mill API version used in the project/sources/dependencies, also default for integration tests
@@ -32,17 +30,25 @@ trait Deps {
3230
def millTestVersions: Seq[String]
3331
val scoverageVersion = "2.4.1"
3432

35-
val bndlib = ivy"biz.aQute.bnd:biz.aQute.bndlib:6.4.1"
36-
val logbackClassic = ivy"ch.qos.logback:logback-classic:1.1.3"
37-
def millMain = ivy"com.lihaoyi::mill-main:${millVersion}"
38-
def millScalalib = ivy"com.lihaoyi::mill-scalalib:${millVersion}"
39-
val scalaTest = ivy"org.scalatest::scalatest:3.2.19"
40-
def scalaLibrary = ivy"org.scala-lang:scala-library:${scalaVersion}"
41-
val scoveragePlugin = ivy"org.scoverage:::scalac-scoverage-plugin:${scoverageVersion}"
42-
val scoverageRuntime = ivy"org.scoverage::scalac-scoverage-runtime:${scoverageVersion}"
43-
val slf4j = ivy"org.slf4j:slf4j-api:1.7.36"
33+
val bndlib = mvn"biz.aQute.bnd:biz.aQute.bndlib:6.4.1"
34+
val logbackClassic = mvn"ch.qos.logback:logback-classic:1.1.3"
35+
def millMain = mvn"com.lihaoyi::mill-main:${millVersion}"
36+
def millScalalib = mvn"com.lihaoyi::mill-scalalib:${millVersion}"
37+
val scalaTest = mvn"org.scalatest::scalatest:3.2.19"
38+
def scalaLibrary = mvn"org.scala-lang:scala-library:${scalaVersion}"
39+
val scoveragePlugin = mvn"org.scoverage:::scalac-scoverage-plugin:${scoverageVersion}"
40+
val scoverageRuntime = mvn"org.scoverage::scalac-scoverage-runtime:${scoverageVersion}"
41+
val slf4j = mvn"org.slf4j:slf4j-api:1.7.36"
4442
}
4543

44+
object Deps_1 extends Deps {
45+
override val millVersion = "1.0.0" // scala-steward:off
46+
override def millPlatform = "1"
47+
// keep in sync with .github/workflows/build.yml
48+
override val millTestVersions = Seq("1.1.0-RC1", millVersion)
49+
override def millScalalib: Dep = mvn"com.lihaoyi::mill-libs:${millVersion}"
50+
override def scalaVersion = "3.7.4"
51+
}
4652
object Deps_0_11 extends Deps {
4753
override val millVersion = "0.11.0" // scala-steward:off
4854
override def millPlatform = "0.11"
@@ -57,7 +63,7 @@ object Deps_0_10 extends Deps {
5763
}
5864

5965
/** Cross build versions */
60-
val millPlatforms = Seq(Deps_0_11, Deps_0_10).map(x => x.millPlatform -> x)
66+
val millPlatforms = Seq(Deps_1, Deps_0_11, Deps_0_10).map(x => x.millPlatform -> x)
6167

6268
trait MyScoverageModule extends ScoverageModule {
6369
override lazy val scoverage: ScoverageData = new MyScoverageData {}
@@ -69,21 +75,26 @@ trait MyScoverageModule extends ScoverageModule {
6975
trait MillOsgiModule extends ScalaModule with PublishModule with Cross.Module[String] {
7076
def millPlatform: String = crossValue
7177
def deps: Deps = millPlatforms.toMap.apply(millPlatform)
72-
override def scalaVersion = T { deps.scalaVersion }
73-
override def ivyDeps = Agg(deps.scalaLibrary)
74-
override def artifactSuffix = s"_mill${deps.millPlatform}_${artifactScalaVersion()}"
78+
override def scalaVersion = Task { deps.scalaVersion }
79+
// override def ivyDeps = Agg(deps.scalaLibrary)
80+
// override def artifactSuffix = s"_mill${deps.millPlatform}_${artifactScalaVersion()}"
81+
override def platformSuffix = s"_mill${millPlatform}"
7582
def publishVersion = VcsVersion.vcsState().format()
7683
override def javacOptions = Seq("-source", "1.8", "-target", "1.8", "-encoding", "UTF-8")
77-
override def scalacOptions = T {
84+
override def scalacOptions = Task {
7885
val jvmSpecific =
7986
if (scala.util.Properties.isJavaAtLeast(11))
8087
Seq("-release", "8")
8188
else
8289
Seq("-target:jvm-1.8")
8390

84-
jvmSpecific ++ Seq("-encoding", "UTF-8", "-deprecation", "-Xsource:3")
91+
val svSpecific =
92+
if (scalaVersion().startsWith("3")) Seq("-Ydebug-unpickling")
93+
else Seq("-Xsource:3")
94+
95+
jvmSpecific ++ svSpecific ++ Seq("-encoding", "UTF-8", "-deprecation")
8596
}
86-
override def pomSettings = T {
97+
override def pomSettings = Task {
8798
PomSettings(
8899
description = "Mill module adding OSGi bundle support",
89100
organization = "de.tototec",
@@ -93,13 +104,16 @@ trait MillOsgiModule extends ScalaModule with PublishModule with Cross.Module[St
93104
developers = Seq(Developer("lefou", "Tobias Roeser", "https.//github.com/lefou"))
94105
)
95106
}
96-
override def sources = T.sources {
97-
super.sources() ++
98-
(
99-
ZincWorkerUtil.matchingVersions(deps.millPlatform) ++
100-
ZincWorkerUtil.versionRanges(deps.millPlatform, millPlatforms.map(_._1))
101-
)
102-
.map(p => PathRef(millSourcePath / s"src-${p}"))
107+
def sources0 = Task.Sources {
108+
(
109+
JvmWorkerUtil.matchingVersions(deps.millPlatform) ++
110+
JvmWorkerUtil.versionRanges(deps.millPlatform, millPlatforms.map(_._1))
111+
)
112+
.map(p => PathRef(moduleDir / s"src-${p}"))
113+
}
114+
override def sources = Task {
115+
super.sources() ++ sources0()
116+
103117
}
104118
}
105119

@@ -110,13 +124,17 @@ trait Core extends MillOsgiModule with MyScoverageModule {
110124
deps.bndlib,
111125
deps.slf4j
112126
)
113-
override def compileIvyDeps = Agg(
114-
deps.millMain,
115-
deps.millScalalib
116-
)
127+
override def compileIvyDeps =
128+
if (deps.millPlatform == "1") Agg(
129+
deps.millScalalib
130+
)
131+
else Agg(
132+
deps.millMain,
133+
deps.millScalalib
134+
)
117135

118-
override def generatedSources: Target[Seq[PathRef]] = T {
119-
val dest = T.dest
136+
override def generatedSources: T[Seq[PathRef]] = T {
137+
val dest = Task.dest
120138
val infoClass =
121139
s"""// Generated with mill from build.sc
122140
|package de.tobiasroeser.mill.osgi.internal
@@ -132,7 +150,7 @@ trait Core extends MillOsgiModule with MyScoverageModule {
132150

133151
override def scoverageVersion = deps.scoverageVersion
134152

135-
// override def skipIdea: Boolean = millPlatforms.head._1 != millPlatform
153+
override def skipIdea: Boolean = millPlatforms.head._1 != millPlatform
136154

137155
object test extends ScoverageTests with TestModule.ScalaTest {
138156
override def ivyDeps = Agg(
@@ -144,7 +162,10 @@ trait Core extends MillOsgiModule with MyScoverageModule {
144162

145163
object testsupport extends Cross[TestSupport](millPlatforms.map(_._1))
146164
trait TestSupport extends MillOsgiModule {
147-
override def compileIvyDeps = Agg(
165+
override def compileIvyDeps = if (deps.millPlatform == "1") Agg(
166+
deps.millScalalib
167+
)
168+
else Agg(
148169
deps.millMain,
149170
deps.millScalalib
150171
)
@@ -161,33 +182,33 @@ trait ItestCross extends MillIntegrationTestModule with Cross.Module[String] {
161182
override def millTestVersion = T { millVersion }
162183
override def pluginsUnderTest = Seq(core(deps.millPlatform), testsupport(deps.millPlatform))
163184
override def prefetchIvyDeps = Agg(
164-
ivy"com.typesafe.akka:akka-http-core_2.12:10.1.11"
185+
mvn"com.typesafe.akka:akka-http-core_2.12:10.1.11"
165186
)
166-
override def sources = T.sources {
187+
override def sources = Task.Sources {
167188
super.sources() ++
168-
ZincWorkerUtil.versionRanges(deps.millPlatform, millPlatforms.map(_._1))
169-
.map(p => PathRef(millSourcePath / s"src-${p}"))
189+
JvmWorkerUtil.versionRanges(deps.millPlatform, millPlatforms.map(_._1))
190+
.map(p => PathRef(moduleDir / s"src-${p}"))
170191
}
171192

172193
override def pluginUnderTestDetails: Task[Seq[(PathRef, (PathRef, (PathRef, (PathRef, (PathRef, Artifact)))))]] =
173-
T.traverse(pluginsUnderTest) { p =>
194+
Task.traverse(pluginsUnderTest) { p =>
174195
val jar = p match {
175196
case p: ScoverageModule => p.scoverage.jar
176197
case p => p.jar
177198
}
178199
jar zip (p.sourceJar zip (p.docJar zip (p.pom zip (p.ivy zip p.artifactMetadata))))
179200
}
180-
override def perTestResources = T.sources { Seq(generatedSharedSrc()) }
181-
def generatedSharedSrc = T {
182-
val scov = deps.scoverageRuntime.dep
201+
override def perTestResources = Task { Seq(generatedSharedSrc()) }
202+
def generatedSharedSrc = Task {
203+
val scov = deps.scoverageRuntime
183204
os.write(
184-
T.dest / "shared.sc",
205+
Task.dest / "shared.sc",
185206
s"""// Load the plugin under test
186207
|import $$file.plugins
187208
|// Load scoverage runtime to get coverage results
188-
|import $$ivy.`${scov.module.organization.value}::${scov.module.name.value}:${scov.version}`
209+
|import $$ivy.`${scov.organization}::${scov.name}:${scov.version}`
189210
|""".stripMargin
190211
)
191-
PathRef(T.dest)
212+
PathRef(Task.dest)
192213
}
193214
}

core/src/de/tobiasroeser/mill/osgi/OsgiBundleModule.scala renamed to core/src-0.11-/de/tobiasroeser/mill/osgi/OsgiBundleModule.scala

Lines changed: 3 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,10 @@ import scala.util.Try
77

88
import aQute.bnd.osgi.{Builder, Constants, Jar}
99
import de.tobiasroeser.mill.osgi.internal.{BuildInfo, copy => icopy, unpack => iunpack}
10+
import de.tobiasroeser.mill.osgi.{OsgiBundleModulePlatform, OsgiHeaders}
1011
import mill._
11-
import mill.define.{Sources, Task}
1212
import mill.api.PathRef
13+
import mill.define.{Sources, Task}
1314
import mill.modules.Jvm
1415
import mill.scalalib.{JavaModule, PublishModule}
1516
import os.Path
@@ -363,57 +364,7 @@ trait OsgiBundleModule extends OsgiBundleModulePlatform {
363364

364365
}
365366

366-
object OsgiBundleModule {
367-
368-
def calcBundleSymbolicName(group: String, artifact: String): String = {
369-
val groupParts = group.split("[.]")
370-
val nameParts = artifact.split("[.]").flatMap(_.split("[-]"))
371-
372-
val parts =
373-
if (nameParts.startsWith(groupParts)) nameParts
374-
else (groupParts.lastOption, nameParts.headOption) match {
375-
case (Some(last), Some(head)) if last == head => groupParts ++ nameParts.tail
376-
case (Some(last), Some(head)) if head.startsWith(last) => groupParts.take(groupParts.size - 1) ++ nameParts
377-
case _ => groupParts ++ nameParts
378-
}
379-
380-
parts.mkString(".")
381-
}
382-
383-
def mergeSeqProps(builder: Builder, key: String, value: Seq[String]): Unit = {
384-
val existing = builder.getProperty(key) match {
385-
case null => Seq()
386-
case p => Seq(p)
387-
}
388-
builder.setProperty(key, (existing ++ value).mkString(","))
389-
}
390-
391-
protected[osgi] def checkMillVersion(millVersion: Option[String]): Boolean =
392-
checkMillVersion(BuildInfo.millVersion, millVersion)
393-
394-
protected[osgi] def checkMillVersion(buildVersion: String, millVersion: Option[String]): Boolean = millVersion match {
395-
case Some(v) =>
396-
/** Extract the major, minor and micro version parts of the given version string. */
397-
def parseVersion(version: String): Try[Array[Int]] = Try {
398-
version
399-
.split("[-]", 2)(0)
400-
.split("[.]", 4)
401-
.take(3)
402-
.map(_.toInt)
403-
}
404-
405-
val buildMillVersion = parseVersion(buildVersion).getOrElse(Array(0, 0, 0))
406-
val runMillVersion = parseVersion(v).getOrElse(Array(999, 999, 999))
407-
408-
(runMillVersion(0) > buildMillVersion(0)) ||
409-
(runMillVersion(0) == buildMillVersion(0) && runMillVersion(1) > buildMillVersion(1)) ||
410-
(runMillVersion(0) == buildMillVersion(0) && runMillVersion(1) == buildMillVersion(1) &&
411-
runMillVersion(2) >= buildMillVersion(2))
412-
413-
case _ =>
414-
// ignore
415-
true
416-
}
367+
object OsgiBundleModule extends OsgiBundleModuleSupport {
417368

418369
sealed trait BuildMode
419370
object BuildMode {

core/src/de/tobiasroeser/mill/osgi/internal/copy.scala renamed to core/src-0.11-/de/tobiasroeser/mill/osgi/internal/copy.scala

File renamed without changes.

core/src-0.11+/de/tobiasroeser/mill/osgi/OsgiBundleModulePlatform.scala renamed to core/src-0.11/de/tobiasroeser/mill/osgi/OsgiBundleModulePlatform.scala

File renamed without changes.

0 commit comments

Comments
 (0)