如何使用Scala的夜间构建?

dfddblmv  于 2023-05-17  发布在  Scala
关注(0)|答案(1)|浏览(243)

我想每晚测试一下我的代码是否与最新的Scala 2或Scala 3兼容。
(Or,我想使用一个实验性的Scala 3特性,该特性仅在夜间构建中可用。)
我该怎么办?

xiozqbni

xiozqbni1#

Scala 3

Scala 3夜间构建发布到Maven Central。您不需要添加特殊的冲突解决程序。
如果你知道你想使用的nightly的完整版本号,你可以像使用其他Scala 3版本一样使用它。
获取该版本号的一个快速方法是访问https://dotty.epfl.ch并查看左上角。
另一种查找当前nightly的完整版本号的方法是使用scala-cli,如下所示。

scala脚本

在scala-cli 0.1.3或更高版本上,您可以使用以下命令运行nightlies:

scala-cli repl -S 3.3.nightly
scala-cli repl -S 3.nightly     # same as 3.3.nightly at present

当然,不仅repl可以工作,所有其他scala-cli子命令,如compilerun也可以工作。它还可以在脚本本身中使用//>指令,例如:

//> using scala 3.nightly

Scala 2.12或2.13

快速版本(sbt)

Global / resolvers += "scala-integration" at
  "https://scala-ci.typesafe.com/artifactory/scala-integration/"
scalaVersion := "2.13.10-bin-abcd123"

对于每晚2.12,用例如2.12.18用于2.13.10;在任何一种情况下,它都是该分支上 * 下一个 * 发行版的版本号
对于abcd123,手动替换最新绿色版本on the 2.13.x or 2.12.x branch on Travis-CI的SHA的前7个字符。
找到当前nightly的完整版本号的一种快速方法是使用scala-cli,如下所示。

快速版(scala-cli)

在scala-cli 0.1.3或更高版本上,您可以使用以下命令运行nightlies:

scala-cli repl -S 2.12.nightly
scala-cli repl -S 2.13.nightly
scala-cli repl -S 2.nightly     # same as 2.13.nightly

当然,不仅repl可以工作,所有其他scala-cli子命令(如compilerun)也可以工作。它还可以在脚本本身中使用//>指令,例如:

//> using scala 2.nightly

更详细的说明

Scala团队不再发布-SNAPSHOT版本的Scala。(重新开始可能是社区的贡献;参见this ticket。)
但是团队确实会在夜间发布构建版本,每个版本都有自己的固定版本号。每晚的版本号看起来像这样。2.13.1-bin-abcd123。(-bin-向sbt发出二进制兼容性信号;自2.13.0以来的所有2.13.x版本都是二进制相互兼容的。)
要告诉sbt使用其中的一个nightlies,你需要做三件事。
首先,添加保存Nightlies的解析器:

Global / resolvers += "scala-integration" at
  "https://scala-ci.typesafe.com/artifactory/scala-integration/"

其次,指定Scala版本:

scalaVersion := "2.13.1-bin-abcd123"

但那不是真实的的版本号。在scala/scala repository中手动替换一个版本号,该版本号包含发布了每晚构建的最后一次提交的7个字符的SHA。查看https://travis-ci.org/scala/scala/branches,您将在2.13.x(或2.12.x)部分的右上角看到SHA。例如:

一旦2.13.1发布,每晚的版本号将跳到2.13.2,依此类推。
如果有多项目生成,请确保在修改生成定义时跨所有项目设置这些设置。或者,您可以在sbt shell中使用++2.13.1-bin-abcd123(sbt 0.13.x)或++2.13.1-bin-abcd123!(sbt 1.x;添加的感叹号是强制使用不包含在crossScalaVersions中的版本所必需的)。
理想情况下,我们会建议一种自动化的方式来向Travis-CI请求正确的SHA。这可能是通过Travis-CI的API实现的,但(据我所知)还没有人研究过它。有志愿者吗?)
请注意,我们非正式地称这些为“夜间”构建,但从技术上讲,这是一个用词不当。为每个合并的PR构建所谓的“夜间”。

相关问题