Merge pull request #8024 from unkarjedy/fix-8022-updateSbtClassifiers

[2.x] fix updateSbtClassifiers task
This commit is contained in:
eugene yokota 2025-01-30 23:38:52 -05:00 committed by GitHub
commit 8d80bf5c39
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
6 changed files with 99 additions and 8 deletions

View File

@ -163,7 +163,7 @@ suite with `sbt testOnly`
Scripted integration tests reside in `sbt-app/src/sbt-test` and are Scripted integration tests reside in `sbt-app/src/sbt-test` and are
written using the same testing infrastructure sbt plugin authors can written using the same testing infrastructure sbt plugin authors can
use to test their own plugins with sbt. You can read more about this use to test their own plugins with sbt. You can read more about this
style of tests [here](https://www.scala-sbt.org/1.0/docs/Testing-sbt-plugins). style of tests [here](https://www.scala-sbt.org/1.x/docs/Testing-sbt-plugins).
You can run the integration tests with the `sbt scripted` sbt You can run the integration tests with the `sbt scripted` sbt
command. To run a single test, such as the test in command. To run a single test, such as the test in

View File

@ -3714,17 +3714,21 @@ object Classpaths {
val ref = thisProjectRef.value val ref = thisProjectRef.value
val unit = loadedBuild.value.units(ref.build).unit val unit = loadedBuild.value.units(ref.build).unit
val converter = unit.converter val converter = unit.converter
val pluginClasspath = unit.plugins.fullClasspath.toVector val pluginClasspath = unit.plugins.pluginData.dependencyClasspath.toVector
// Exclude directories: an approximation to whether they've been published
// Note: it might be a redundant legacy from sbt 0.13/1.x times where the classpath contained directories
// but it's left jsut in case
val pluginJars = pluginClasspath.filter: x => val pluginJars = pluginClasspath.filter: x =>
!Files.isDirectory(converter.toPath(x.data)) !Files.isDirectory(converter.toPath(x.data))
// exclude directories: an approximation to whether they've been published
val pluginIDs: Vector[ModuleID] = pluginJars.flatMap(_.get(moduleIDStr).map: str => val pluginIDs: Vector[ModuleID] = pluginJars.flatMap(_.get(moduleIDStr).map: str =>
moduleIdJsonKeyFormat.read(str)) moduleIdJsonKeyFormat.read(str))
val dependencies = sbtDependency.value +: pluginIDs
GetClassifiersModule( GetClassifiersModule(
projectID.value, projectID.value,
// TODO: Should it be sbt's scalaModuleInfo? // TODO: Should it be sbt's scalaModuleInfo?
scalaModuleInfo.value, scalaModuleInfo.value,
sbtDependency.value +: pluginIDs, dependencies,
// sbt is now on Maven Central, so this has changed from sbt 0.13. // sbt is now on Maven Central, so this has changed from sbt 0.13.
Vector(Configurations.Default) ++ Configurations.default, Vector(Configurations.Default) ++ Configurations.default,
classifiers.toVector classifiers.toVector

View File

@ -1,5 +1,3 @@
ThisBuild / scalaVersion := "2.11.12"
ivyConfiguration := { ivyConfiguration := {
throw new RuntimeException("updateSbtClassifiers should use updateSbtClassifiers / ivyConfiguration") throw new RuntimeException("updateSbtClassifiers should use updateSbtClassifiers / ivyConfiguration")
} }
@ -8,5 +6,87 @@ dependencyResolution := {
throw new RuntimeException("updateSbtClassifiers should use updateSbtClassifiers / dependencyResolution") throw new RuntimeException("updateSbtClassifiers should use updateSbtClassifiers / dependencyResolution")
} }
scalaOrganization := "doesnt.exist" lazy val root = (project in file("."))
.settings(
scalaVersion := "2.11.12",
scalaOrganization := "doesnt.exist",
name := "myProjectName",
TaskKey[Unit]("checkModuleIdsInUpdateSbtClassifiers") := {
val updateReport = updateSbtClassifiers.value
val moduleReports = updateReport.configurations.find(_.configuration.name == "default").get.modules
// Calling "distinct" as there are different entries for sources and javadoc classifiers with same module
val moduleIds = moduleReports.map(_.module).distinct
val moduleIdsShort = moduleIds.map(m => s"${m.organization}:${m.name}")
val expectedModuleIds = Seq(
"com.eed3si9n:gigahorse-apache-http_3",
"com.eed3si9n:gigahorse-core_3",
"com.eed3si9n:shaded-apache-httpasyncclient",
"com.eed3si9n:shaded-jawn-parser_3",
"com.eed3si9n:shaded-scalajson_3",
"com.eed3si9n:sjson-new-core_3",
"com.eed3si9n:sjson-new-murmurhash_3",
"com.eed3si9n:sjson-new-scalajson_3",
"com.github.ben-manes.caffeine:caffeine",
"com.github.mwiede:jsch",
"com.google.errorprone:error_prone_annotations",
"com.lmax:disruptor",
"com.swoval:file-tree-views",
"com.typesafe:config",
"com.typesafe:ssl-config-core_3",
"net.java.dev.jna:jna",
"net.java.dev.jna:jna-platform",
"net.openhft:zero-allocation-hashing",
"org.apache.logging.log4j:log4j-api",
"org.apache.logging.log4j:log4j-core",
"org.apache.logging.log4j:log4j-slf4j-impl",
"org.checkerframework:checker-qual",
"org.fusesource.jansi:jansi",
"org.jline:jline-builtins",
"org.jline:jline-native",
"org.jline:jline-reader",
"org.jline:jline-style",
"org.jline:jline-terminal",
"org.jline:jline-terminal-jni",
"org.reactivestreams:reactive-streams",
"org.scala-lang.modules:scala-asm",
"org.scala-lang.modules:scala-parallel-collections_3",
"org.scala-lang.modules:scala-parser-combinators_3",
"org.scala-lang.modules:scala-xml_3",
"org.scala-lang:scala-library",
"org.scala-lang:scala-reflect",
"org.scala-lang:scala3-compiler_3",
"org.scala-lang:scala3-interfaces",
"org.scala-lang:scala3-library_3",
"org.scala-lang:tasty-core_3",
"org.scala-sbt.ipcsocket:ipcsocket",
"org.scala-sbt.ivy:ivy",
"org.scala-sbt.jline:jline",
"org.scala-sbt:compiler-interface",
"org.scala-sbt:io_3",
"org.scala-sbt:launcher-interface",
"org.scala-sbt:sbinary_3",
"org.scala-sbt:template-resolver",
"org.scala-sbt:test-interface",
"org.scala-sbt:zinc-apiinfo_3",
"org.scala-sbt:zinc-classfile_3",
"org.scala-sbt:zinc-classpath_3",
"org.scala-sbt:zinc-compile-core_3",
"org.scala-sbt:zinc-core_3",
"org.scala-sbt:zinc-persist_3",
"org.scala-sbt:zinc_3",
"org.slf4j:slf4j-api",
)
def assertCollectionsEqual(message: String, expected: Seq[String], actual: Seq[String]): Unit =
// using the new line for a more readable comparison failure output
org.junit.Assert.assertEquals(message: String, expected.mkString("\n"), actual.mkString("\n"))
assertCollectionsEqual(
"Unexpected module ids in updateSbtClassifiers",
expectedModuleIds.sorted,
moduleIdsShort.sorted,
)
}
)

View File

@ -1 +0,0 @@
> updateSbtClassifiers

View File

@ -0,0 +1,4 @@
// The library surves two purposes:
// 1. add some non-standard library to the meta-build classpath to later check that it's included into updateSbtClassifiers
// 2. use assertions from junit in custom assertion in `build.sbt` of current scripted test
libraryDependencies += "junit" % "junit" % "4.13.2"

View File

@ -0,0 +1,4 @@
> updateSbtClassifiers
# see assertion definition in build.sbt
> checkModuleIdsInUpdateSbtClassifiers