Skip to content

Commit 0e1bdb2

Browse files
build: update scala3 to 3.7.2 (#1809)
feat(sbt-plugin): publish to sbt 2.0.0-RC2 feat(core): support scala 3.7 dialect BREAKING CHANGE: Minimum sbt version is now 1.11.2
1 parent 9909e12 commit 0e1bdb2

8 files changed

Lines changed: 36 additions & 17 deletions

File tree

.github/workflows/ci.yml

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -33,9 +33,6 @@ jobs:
3333
steps:
3434
- uses: actions/checkout@v4
3535
- uses: ./.github/setup
36-
with:
37-
# Sbt version that is tested (1.7.0) doesn't work on Java 21
38-
java-version: 17
3936
- name: Run tests
4037
run: sbt 'sbtTestRunner2_12/publishLocal; sbtPlugin/scripted'
4138
sbt-scripted-2:

modules/core/src/main/scala/stryker4s/config/codec/CirisConfigDecoders.scala

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -118,6 +118,7 @@ trait CirisConfigDecoders {
118118
List("scala34", "scala3.4", "3.4", "34") -> dialects.Scala34,
119119
List("scala35", "scala3.5", "3.5", "35") -> dialects.Scala35,
120120
List("scala36", "scala3.6", "3.6", "36") -> dialects.Scala36,
121+
List("scala37", "scala3.7", "3.7", "37") -> dialects.Scala37,
121122
List("scala3", "3") -> dialects.Scala3
122123
)
123124

modules/core/src/test/scala/stryker4s/config/codec/CirisConfigDecodersTest.scala

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -109,6 +109,10 @@ class CirisConfigDecodersTest extends Stryker4sSuite with CirisConfigDecoders {
109109
"scala3.6" -> Scala36,
110110
"3.6" -> Scala36,
111111
"36" -> Scala36,
112+
"scala37" -> Scala37,
113+
"scala3.7" -> Scala37,
114+
"3.7" -> Scala37,
115+
"37" -> Scala37,
112116
"scala3" -> Scala3,
113117
"3" -> Scala3
114118
)

modules/sbt/src/main/scala/stryker4s/sbt/Stryker4sPlugin.scala

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,9 @@ import cats.effect.{Deferred, IO}
55
import sbt.Keys.*
66
import sbt.plugins.*
77
import sbt.{given, *}
8+
import sjsonnew.{given, *}
89
import stryker4s.config.DashboardReportType
9-
import stryker4s.config.codec.CirisConfigDecoders
10+
import stryker4s.config.codec.{CirceConfigEncoder, CirisConfigDecoders}
1011
import stryker4s.config.source.CliConfigSource
1112
import stryker4s.log.{Logger, SbtLogger}
1213
import stryker4s.run.threshold.ErrorStatus
@@ -68,12 +69,25 @@ object Stryker4sPlugin extends AutoPlugin {
6869

6970
import autoImport.*
7071

72+
implicit private[stryker4s] object DialectJsonFormat
73+
extends JsonFormat[Dialect]
74+
with CirceConfigEncoder
75+
with CirisConfigDecoders {
76+
77+
def write[J](x: Dialect, builder: Builder[J]): Unit =
78+
builder.writeString(x.toString().toLowerCase())
79+
def read[J](jsOpt: Option[J], unbuilder: Unbuilder[J]): Dialect =
80+
jsOpt.flatMap(js => dialectReader.decode(None, unbuilder.readString(js)).toOption).getOrElse {
81+
throw new sjsonnew.DeserializationException("Expected a string for Dialect")
82+
}
83+
}
84+
7185
// Default settings for the plugin
7286
override lazy val projectSettings: Seq[Def.Setting[?]] = Seq(
7387
stryker := strykerTask.evaluated,
7488
stryker / logLevel := Level.Info,
7589
stryker / onLoadMessage := "", // Prevents "[info] Set current project to ..." in between mutations
76-
strykerMinimumSbtVersion := "1.7.0",
90+
strykerMinimumSbtVersion := "1.11.2",
7791
strykerIsSupported := SemanticSelector(s">=${strykerMinimumSbtVersion.value}")
7892
.matches(VersionNumber(sbtVersion.value)),
7993

modules/sbt/src/main/scala/stryker4s/sbt/Stryker4sSbtRunner.scala

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import fs2.io.file.Path
88
import sbt.Keys.*
99
import sbt.internal.LogManager
1010
import sbt.{given, *}
11+
import sjsonnew.{given, *}
1112
import stryker4s.config.source.ConfigSource
1213
import stryker4s.config.{Config, TestFilter}
1314
import stryker4s.exception.TestSetupException
@@ -72,7 +73,7 @@ class Stryker4sSbtRunner(
7273

7374
val fullSettings = settings ++ Seq(
7475
libraryDependencies += "io.stryker-mutator" %% "stryker4s-sbt-testrunner" % stryker4sVersion,
75-
resolvers ++= (if (stryker4sVersion.endsWith("-SNAPSHOT")) Resolver.sonatypeOssRepos("snapshot")
76+
resolvers ++= (if (stryker4sVersion.endsWith("-SNAPSHOT")) Seq(Resolver.sonatypeCentralSnapshots)
7677
else Seq.empty)
7778
)
7879
val newState = extracted.appendWithSession(fullSettings, state)

modules/sbt/src/main/scala/stryker4s/sbt/runner/LegacySbtTestRunner.scala

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,14 @@ package stryker4s.sbt.runner
22

33
import cats.effect.IO
44
import mutationtesting.{MutantResult, MutantStatus}
5-
import sbt.Keys.*
6-
import sbt.Tests.Output
75
import sbt.*
8-
import stryker4s.sbt.PluginCompat
6+
import sbt.Keys.*
7+
import sjsonnew.{given, *}
98
import stryker4s.exception.InitialTestRunFailedException
109
import stryker4s.log.Logger
1110
import stryker4s.model.*
1211
import stryker4s.run.TestRunner
12+
import stryker4s.sbt.PluginCompat
1313
import stryker4s.testrunner.api.TestFile
1414

1515
class LegacySbtTestRunner(initialState: State, settings: Seq[Def.Setting[?]], extracted: Extracted)(implicit
@@ -40,12 +40,12 @@ class LegacySbtTestRunner(initialState: State, settings: Seq[Def.Setting[?]], ex
4040

4141
private def runTests[T](state: State, onError: => T, onSuccess: => T, onFailed: => T): IO[T] =
4242
IO(PluginCompat.runTask(Test / executeTests, state)) map {
43-
case Some(Right(Output(TestResult.Passed, _, _))) => onSuccess
44-
case Some(Right(Output(TestResult.Failed, _, _))) => onFailed
45-
case Some(Right(Output(TestResult.Error, _, _))) => onFailed
46-
case _ => onError
43+
case Some(Right(output)) if output.overall == TestResult.Passed => onSuccess
44+
case Some(Right(output)) if output.overall == TestResult.Failed => onFailed
45+
case Some(Right(output)) if output.overall == TestResult.Error => onFailed
46+
case _ => onError
4747
}
4848

4949
private def mutationSetting(mutation: Int): Def.Setting[?] =
50-
Test / javaOptions += s"-DACTIVE_MUTATION=${String.valueOf(mutation)}"
50+
Test / javaOptions += s"-DACTIVE_MUTATION=${mutation.toString()}"
5151
}

project/Dependencies.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ object Dependencies {
99
// sbt-test-runner uses LTS to ensure compatibility with any project it runs in
1010
val scala3Lts = "3.3.6"
1111

12-
val scala3 = "3.6.4"
12+
val scala3 = "3.7.2"
1313

1414
val fullCrossScalaVersions = Seq(scala3, scala213, scala212)
1515
val ltsCrossScalaVersions = Seq(scala3Lts, scala213, scala212)

project/Settings.scala

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -65,11 +65,13 @@ object Settings {
6565
scriptedLaunchOpts ++= Seq("-Xmx1024M", "-Dplugin.version=" + version.value),
6666
(pluginCrossBuild / sbtVersion) := {
6767
scalaBinaryVersion.value match {
68-
case "2.12" => "1.7.0"
68+
case "2.12" => "1.11.2"
6969
case _ => "2.0.0-RC2"
7070
}
7171
},
72-
scriptedBufferLog := false
72+
scriptedBufferLog := false,
73+
// Disable unused import warnings (for 2.12), for better compatibility with SBT 2/Scala 3
74+
tpolecatExcludeOptions ++= Set(ScalacOptions.privateWarnUnusedImports)
7375
)
7476

7577
lazy val sbtTestRunnerSettings: Seq[Setting[?]] = Seq(

0 commit comments

Comments
 (0)