From 701ffe2c44f308a7d17bc44a3c3598e34f2d0086 Mon Sep 17 00:00:00 2001 From: Scala Steward Date: Mon, 15 Jun 2026 15:08:00 +0000 Subject: [PATCH 1/6] Update sbt to 2.0.0 --- project/build.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/project/build.properties b/project/build.properties index 7c1916d..666624a 100644 --- a/project/build.properties +++ b/project/build.properties @@ -1 +1 @@ -sbt.version=1.12.12 +sbt.version=2.0.0 From 4435a2077e09bd2be5a6dd25d0ae591656f84d34 Mon Sep 17 00:00:00 2001 From: Matt Dziuban Date: Tue, 16 Jun 2026 12:14:26 -0400 Subject: [PATCH 2/6] Remove sbt-projectmatrix, update `baseProj`. --- build.sbt | 10 +++++----- project/plugins.sbt | 1 - 2 files changed, 5 insertions(+), 6 deletions(-) diff --git a/build.sbt b/build.sbt index c370f75..c2e9138 100644 --- a/build.sbt +++ b/build.sbt @@ -123,12 +123,12 @@ lazy val publishSettings = Seq( s3PublishBucket := "bondlink-maven-repo", ) -def baseProj(id: String, nme: String, scalaVersions: Seq[String] = Seq(scala3ForLib)) = - sbt.internal.ProjectMatrix(id, file(id)) +def baseProj(matrix: ProjectMatrix, nme: String, scalaVersions: Seq[String] = Seq(scala3ForLib)) = + matrix .jvmPlatform(scalaVersions = scalaVersions) .settings(commonSettings ++ Seq(name := nme)) -lazy val core = baseProj("core", "find-unused-core") +lazy val core = baseProj(projectMatrix.in(file("core")), "find-unused-core") .settings(publishSettings) .settings( libraryDependencies ++= ( @@ -142,7 +142,7 @@ lazy val core = baseProj("core", "find-unused-core") .dependsOn((if (tastyQueryDev) Seq[ClasspathDep[ProjectReference]](tastyQuery) else Seq())*) .aggregate((if (tastyQueryDev) Seq(tastyQuery) else Seq())*) -lazy val cli = baseProj("cli", "find-unused-cli") +lazy val cli = baseProj(projectMatrix.in(file("cli")), "find-unused-cli") .settings(publishSettings) .settings( libraryDependencies ++= Seq( @@ -168,7 +168,7 @@ def pluginSbtVersion(scalaBinaryVersion: String, sbt1Version: String): String = case _ => "2.0.0" } -lazy val plugin = baseProj("plugin", "find-unused-plugin", Seq(scala2, scala3ForSbt)) +lazy val plugin = baseProj(projectMatrix.in(file("plugin")), "find-unused-plugin", Seq(scala2, scala3ForSbt)) .settings(publishSettings) .settings( name := "find-unused-plugin", diff --git a/project/plugins.sbt b/project/plugins.sbt index 1567e3f..0bb20c9 100644 --- a/project/plugins.sbt +++ b/project/plugins.sbt @@ -3,6 +3,5 @@ resolvers += "bondlink-maven-repo" at "https://maven.bondlink-cdn.com" addSbtPlugin("bondlink" % "sbt-s3-publish" % "0.0.1") addSbtPlugin("com.eed3si9n" % "sbt-assembly" % "2.3.1") addSbtPlugin("com.eed3si9n" % "sbt-buildinfo" % "0.13.1") -addSbtPlugin("com.eed3si9n" % "sbt-projectmatrix" % "0.11.0") addSbtPlugin("com.github.sbt" % "sbt-github-actions" % "0.30.0") addSbtPlugin("org.typelevel" % "sbt-tpolecat" % "0.5.6") From 76141103c6b09dc0bfe7e284b006ee3648a843f6 Mon Sep 17 00:00:00 2001 From: Matt Dziuban Date: Tue, 16 Jun 2026 12:15:15 -0400 Subject: [PATCH 3/6] Update `cliClasspath` to use `fileConverter`. --- build.sbt | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/build.sbt b/build.sbt index c2e9138..e9581e2 100644 --- a/build.sbt +++ b/build.sbt @@ -183,7 +183,10 @@ lazy val plugin = baseProj(projectMatrix.in(file("plugin")), "find-unused-plugin .exclude("org.scala-lang.modules", "scala-collection-compat_2.13") .exclude("org.scala-lang.modules", "scala-xml_2.13"), ), - cliClasspath := (cli.jvm(scala3ForLib) / Runtime / fullClasspath).value.map(_.data), + cliClasspath := Def.uncached { + val conv = fileConverter.value + (cli.jvm(scala3ForLib) / Runtime / fullClasspath).value.map(p => conv.toPath(p.data).toFile) + }, buildInfoKeys := Seq[BuildInfoKey](version, BuildInfoKey(cliClasspath)), buildInfoPackage := "bl.unused", ) From 49af831c6fabec5316d92a3afc38d64307f0f18b Mon Sep 17 00:00:00 2001 From: Matt Dziuban Date: Tue, 16 Jun 2026 19:55:28 -0400 Subject: [PATCH 4/6] Ensure release step is only added once. --- build.sbt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/build.sbt b/build.sbt index e9581e2..68bf2f2 100644 --- a/build.sbt +++ b/build.sbt @@ -79,7 +79,7 @@ ThisBuild / githubWorkflowBuild := Seq( ), ) -ThisBuild / githubWorkflowAddedJobs += WorkflowJob( +ThisBuild / githubWorkflowAddedJobs ~= (_.filterNot(_.id == "release") :+ WorkflowJob( id = "release", name = "Release", oses = List("ubuntu-latest"), @@ -108,7 +108,7 @@ ThisBuild / githubWorkflowAddedJobs += WorkflowJob( ), ), ), -) +)) lazy val commonSettings = Seq( organization := "bondlink", From 0d72e137e1515c7f8697b0d12358d869c4855060 Mon Sep 17 00:00:00 2001 From: Matt Dziuban Date: Tue, 16 Jun 2026 19:55:33 -0400 Subject: [PATCH 5/6] Use `githubWorkflowUseSbtThinClient` to fix `githubWorkflowCheck` step. --- .github/workflows/ci.yml | 2 +- build.sbt | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 6221c66..74a4baf 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -66,7 +66,7 @@ jobs: uses: sbt/setup-sbt@v1 - name: Check that workflows are up to date - run: sbt '++ ${{ matrix.scala }}' githubWorkflowCheck + run: sbt --client '++ ${{ matrix.scala }}; githubWorkflowCheck' - name: scripted run: sbt 'test; scripted' diff --git a/build.sbt b/build.sbt index 68bf2f2..d6867dc 100644 --- a/build.sbt +++ b/build.sbt @@ -38,6 +38,7 @@ ThisBuild / githubWorkflowBuildMatrixFailFast := Some(false) ThisBuild / githubWorkflowTargetBranches := Seq("main") ThisBuild / githubWorkflowTargetTags := Seq("v*") ThisBuild / githubWorkflowPublishTargetBranches := Seq() +ThisBuild / githubWorkflowUseSbtThinClient := true def isJava(v: Int) = s"matrix.java == '${javaVersions.find(_.version == v.toString).get.render}'" def isScala(v: String) = s"matrix.scala == '$v'" From 2d357d24b1fffc261f03c6232e1d1254a9495407 Mon Sep 17 00:00:00 2001 From: Matt Dziuban Date: Tue, 16 Jun 2026 20:02:38 -0400 Subject: [PATCH 6/6] Flip `pluginSbtVersion` logic. --- build.sbt | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/build.sbt b/build.sbt index d6867dc..176b94a 100644 --- a/build.sbt +++ b/build.sbt @@ -163,10 +163,10 @@ lazy val cli = baseProj(projectMatrix.in(file("cli")), "find-unused-cli") lazy val cliClasspath = taskKey[Seq[File]]("CLI classpath") -def pluginSbtVersion(scalaBinaryVersion: String, sbt1Version: String): String = +def pluginSbtVersion(scalaBinaryVersion: String, sbt2Version: String): String = scalaBinaryVersion match { - case "2.12" => sbt1Version - case _ => "2.0.0" + case "3" => sbt2Version + case "2.12" => "1.9.0" } lazy val plugin = baseProj(projectMatrix.in(file("plugin")), "find-unused-plugin", Seq(scala2, scala3ForSbt)) @@ -175,7 +175,7 @@ lazy val plugin = baseProj(projectMatrix.in(file("plugin")), "find-unused-plugin name := "find-unused-plugin", publishConfiguration := publishConfiguration.value.withOverwrite(scalaVersion.value == scala3ForSbt), publishLocalConfiguration := publishLocalConfiguration.value.withOverwrite(scalaVersion.value == scala3ForSbt), - pluginCrossBuild / sbtVersion := pluginSbtVersion(scalaBinaryVersion.value, "1.9.0"), + pluginCrossBuild / sbtVersion := pluginSbtVersion(scalaBinaryVersion.value, "2.0.0"), scriptedBufferLog := false, scriptedLaunchOpts ++= Seq(s"-Dplugin.version=${version.value}", s"-Dscala.version=$scala3ForLib"), scriptedSbt := pluginSbtVersion(scalaBinaryVersion.value, sbtVersion.value),