diff --git a/sbt-plugin/build.sbt b/sbt-plugin/build.sbt index e55a6c3..f1d6d94 100644 --- a/sbt-plugin/build.sbt +++ b/sbt-plugin/build.sbt @@ -21,22 +21,33 @@ inThisBuild( ) ) +val scala2 = "2.12.20" +val scala3 = "3.6.4" + val `sbt-github-dependency-submission` = project .in(file(".")) .enablePlugins(SbtPlugin, ContrabandPlugin, JsonCodecPlugin, BuildInfoPlugin) .settings( name := "sbt-github-dependency-submission", - sbtVersion := "1.5.8", - scalaVersion := "2.12.20", + pluginCrossBuild / sbtVersion := { + scalaBinaryVersion.value match { + case "2.12" => "1.5.8" + case _ => "2.0.0-M4" + } + }, + scalaVersion := scala2, + crossScalaVersions := Seq(scala2, scala3), scalacOptions ++= Seq( "-deprecation", "-encoding", "UTF-8", "-feature", "-unchecked", - "-Xfatal-warnings", - "-Ywarn-unused-import" - ), + "-Xfatal-warnings" + ) ++ (scalaBinaryVersion.value match { + case "2.12" => Seq("-Ywarn-unused-import") + case _ => Seq("-Wunused:imports") + }), libraryDependencies ++= Seq( "com.eed3si9n" %% "gigahorse-asynchttpclient" % "0.7.0", "org.scalameta" %% "munit" % "1.1.0" % Test diff --git a/sbt-plugin/src/main/scala/ch/epfl/scala/AnalyzeDependencyGraph.scala b/sbt-plugin/src/main/scala/ch/epfl/scala/AnalyzeDependencyGraph.scala index 217eaaf..908d4db 100644 --- a/sbt-plugin/src/main/scala/ch/epfl/scala/AnalyzeDependencyGraph.scala +++ b/sbt-plugin/src/main/scala/ch/epfl/scala/AnalyzeDependencyGraph.scala @@ -205,7 +205,7 @@ object AnalyzeDependencyGraph { firstPatchedVersion, securityVulnerability.collectFirst { case JField("severity", JString(sev)) => sev }.get ) - } + }.toSeq case _ => val message = s"Unexpected status ${httpResp.status} ${httpResp.statusText} with body:\n${httpResp.bodyAsString}" diff --git a/sbt-plugin/src/main/scala/ch/epfl/scala/GithubDependencyGraphPlugin.scala b/sbt-plugin/src/main/scala/ch/epfl/scala/GithubDependencyGraphPlugin.scala index 975c3fa..3fd5323 100644 --- a/sbt-plugin/src/main/scala/ch/epfl/scala/GithubDependencyGraphPlugin.scala +++ b/sbt-plugin/src/main/scala/ch/epfl/scala/GithubDependencyGraphPlugin.scala @@ -13,7 +13,11 @@ import sbt.internal.util.complete.Parsers import sbt.plugins.JvmPlugin import sjsonnew.shaded.scalajson.ast.unsafe.JString +// `import sbt.Result._` is unused in Scala 2/sbt 1 but necessary in Scala 3/sbt 2 +@annotation.nowarn("msg=Unused import") object GithubDependencyGraphPlugin extends AutoPlugin { + import sbt.Result._ + private val runtimeConfigs = Set( Compile, @@ -46,12 +50,12 @@ object GithubDependencyGraphPlugin extends AutoPlugin { override def trigger = allRequirements override def requires: Plugins = JvmPlugin - override def globalSettings: Seq[Setting[_]] = Def.settings( + override def globalSettings: Seq[Setting[?]] = Def.settings( githubStoreDependencyManifests := storeManifestsTask.evaluated, Keys.commands ++= SubmitDependencyGraph.commands ++ AnalyzeDependencyGraph.commands ) - override def projectSettings: Seq[Setting[_]] = Def.settings( + override def projectSettings: Seq[Setting[?]] = Def.settings( githubDependencyManifest := manifestTask.value, githubDependencyManifest / Keys.aggregate := false ) @@ -179,10 +183,10 @@ object GithubDependencyGraphPlugin extends AutoPlugin { allDependencies += (getReference(caller.caller) -> moduleRef) } - val allDependenciesMap: Map[String, Vector[String]] = allDependencies.view - .groupBy(_._1) - .mapValues { - _.map { case (_, dep) => dep }.toVector + val allDependenciesMap: Map[String, Vector[String]] = + allDependencies.foldLeft(Map.empty[String, Vector[String]]) { + case (acc, (ref, dep)) => + acc + (ref -> (acc.getOrElse(ref, Vector.empty) :+ dep)) } val allDirectDependenciesRefs: Set[String] = allDirectDependencies.map(getReference).toSet diff --git a/sbt-plugin/src/main/scala/ch/epfl/scala/SubmitDependencyGraph.scala b/sbt-plugin/src/main/scala/ch/epfl/scala/SubmitDependencyGraph.scala index deb06d0..d223f51 100644 --- a/sbt-plugin/src/main/scala/ch/epfl/scala/SubmitDependencyGraph.scala +++ b/sbt-plugin/src/main/scala/ch/epfl/scala/SubmitDependencyGraph.scala @@ -168,7 +168,7 @@ object SubmitDependencyGraph { } private def githubJob(correlator: String): Job = { - val id = githubRunId + val id = githubRunId() val html_url = for { serverUrl <- Properties.envOrNone("GITHUB_SERVER_URL")