Skip to content

Commit ffeacb0

Browse files
committed
cross-build to sbt 2.x
1 parent 2d04dfd commit ffeacb0

File tree

24 files changed

+275
-192
lines changed

24 files changed

+275
-192
lines changed

.github/workflows/ci.yml

+46-18
Original file line numberDiff line numberDiff line change
@@ -6,64 +6,92 @@ on:
66
pull_request:
77
jobs:
88
jdk8:
9-
name: JDK8 tests
9+
strategy:
10+
fail-fast: false
11+
matrix:
12+
jvm: ["8"]
13+
scala: ["2.12", "3.6"]
14+
name: JDK${{ matrix.jvm }} / Scala ${{ matrix.scala }}
1015
runs-on: ubuntu-latest
1116
steps:
1217
- uses: actions/checkout@v4
1318
- uses: coursier/setup-action@v1
1419
with:
1520
apps: sbt
16-
jvm: temurin:8
21+
jvm: temurin:${{ matrix.jvm }}
1722
- run: rm -rf src/sbt-test/skip-sbt1.4
18-
- run: sbt test scripted
23+
- run: sbt ++${{ matrix.scala }} test scripted
1924
jdk11:
20-
name: JDK11 tests
25+
strategy:
26+
fail-fast: false
27+
matrix:
28+
jvm: ["11"]
29+
scala: ["2.12", "3.6"]
30+
name: JDK${{ matrix.jvm }} / Scala ${{ matrix.scala }}
2131
runs-on: ubuntu-latest
2232
steps:
2333
- uses: actions/checkout@v4
2434
- uses: coursier/setup-action@v1
2535
with:
2636
apps: sbt
27-
jvm: temurin:11
37+
jvm: temurin:${{ matrix.jvm }}
2838
- run: rm -rf src/sbt-test/skip-sbt1.4
29-
- run: sbt test scripted
39+
- run: sbt ++${{ matrix.scala }} test scripted
3040
jdk17:
31-
name: JDK17 tests
41+
strategy:
42+
fail-fast: false
43+
matrix:
44+
jvm: ["17"]
45+
scala: ["2.12", "3.6"]
46+
name: JDK${{ matrix.jvm }} / Scala ${{ matrix.scala }}
3247
runs-on: ubuntu-latest
3348
steps:
3449
- uses: actions/checkout@v4
3550
- uses: coursier/setup-action@v1
3651
with:
3752
apps: sbt
38-
jvm: temurin:17
53+
jvm: temurin:${{ matrix.jvm }}
3954
- run: rm -rf src/sbt-test/skip-java17+
4055
- run: rm -rf src/sbt-test/skip-sbt1.4
41-
- run: sbt test scripted
42-
56+
- run: sbt ++${{ matrix.scala }} test scripted
4357
jdk21:
44-
name: JDK21 tests
58+
strategy:
59+
fail-fast: false
60+
matrix:
61+
jvm: ["21"]
62+
scala: ["2.12", "3.6"]
63+
name: JDK${{ matrix.jvm }} / Scala ${{ matrix.scala }}
4564
runs-on: ubuntu-latest
4665
steps:
4766
- uses: actions/checkout@v4
4867
- uses: coursier/setup-action@v1
4968
with:
5069
apps: sbt
51-
jvm: temurin:21
70+
jvm: temurin:${{ matrix.jvm }}
5271
- run: rm -rf src/sbt-test/skip-java17+
53-
- run: sbt test scripted
72+
- run: sbt ++${{ matrix.scala }} test scripted
5473
jdk23:
55-
name: JDK23 tests
74+
strategy:
75+
fail-fast: false
76+
matrix:
77+
jvm: ["23"]
78+
scala: ["2.12", "3.6"]
79+
name: JDK${{ matrix.jvm }} / Scala ${{ matrix.scala }}
5680
runs-on: ubuntu-latest
5781
steps:
5882
- uses: actions/checkout@v4
5983
- uses: coursier/setup-action@v1
6084
with:
6185
apps: sbt
62-
jvm: temurin:23
86+
jvm: temurin:${{ matrix.jvm }}
6387
- run: rm -rf src/sbt-test/skip-java17+
64-
- run: sbt test scripted
88+
- run: sbt ++${{ matrix.scala }} test scripted
6589
windows:
66-
name: Windows tests
90+
strategy:
91+
fail-fast: false
92+
matrix:
93+
scala: ["2.12", "3.6"]
94+
name: Windows / Scala ${{ matrix.scala }}
6795
runs-on: windows-latest
6896
steps:
6997
- uses: actions/checkout@v4
@@ -72,7 +100,7 @@ jobs:
72100
apps: sbt
73101
- run: rm -r -fo src\sbt-test\skip-sbt1.4
74102
- run: rm -r -fo src\sbt-test\skip-windows
75-
- run: sbt test-skip-windows scripted
103+
- run: sbt ++${{ matrix.scala }} "testOnly -- -l SkipWindows" scripted
76104
shell: bash
77105
checks:
78106
name: Scalafmt

bin/test-release.sh

+4
Original file line numberDiff line numberDiff line change
@@ -6,3 +6,7 @@ version=$1
66
cs resolve \
77
--sbt-version 1.0 \
88
--sbt-plugin "ch.epfl.scala:sbt-scalafix:$version"
9+
10+
cs resolve \
11+
--sbt-version 2.0.0-SNAPSHOT \
12+
--sbt-plugin "ch.epfl.scala:sbt-scalafix:$version"

build.sbt

+41-16
Original file line numberDiff line numberDiff line change
@@ -31,11 +31,6 @@ developers := List(
3131
)
3232
)
3333

34-
commands += Command.command("test-skip-windows") { s =>
35-
"testOnly -- -l SkipWindows" ::
36-
s
37-
}
38-
3934
// Dependencies
4035
resolvers ++= Resolver.sonatypeOssRepos("public")
4136
libraryDependencies ++= Dependencies.all
@@ -44,29 +39,59 @@ libraryDependencies ++= List(
4439
"org.scalatest" %% "scalatest" % "3.2.19" % Test
4540
)
4641

47-
scalaVersion := "2.12.20"
42+
lazy val scala212 = "2.12.20"
43+
lazy val scala3 = "3.6.4"
44+
45+
scalaVersion := scala212
46+
crossScalaVersions := Seq(scala212, scala3)
4847

4948
// keep this as low as possible to avoid running into binary incompatibility such as https://github.com/sbt/sbt/issues/5049
50-
pluginCrossBuild / sbtVersion := "1.4.0"
49+
pluginCrossBuild / sbtVersion := {
50+
scalaBinaryVersion.value match {
51+
case "2.12" =>
52+
"1.4.0"
53+
case _ =>
54+
"2.0.0-SNAPSHOT"
55+
}
56+
}
5157

5258
scriptedSbt := {
5359
val jdk = System.getProperty("java.specification.version").toDouble
5460

5561
if (jdk >= 21)
56-
"1.9.0" // first release that supports JDK21
62+
Ordering[String].max(
63+
(pluginCrossBuild / sbtVersion).value,
64+
"1.9.0" // first release that supports JDK21
65+
)
5766
else
5867
(pluginCrossBuild / sbtVersion).value
5968
}
6069

61-
libraryDependencies += compilerPlugin(scalafixSemanticdb)
62-
63-
scalacOptions ++= List("-Ywarn-unused", "-Yrangepos")
70+
libraryDependencies ++= {
71+
scalaBinaryVersion.value match {
72+
case "2.12" =>
73+
List(compilerPlugin(scalafixSemanticdb))
74+
case _ =>
75+
Nil
76+
}
77+
}
6478

65-
scalacOptions ++= List(
66-
"-target:jvm-1.8",
67-
"-Xfatal-warnings",
68-
"-Xlint"
69-
)
79+
scalacOptions ++= {
80+
scalaBinaryVersion.value match {
81+
case "2.12" =>
82+
List(
83+
"-Ywarn-unused",
84+
"-Yrangepos",
85+
"-Xlint"
86+
)
87+
case _ =>
88+
List(
89+
"-Wunused:all",
90+
"-Werror",
91+
"-Wconf:msg=scalafixScalaBinaryVersion.*deprecated:silent"
92+
)
93+
}
94+
}
7095

7196
// Scripted
7297
enablePlugins(ScriptedPlugin)

project/Dependencies.scala

+2-1
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ object Dependencies {
77
val all = List(
88
"org.eclipse.jgit" % "org.eclipse.jgit" % "5.13.3.202401111512-r",
99
"ch.epfl.scala" % "scalafix-interfaces" % scalafixVersion,
10-
"io.get-coursier" % "interface" % "1.0.28"
10+
"io.get-coursier" % "interface" % "1.0.28",
11+
"org.scala-lang.modules" %% "scala-collection-compat" % "2.13.0"
1112
)
1213
}

project/plugins.sbt

+1-1
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ Compile / unmanagedSourceDirectories ++= {
66
val root = (ThisBuild / baseDirectory).value.getParentFile / "src" / "main"
77
List(
88
root / "scala",
9-
root / "scala-sbt-1.0"
9+
root / "scala-2.12"
1010
)
1111
}
1212
libraryDependencies ++= Dependencies.all
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
package scalafix.internal.sbt
2+
3+
import sbt._
4+
import sbt.librarymanagement.ModuleID
5+
6+
object Compat {
7+
8+
def extractModuleID(
9+
attributed: Attributed[File]
10+
): Option[ModuleID] =
11+
attributed.get(Keys.moduleID.key)
12+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
package scalafix.internal.sbt
2+
3+
import sbt._
4+
import sbt.librarymanagement.ModuleID
5+
6+
object Compat {
7+
8+
def extractModuleID(
9+
attributed: Attributed[xsbti.HashedVirtualFileRef]
10+
): Option[ModuleID] =
11+
attributed
12+
.get(Keys.moduleIDStr)
13+
.map(Classpaths.moduleIdJsonKeyFormat.read)
14+
}

src/main/scala/scalafix/internal/sbt/CoursierRepoResolvers.scala

+2-2
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import sbt.util.Logger
77

88
import java.net.MalformedURLException
99
import java.nio.file.Paths
10-
import scala.collection.JavaConverters.*
10+
import scala.jdk.CollectionConverters.*
1111

1212
// vendor from sbt-coursier/lmcoursier.internal.Resolvers
1313
object CoursierRepoResolvers {
@@ -122,7 +122,7 @@ object CoursierRepoResolvers {
122122

123123
private object IBiblioRepository {
124124

125-
private def stringVector(v: java.util.List[_]): Vector[String] =
125+
private def stringVector(v: java.util.List[?]): Vector[String] =
126126
Option(v).map(_.asScala.toVector).getOrElse(Vector.empty).collect {
127127
case s: String => s
128128
}

src/main/scala/scalafix/internal/sbt/JGitCompletions.scala

+1-1
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ import org.eclipse.jgit.util.FS
1010
import org.eclipse.jgit.util.GitDateFormatter
1111

1212
import java.nio.file.Path
13-
import scala.collection.JavaConverters._
13+
import scala.jdk.CollectionConverters._
1414
import scala.util.Try
1515

1616
class JGitCompletion(cwd: Path) {

src/main/scala/scalafix/internal/sbt/ScalafixInterface.scala

+4-4
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ import sbt.io.RegularFileFilter
88
import scalafix.interfaces.{Scalafix => ScalafixAPI, _}
99
import scalafix.sbt.InvalidArgument
1010

11-
import scala.collection.JavaConverters._
11+
import scala.jdk.CollectionConverters._
1212
import java.io.PrintStream
1313

1414
sealed trait Arg extends (ScalafixArguments => ScalafixArguments)
@@ -38,7 +38,7 @@ object Arg {
3838
.map(uri => java.nio.file.Paths.get(uri).toFile)
3939
.flatMap {
4040
case classDirectory if classDirectory.isDirectory =>
41-
classDirectory.**(RegularFileFilter).get
41+
classDirectory.**(RegularFileFilter).get()
4242
case jar =>
4343
Seq(jar)
4444
}
@@ -113,10 +113,10 @@ class ScalafixInterface private (
113113
scalafixArguments.run().toSeq
114114

115115
def availableRules(): Seq[ScalafixRule] =
116-
scalafixArguments.availableRules().asScala
116+
scalafixArguments.availableRules().asScala.toSeq
117117

118118
def rulesThatWillRun(): Seq[ScalafixRule] =
119-
try scalafixArguments.rulesThatWillRun().asScala
119+
try scalafixArguments.rulesThatWillRun().asScala.toSeq
120120
catch {
121121
case e: ScalafixException => throw new InvalidArgument(e.getMessage)
122122
}

src/main/scala/scalafix/internal/sbt/SemanticRuleValidator.scala

+1-1
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ class SemanticRuleValidator(ifNotFound: SemanticdbNotFound) {
2525
invalidArguments.foreach { invalidArgument =>
2626
errors += invalidArgument.getMessage
2727
}
28-
errors
28+
errors.toSeq
2929
}
3030
}
3131
}

src/main/scala/scalafix/sbt/ScalafixEnable.scala

+17-17
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import sbt.VersionNumber.SemVer
66

77
import ScalafixPlugin.autoImport.scalafixResolvers
88

9-
import collection.JavaConverters._
9+
import scala.jdk.CollectionConverters._
1010
import scala.util._
1111
import coursierapi.Repository
1212

@@ -96,7 +96,7 @@ object ScalafixEnable {
9696
VersionNumber(BuildInfo.scalametaVersion)
9797
val compatibleSemanticdbVs = Try(
9898
coursierapi.Versions.create
99-
.withRepositories(project.scalafixResolvers0: _*)
99+
.withRepositories(project.scalafixResolvers0*)
100100
.withModule(semanticdbScalacModule)
101101
.versions()
102102
.getMergedListings
@@ -160,21 +160,21 @@ object ScalafixEnable {
160160
} else {
161161
val latestAvailable =
162162
tail.lastOption.getOrElse(earliestAvailable)
163-
Seq(
164-
semanticdbVersion := {
165-
val v = latestAvailable.toString
166-
sLog.value.info(
167-
s"Setting semanticdbVersion to $v in project " +
168-
s"${project.ref.project} since the version " +
169-
s"${recommendedSemanticdbV} tracked by scalafix " +
170-
s"${BuildInfo.scalafixVersion} is no longer " +
171-
s"published for scala " +
172-
s"${project.scalaVersion0.toString} - " +
173-
s"consider bumping scala"
174-
)
175-
v
176-
}
177-
)
163+
Seq(
164+
semanticdbVersion := {
165+
val v = latestAvailable.toString
166+
sLog.value.info(
167+
s"Setting semanticdbVersion to $v in project " +
168+
s"${project.ref.project} since the version " +
169+
s"${recommendedSemanticdbV} tracked by scalafix " +
170+
s"${BuildInfo.scalafixVersion} is no longer " +
171+
s"published for scala " +
172+
s"${project.scalaVersion0.toString} - " +
173+
s"consider bumping scala"
174+
)
175+
v
176+
}
177+
)
178178
}
179179
}
180180
} :+ (semanticdbEnabled := true)

0 commit comments

Comments
 (0)