Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 5 additions & 1 deletion build.mill
Original file line number Diff line number Diff line change
Expand Up @@ -1031,7 +1031,11 @@ trait CliIntegration extends SbtModule
Deps.bsp4j,
Deps.coursier
.exclude(("com.github.plokhotnyuk.jsoniter-scala", "jsoniter-scala-macros")),
Deps.dockerClient,
Deps.dockerJavaCore,
Deps.dockerJavaTransport,
Deps.bcpkixJdk18on,
Deps.bcutilJdk18on,
Deps.bcprovJdk18on,
Deps.jsoniterCore,
Deps.libsodiumjni,
Deps.pprint,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -235,8 +235,12 @@ trait CompileScalacCompatTestDefinitions { this: CompileTestDefinitions =>
withBloopString = if (withBloop) "with Bloop" else "scalac"
buildServerOpts = if (withBloop) Nil else Seq("--server=false")
if (!Properties.isWin || withBloop) && actualScalaVersion == Constants.scala3Next
}
test(s"sanity check for Scala $scalaVersion standard library with cc ($withBloopString)") {
} {
val testName =
s"sanity check for Scala $scalaVersion standard library with cc ($withBloopString)"
val testOpts =
if scalaVersion == "3.nightly" then testName.flaky else munit.TestOptions(testName)
test(testOpts) {
TestUtil.retryOnCi() {
val input = "example.scala"
TestInputs(os.rel / input ->
Expand All @@ -254,4 +258,5 @@ trait CompileScalacCompatTestDefinitions { this: CompileTestDefinitions =>
}
}
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ class ReplTests3Lts extends ReplTestDefinitions with Test3Lts
if canRunInRepl then
for { ltsNightlyTag <- List("3.lts.nightly", "lts.nightly") }
test(
s"$runInReplPrefix $ltsNightlyTag returns the same Scala version as $scala3LtsPrefix.nightly"
s"$runInReplPrefix $ltsNightlyTag returns the same Scala version as $scala3LtsPrefix.nightly".flaky
) {
val code = s"""println($retrieveScalaVersionCode)"""
runInRepl(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ class ReplTestsDefault extends ReplTestDefinitions
if canRunInRepl then
for { nightlyTag <- List("3.nightly", "nightly") }
test(
s"$runInReplPrefix $nightlyTag returns the same Scala version as <latest-minor>.nightly"
s"$runInReplPrefix $nightlyTag returns the same Scala version as <latest-minor>.nightly".flaky
) {
val code = """println(scala.util.Properties.versionNumberString)"""
runInRepl(code, cliOptions = Seq("-S", nightlyTag)) { r1 =>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ import com.eed3si9n.expecty.Expecty.expect
class RunTests3Lts extends RunTestDefinitions with Test3Lts {
import Constants.scala3LtsPrefix
for (ltsNightlyAlias <- List("lts.nightly", "3.lts.nightly"))
test(s"Scala $ltsNightlyAlias & $scala3LtsPrefix.nightly point to the same version") {
test(s"Scala $ltsNightlyAlias & $scala3LtsPrefix.nightly point to the same version".flaky) {
TestInputs.empty.fromRoot { root =>
val version1 = getScalaVersion(ltsNightlyAlias, root)
val nightlyPrefix = version1.split('.').take(2).mkString(".")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ import com.eed3si9n.expecty.Expecty.expect

class RunTests3NextRc extends RunTestDefinitions with Test3NextRc {
for { nightlyTag <- List("3.nightly", "nightly") }
test(s"Scala $nightlyTag & 3.<latest-minor>.nightly point to the same version") {
test(s"Scala $nightlyTag & 3.<latest-minor>.nightly point to the same version".flaky) {
TestInputs.empty.fromRoot { root =>
val version1 = getScalaVersion(nightlyTag, root)
val nightlyMinor = version1.split('.').take(2).last
Expand All @@ -14,7 +14,8 @@ class RunTests3NextRc extends RunTestDefinitions with Test3NextRc {
}

for {
label <- List("rc", "3.rc", "3.lts.rc", "lts.rc", s"${Constants.scala3LtsPrefix}.rc", "3.7.rc")
label <-
List("rc", "3.lts.rc", "lts.rc", s"${Constants.scala3LtsPrefix}.rc", "3.7.rc") // TODO "3.rc"
}
test(s"$label is valid and works as expected") {
TestInputs.empty.fromRoot { root =>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@ class RunTestsDefault extends RunTestDefinitions
archLinuxTest()
}

test("3.nightly") { // should run code using scala 3 nightly version
test("3.nightly".flaky) { // should run code using scala 3 nightly version
TestInputs(os.rel / "sample.sc" -> """println("Hello World")""").fromRoot {
root =>
val res =
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -798,7 +798,7 @@ class SipScalaTests extends ScalaCliSuite
}
}

test("no warnings about TASTY when using the latest nightly with scripts") {
test("no warnings about TASTY when using the latest nightly with scripts".flaky) {
val scriptName = "script.sc"
TestInputs(os.rel / "script.sc" -> "println(1)").fromRoot { root =>
val scala3Nightly =
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,11 @@ package scala.cli.integration.util

// adapted from https://github.com/coursier/coursier/blob/2cb552ea934a100f52ce79f94278304c90d808a4/modules/proxy-tests/src/it/scala/coursier/test/DockerServer.scala

import com.spotify.docker.client.DefaultDockerClient
import com.spotify.docker.client.messages.{ContainerConfig, HostConfig, PortBinding}
import com.github.dockerjava.api.command.PullImageResultCallback
import com.github.dockerjava.api.model.{ExposedPort, HostConfig, Ports}
import com.github.dockerjava.core.{DefaultDockerClientConfig, DockerClientImpl}
import com.github.dockerjava.zerodep.ZerodepDockerHttpClient

import scala.jdk.CollectionConverters.*
import scala.util.Try

final case class DockerServer(
Expand All @@ -29,36 +30,40 @@ object DockerServer {
def log(s: String): Unit =
Console.err.println(s"[$image @ $addr] $s")

val docker = DefaultDockerClient.fromEnv().build()
docker.pull(image)
val config = DefaultDockerClientConfig.createDefaultConfigBuilder().build()
val httpClient = new ZerodepDockerHttpClient.Builder()
.dockerHost(config.getDockerHost)
.sslConfig(config.getSSLConfig)
.build()
val docker = DockerClientImpl.getInstance(config, httpClient)

val portBindings = Map(imagePort.toString -> Seq(PortBinding.of("0.0.0.0", hostPort)).asJava)
docker.pullImageCmd(image).exec(new PullImageResultCallback()).awaitCompletion()

val hostConfig = HostConfig.builder().portBindings(portBindings.asJava).build()
val exposedPort = ExposedPort.tcp(imagePort)
val ports = new Ports()
ports.bind(exposedPort, Ports.Binding.bindPort(hostPort))

val containerConfig = ContainerConfig.builder()
.hostConfig(hostConfig)
.image(image)
.exposedPorts(portBindings.keys.toSeq*)
.build()
val hostConfig = HostConfig.newHostConfig().withPortBindings(ports)

var idOpt = Option.empty[String]

def shutdown(): Unit =
for (id <- idOpt) {
Try(docker.killContainer(id))
docker.removeContainer(id)
Try(docker.killContainerCmd(id).exec())
docker.removeContainerCmd(id).exec()
docker.close()
}

try {
val creation = docker.createContainer(containerConfig)

val id = creation.id()
val id = docker.createContainerCmd(image)
.withExposedPorts(exposedPort)
.withHostConfig(hostConfig)
.exec()
.getId
idOpt = Some(id)

log(s"starting container $id")
docker.startContainer(id)
docker.startContainerCmd(id).exec()

val base = s"http://localhost:$hostPort/$basePath"

Expand Down
11 changes: 10 additions & 1 deletion project/deps/package.mill
Original file line number Diff line number Diff line change
Expand Up @@ -121,6 +121,7 @@ object Deps {
def coursier = coursierDefault
def coursierCli = coursierDefault
def coursierPublish = "0.4.4"
def dockerJava = "3.7.1"
def jmh = "1.37"
def jsoniterScala = "2.38.17"
def jsoup = "1.22.2"
Expand All @@ -139,6 +140,7 @@ object Deps {
def javaSemanticdb = "0.12.3"
def javaClassName = "0.1.9"
def bloop = "2.1.0"
def bouncycastle = "1.84"
def sbt1Version = "1.12.5"
def sbt2Version = "2.0.1"
def sbtVersion = sbt2Version
Expand Down Expand Up @@ -179,7 +181,14 @@ object Deps {
.exclude(("org.scala-lang.modules", "scala-collection-compat_2.13"))
.exclude(("com.github.plokhotnyuk.jsoniter-scala", "jsoniter-scala-core_2.13"))
def dependency = mvn"io.get-coursier::dependency:0.3.2"
def dockerClient = mvn"com.spotify:docker-client:8.16.0"
def bcpkixJdk18on = mvn"org.bouncycastle:bcpkix-jdk18on:${Versions.bouncycastle}"
def bcprovJdk18on = mvn"org.bouncycastle:bcprov-jdk18on:${Versions.bouncycastle}"
def bcutilJdk18on = mvn"org.bouncycastle:bcutil-jdk18on:${Versions.bouncycastle}"
def dockerJavaCore =
mvn"com.github.docker-java:docker-java-core:${Versions.dockerJava}"
.exclude("org.bouncycastle" -> "bcpkix-jdk18on")
def dockerJavaTransport =
mvn"com.github.docker-java:docker-java-transport-zerodep:${Versions.dockerJava}"
def expecty = mvn"com.eed3si9n.expecty::expecty:0.17.1"
def fansi = mvn"com.lihaoyi::fansi:0.5.1"
def giter8 = mvn"org.foundweekends.giter8:giter8:0.18.0"
Expand Down
4 changes: 2 additions & 2 deletions website/docs/commands/compile.md
Original file line number Diff line number Diff line change
Expand Up @@ -121,7 +121,7 @@ scala-cli Hello.scala -S 2.nightly

For compiling with the latest Scala 3 nightly build:

```bash
```bash ignore
scala-cli Hello.scala -S 3.nightly
```

Expand All @@ -137,7 +137,7 @@ For setting this inside scala files, use [`using` directives](../guides/introduc
//> using scala 2.nightly
```

```scala compile
```scala
//> using scala 3.nightly
```

Expand Down
2 changes: 1 addition & 1 deletion website/docs/release_notes.md
Original file line number Diff line number Diff line change
Expand Up @@ -808,7 +808,7 @@ scala-cli -e 'println(dotty.tools.dotc.config.Properties.simpleVersionString)' -

Dedicated default and LTS nightly aliases are also provided.

```bash
```bash ignore
scala-cli -e 'println(scala.util.Properties.versionNumberString)' -S nightly
# 3.8.2-RC1-bin-20260115-6151803-NIGHTLY
scala-cli -e 'println(dotty.tools.dotc.config.Properties.simpleVersionString)' -S lts.nightly --with-compiler
Expand Down
Loading