1
1
import $ivy .`de.tototec::de.tobiasroeser.mill.vcs.version::0.4.1`
2
2
import $ivy .`io.github.alexarchambault.mill::mill-native-image::0.1.31-1`
3
3
import $ivy .`io.github.alexarchambault.mill::mill-native-image-upload:0.1.31-1`
4
+ import $ivy .`com.goyeau::mill-scalafix::0.5.1`
4
5
import de .tobiasroeser .mill .vcs .version ._
5
6
import io .github .alexarchambault .millnativeimage .NativeImage
6
7
import io .github .alexarchambault .millnativeimage .upload .Upload
@@ -13,15 +14,23 @@ import mill.api.Loose
13
14
import scala .annotation .unused
14
15
import scala .concurrent .duration .DurationInt
15
16
import java .io .File
17
+ import com .goyeau .mill .scalafix .ScalafixModule
16
18
17
19
object Versions {
18
20
def scala = " 3.3.6"
21
+
19
22
def scalaCli = " 1.7.1"
23
+
20
24
def graalVmVersion = " 22.1.0"
25
+
21
26
def coursier = " 2.1.24"
27
+
22
28
def osLib = " 0.11.4"
29
+
23
30
def uTest = " 0.8.5"
31
+
24
32
def jline = " 3.25.0"
33
+
25
34
def ubuntu = " 24.04"
26
35
}
27
36
@@ -31,10 +40,15 @@ trait JavaMainClassNativeImage extends NativeImage {
31
40
" --no-fallback"
32
41
)
33
42
}
43
+
34
44
def nativeImagePersist : Boolean = System .getenv(" CI" ) != null
45
+
35
46
def nativeImageGraalVmJvmId = s " graalvm-java17: ${Versions .graalVmVersion}"
47
+
36
48
def nativeImageName = " java-class-name"
49
+
37
50
def nativeImageMainClass = " scala.cli.javaclassname.JavaClassName"
51
+
38
52
def nameSuffix = " "
39
53
40
54
@ unused
@@ -50,10 +64,14 @@ trait JavaMainClassNativeImage extends NativeImage {
50
64
}
51
65
}
52
66
53
- trait JavaClassNameModule extends ScalaModule {
67
+ trait JavaClassNameModule extends ScalaModule with ScalafixModule {
68
+ override def scalacOptions : Target [Seq [String ]] =
69
+ super .scalacOptions.map(_ ++ Seq (" -Wunused:all" ))
70
+
54
71
override def scalaVersion : Target [String ] = Versions .scala
55
72
56
73
private def jlineOrg = " org.jline"
74
+
57
75
def jlineDeps : Loose .Agg [Dep ] = Agg (
58
76
ivy " $jlineOrg:jline-reader: ${Versions .jline}" ,
59
77
ivy " $jlineOrg:jline-terminal: ${Versions .jline}" ,
@@ -65,31 +83,38 @@ trait JavaClassNameModule extends ScalaModule {
65
83
override def coursierDependency : Dependency =
66
84
super .coursierDependency
67
85
.addOverrides(
68
- jlineDeps.toSeq.map(jd => DependencyManagement .Key .from(jd.toDependency(jd.version, jd.version, " " )) ->
69
- DependencyManagement .Values .empty.withVersionConstraint(VersionConstraint .Lazy (Versions .jline)))
86
+ jlineDeps.toSeq.map(jd =>
87
+ DependencyManagement .Key .from(jd.toDependency(jd.version, jd.version, " " )) ->
88
+ DependencyManagement .Values .empty.withVersionConstraint(
89
+ VersionConstraint .Lazy (Versions .jline)
90
+ )
91
+ )
70
92
)
71
93
72
94
override def allIvyDeps : Target [Agg [Dep ]] = Task {
73
95
super .allIvyDeps()
74
96
.map(_.exclude(jlineOrg -> " jline-*" )) ++ jlineDeps
75
97
}
76
98
77
- override def ivyDeps : Target [Agg [Dep ]] = super .ivyDeps().map(_.exclude(" org.jline" -> " jline-*" )) ++ jlineDeps
99
+ override def ivyDeps : Target [Agg [Dep ]] =
100
+ super .ivyDeps().map(_.exclude(" org.jline" -> " jline-*" )) ++ jlineDeps
78
101
}
79
102
80
103
object `scala3-graal-processor` extends JavaClassNameModule {
81
104
override def mainClass : Target [Option [String ]] = Some (" scala.cli.graal.CoursierCacheProcessor" )
105
+
82
106
override def ivyDeps : Target [Agg [Dep ]] = jlineDeps ++ Agg (
83
107
ivy " org.virtuslab.scala-cli::scala3-graal: ${Versions .scalaCli}"
84
108
)
85
109
}
86
110
87
- object `java-class-name` extends JavaClassNameModule with JavaMainClassNativeImage with JavaClassNamePublishModule {
111
+ object `java-class-name` extends JavaClassNameModule with JavaMainClassNativeImage
112
+ with JavaClassNamePublishModule {
88
113
def nativeImageClassPath : Target [Seq [PathRef ]] = Task {
89
114
// adapted from https://github.com/VirtusLab/scala-cli/blob/b19086697401827a6f8185040ceb248d8865bf21/build.sc#L732-L744
90
115
91
116
val classpath = runClasspath().map(_.path).mkString(File .pathSeparator)
92
- val cache = Task .dest / " native-cp"
117
+ val cache = Task .dest / " native-cp"
93
118
// `scala3-graal-processor`.run() do not give me output and I cannot pass dynamically computed values like classpath
94
119
System .err.println(" Calling scala3 graal processor on" )
95
120
for (f <- classpath.split(File .pathSeparator))
@@ -139,14 +164,16 @@ object `java-class-name` extends JavaClassNameModule with JavaMainClassNativeIma
139
164
)
140
165
}
141
166
142
- def writeNativeImageScript (scriptDest : String , imageDest : String = " " ): Command [Unit ] = Task .Command {
143
- buildHelperImage()
144
- super .writeNativeImageScript(scriptDest, imageDest)()
145
- }
167
+ def writeNativeImageScript (scriptDest : String , imageDest : String = " " ): Command [Unit ] =
168
+ Task .Command {
169
+ buildHelperImage()
170
+ super .writeNativeImageScript(scriptDest, imageDest)()
171
+ }
146
172
}
147
173
148
174
object `mostly-static` extends JavaMainClassNativeImage {
149
175
def nameSuffix = " -mostly-static"
176
+
150
177
def nativeImageClassPath : Target [Seq [PathRef ]] = Task {
151
178
`java-class-name`.nativeImageClassPath()
152
179
}
@@ -163,6 +190,7 @@ object `java-class-name` extends JavaClassNameModule with JavaMainClassNativeIma
163
190
object `java-class-name-tests` extends JavaClassNameModule with SbtModule {
164
191
trait Tests extends ScalaModule with super .SbtTests with TestModule .Utest {
165
192
def launcher : Target [PathRef ]
193
+
166
194
def ivyDeps : Target [Agg [Dep ]] = super .ivyDeps() ++ jlineDeps ++ Seq (
167
195
ivy " com.lihaoyi::os-lib: ${Versions .osLib}" ,
168
196
ivy " com.lihaoyi::utest: ${Versions .uTest}"
@@ -181,11 +209,13 @@ object `java-class-name-tests` extends JavaClassNameModule with SbtModule {
181
209
182
210
object static extends Tests {
183
211
def sources : Target [Seq [PathRef ]] = Task .Sources (`java-class-name-tests`.test.sources())
212
+
184
213
def launcher : Target [PathRef ] = `java-class-name`.static.nativeImage()
185
214
}
186
215
187
216
object `mostly-static` extends Tests {
188
217
def sources : Target [Seq [PathRef ]] = Task .Sources (`java-class-name-tests`.test.sources())
218
+
189
219
def launcher : Target [PathRef ] = `java-class-name`.`mostly-static`.nativeImage()
190
220
}
191
221
}
@@ -205,14 +235,15 @@ def publishVersion0: Target[String] = Task {
205
235
Some (versionOrEmpty)
206
236
.filter(_.nonEmpty)
207
237
.getOrElse(state.format())
208
- } else
238
+ }
239
+ else
209
240
state
210
241
.lastTag
211
242
.getOrElse(state.format())
212
243
.stripPrefix(" v" )
213
244
}
214
245
215
- def ghOrg = " VirtusLab"
246
+ def ghOrg = " VirtusLab"
216
247
def ghName = " java-class-name"
217
248
218
249
trait JavaClassNamePublishModule extends PublishModule {
@@ -247,29 +278,30 @@ trait JavaClassNamePublishModule extends PublishModule {
247
278
@ unused
248
279
object ci extends Module {
249
280
@ unused
250
- def publishSonatype (tasks : mill.main.Tasks [PublishModule .PublishData ]): Command [Unit ] = Task .Command {
251
- publishSonatype0(
252
- data = define.Target .sequence(tasks.value)(),
253
- log = Task .ctx().log
254
- )
255
- }
281
+ def publishSonatype (tasks : mill.main.Tasks [PublishModule .PublishData ]): Command [Unit ] =
282
+ Task .Command {
283
+ publishSonatype0(
284
+ data = define.Target .sequence(tasks.value)(),
285
+ log = Task .ctx().log
286
+ )
287
+ }
256
288
257
289
private def publishSonatype0 (
258
- data : Seq [PublishModule .PublishData ],
259
- log : mill.api.Logger
260
- ): Unit = {
290
+ data : Seq [PublishModule .PublishData ],
291
+ log : mill.api.Logger
292
+ ): Unit = {
261
293
262
294
val credentials = sys.env(" SONATYPE_USERNAME" ) + " :" + sys.env(" SONATYPE_PASSWORD" )
263
295
val pgpPassword = sys.env(" PGP_PASSWORD" )
264
- val timeout = 10 .minutes
296
+ val timeout = 10 .minutes
265
297
266
298
val artifacts = data.map { case PublishModule .PublishData (a, s) =>
267
299
(s.map { case (p, f) => (p.path, f) }, a)
268
300
}
269
301
270
302
val isRelease = {
271
303
val versions = artifacts.map(_._2.version).toSet
272
- val set = versions.map(! _.endsWith(" -SNAPSHOT" ))
304
+ val set = versions.map(! _.endsWith(" -SNAPSHOT" ))
273
305
assert(
274
306
set.size == 1 ,
275
307
s " Found both snapshot and non-snapshot versions: ${versions.toVector.sorted.mkString(" , " )}"
@@ -285,8 +317,10 @@ object ci extends Module {
285
317
" --detach-sign" ,
286
318
" --batch=true" ,
287
319
" --yes" ,
288
- " --pinentry-mode" , " loopback" ,
289
- " --passphrase" , pgpPassword,
320
+ " --pinentry-mode" ,
321
+ " loopback" ,
322
+ " --passphrase" ,
323
+ pgpPassword,
290
324
" --armor" ,
291
325
" --use-agent"
292
326
),
@@ -315,6 +349,13 @@ object ci extends Module {
315
349
if (version.endsWith(" -SNAPSHOT" )) (" nightly" , true )
316
350
else (" v" + version, false )
317
351
318
- Upload .upload(ghOrg, ghName, ghToken, tag, dryRun = false , overwrite = overwriteAssets)(launchers : _* )
352
+ Upload .upload(
353
+ ghOrg,
354
+ ghName,
355
+ ghToken,
356
+ tag,
357
+ dryRun = false ,
358
+ overwrite = overwriteAssets
359
+ )(launchers : _* )
319
360
}
320
361
}
0 commit comments