diff --git a/src/main/scala/ch/epfl/scala/GithubDependencyGraphPlugin.scala b/src/main/scala/ch/epfl/scala/GithubDependencyGraphPlugin.scala index cb9f355..0752b55 100644 --- a/src/main/scala/ch/epfl/scala/GithubDependencyGraphPlugin.scala +++ b/src/main/scala/ch/epfl/scala/GithubDependencyGraphPlugin.scala @@ -128,12 +128,8 @@ object GithubDependencyGraphPlugin extends AutoPlugin { val resolved = for ((moduleReport, configRef) <- moduleReports) yield { - val module = moduleReport.module - val moduleRef = getReference(module) - val artifacts = moduleReport.artifacts.map { case (a, _) => a } - val classifiers = artifacts.flatMap(_.classifier).filter(_ != "default") - val packaging = if (classifiers.nonEmpty) "?" + classifiers.map(c => s"packaging=$c") else "" - val packageUrl = s"pkg:maven/${module.organization}/${module.name}@${module.revision}$packaging" + val moduleRef = getReference(moduleReport.module) + val packageUrl = formatPackageUrl(moduleReport) val dependencies = allDependenciesMap.getOrElse(moduleRef, Vector.empty) val relationship = if (allDirectDependenciesRefs.contains(moduleRef)) DependencyRelationship.direct @@ -153,6 +149,14 @@ object GithubDependencyGraphPlugin extends AutoPlugin { githubapi.Manifest(projectModuleRef, file, metadata, resolved.toMap) } + private def formatPackageUrl(moduleReport: ModuleReport): String = { + val module = moduleReport.module + val artifacts = moduleReport.artifacts.map { case (a, _) => a } + val classifiers = artifacts.flatMap(_.classifier).filter(_ != "default") + val packaging = if (classifiers.nonEmpty) "?" + classifiers.map(c => s"packaging=$c").mkString("&") else "" + s"pkg:maven/${module.organization}/${module.name}@${module.revision}$packaging" + } + private def isRuntime(config: ConfigRef): Boolean = runtimeConfigs.contains(config) private def githubCIEnv(name: String): String = diff --git a/src/sbt-test/dependency-graph/coursier-manifest/build.sbt b/src/sbt-test/dependency-manifest/coursier-manifest/build.sbt similarity index 100% rename from src/sbt-test/dependency-graph/coursier-manifest/build.sbt rename to src/sbt-test/dependency-manifest/coursier-manifest/build.sbt diff --git a/src/sbt-test/dependency-graph/ci-submit/project/plugins.sbt b/src/sbt-test/dependency-manifest/coursier-manifest/project/plugins.sbt similarity index 100% rename from src/sbt-test/dependency-graph/ci-submit/project/plugins.sbt rename to src/sbt-test/dependency-manifest/coursier-manifest/project/plugins.sbt diff --git a/src/sbt-test/dependency-graph/coursier-manifest/test b/src/sbt-test/dependency-manifest/coursier-manifest/test similarity index 100% rename from src/sbt-test/dependency-graph/coursier-manifest/test rename to src/sbt-test/dependency-manifest/coursier-manifest/test diff --git a/src/sbt-test/dependency-graph/default-scala-manifest/build.sbt b/src/sbt-test/dependency-manifest/default-scala-manifest/build.sbt similarity index 100% rename from src/sbt-test/dependency-graph/default-scala-manifest/build.sbt rename to src/sbt-test/dependency-manifest/default-scala-manifest/build.sbt diff --git a/src/sbt-test/dependency-graph/coursier-manifest/project/plugins.sbt b/src/sbt-test/dependency-manifest/default-scala-manifest/project/plugins.sbt similarity index 100% rename from src/sbt-test/dependency-graph/coursier-manifest/project/plugins.sbt rename to src/sbt-test/dependency-manifest/default-scala-manifest/project/plugins.sbt diff --git a/src/sbt-test/dependency-graph/default-scala-manifest/test b/src/sbt-test/dependency-manifest/default-scala-manifest/test similarity index 100% rename from src/sbt-test/dependency-graph/default-scala-manifest/test rename to src/sbt-test/dependency-manifest/default-scala-manifest/test diff --git a/src/sbt-test/dependency-graph/ivy-manifest/build.sbt b/src/sbt-test/dependency-manifest/ivy-manifest/build.sbt similarity index 100% rename from src/sbt-test/dependency-graph/ivy-manifest/build.sbt rename to src/sbt-test/dependency-manifest/ivy-manifest/build.sbt diff --git a/src/sbt-test/dependency-graph/default-scala-manifest/project/plugins.sbt b/src/sbt-test/dependency-manifest/ivy-manifest/project/plugins.sbt similarity index 100% rename from src/sbt-test/dependency-graph/default-scala-manifest/project/plugins.sbt rename to src/sbt-test/dependency-manifest/ivy-manifest/project/plugins.sbt diff --git a/src/sbt-test/dependency-graph/ivy-manifest/test b/src/sbt-test/dependency-manifest/ivy-manifest/test similarity index 100% rename from src/sbt-test/dependency-graph/ivy-manifest/test rename to src/sbt-test/dependency-manifest/ivy-manifest/test diff --git a/src/sbt-test/dependency-manifest/package-urls/build.sbt b/src/sbt-test/dependency-manifest/package-urls/build.sbt new file mode 100644 index 0000000..d513bdd --- /dev/null +++ b/src/sbt-test/dependency-manifest/package-urls/build.sbt @@ -0,0 +1,47 @@ +import ch.epfl.scala.githubapi.DependencyRelationship +import ch.epfl.scala.githubapi.DependencyScope +import ch.epfl.scala.githubapi.Manifest +import sjsonnew.shaded.scalajson.ast.unsafe.JString + +val checkManifest = taskKey[Unit]("Check the Github manifest of a project") + +inThisBuild( + Seq( + organization := "ch.epfl.scala", + version := "1.2.0-SNAPSHOT", + // use Ivy because Coursier does not allow several classifier on the same dep + useCoursier := false, + scalaVersion := "2.12.15" + ) +) + +lazy val p1 = project + .in(file("p1")) + .settings( + libraryDependencies ++= Seq( + ("com.google.inject" % "guice" % "4.0").classifier("no_aop"), + ("org.lwjgl" % "lwjgl" % "3.3.1") + .classifier("natives-windows") + .classifier("natives-linux") + .classifier("natives-macos") + ), + checkManifest := { + val manifest = githubDependencyManifest.value + + checkDependency(manifest, "com.google.inject:guice:4.0")( + expectedPackageUrl = "pkg:maven/com.google.inject/guice@4.0?packaging=no_aop" + ) + checkDependency(manifest, "org.lwjgl:lwjgl:3.3.1")( + expectedPackageUrl = + "pkg:maven/org.lwjgl/lwjgl@3.3.1?packaging=natives-linux&packaging=natives-macos&packaging=natives-windows" + ) + } + ) + +def checkDependency(manifest: Manifest, name: String)(expectedPackageUrl: String): Unit = { + val node = manifest.resolved(name) + assert( + node.package_url == expectedPackageUrl, + s"Wrong package_url for node $name:\nfound: ${node.package_url}\nexpected:$expectedPackageUrl" + ) +} diff --git a/src/sbt-test/dependency-graph/ivy-manifest/project/plugins.sbt b/src/sbt-test/dependency-manifest/package-urls/project/plugins.sbt similarity index 100% rename from src/sbt-test/dependency-graph/ivy-manifest/project/plugins.sbt rename to src/sbt-test/dependency-manifest/package-urls/project/plugins.sbt diff --git a/src/sbt-test/dependency-graph/scala3-manifest/test b/src/sbt-test/dependency-manifest/package-urls/test similarity index 100% rename from src/sbt-test/dependency-graph/scala3-manifest/test rename to src/sbt-test/dependency-manifest/package-urls/test diff --git a/src/sbt-test/dependency-graph/scala3-manifest/build.sbt b/src/sbt-test/dependency-manifest/scala3-manifest/build.sbt similarity index 100% rename from src/sbt-test/dependency-graph/scala3-manifest/build.sbt rename to src/sbt-test/dependency-manifest/scala3-manifest/build.sbt diff --git a/src/sbt-test/dependency-graph/scala3-manifest/project/plugins.sbt b/src/sbt-test/dependency-manifest/scala3-manifest/project/plugins.sbt similarity index 100% rename from src/sbt-test/dependency-graph/scala3-manifest/project/plugins.sbt rename to src/sbt-test/dependency-manifest/scala3-manifest/project/plugins.sbt diff --git a/src/sbt-test/dependency-manifest/scala3-manifest/test b/src/sbt-test/dependency-manifest/scala3-manifest/test new file mode 100644 index 0000000..929b7eb --- /dev/null +++ b/src/sbt-test/dependency-manifest/scala3-manifest/test @@ -0,0 +1 @@ +> p1 / checkManifest diff --git a/src/sbt-test/dependency-graph/ci-submit/build.sbt b/src/sbt-test/submit-snapshot/ci-submit/build.sbt similarity index 78% rename from src/sbt-test/dependency-graph/ci-submit/build.sbt rename to src/sbt-test/submit-snapshot/ci-submit/build.sbt index 84cc0d5..26f4ef1 100644 --- a/src/sbt-test/dependency-graph/ci-submit/build.sbt +++ b/src/sbt-test/submit-snapshot/ci-submit/build.sbt @@ -7,6 +7,8 @@ inThisBuild( Seq( organization := "ch.epfl.scala", version := "1.2.0-SNAPSHOT", + // use Ivy because Coursier does not allow several classifier on the same dep + useCoursier := false, scalaVersion := "2.13.8" ) ) @@ -19,6 +21,13 @@ val a = project "2.12.16", "2.13.8", "3.1.3" + ), + libraryDependencies ++= Seq( + // a dependency with many classifiers + ("org.lwjgl" % "lwjgl" % "3.3.1") + .classifier("natives-windows") + .classifier("natives-linux") + .classifier("natives-macos") ) ) diff --git a/src/sbt-test/submit-snapshot/ci-submit/project/plugins.sbt b/src/sbt-test/submit-snapshot/ci-submit/project/plugins.sbt new file mode 100644 index 0000000..f4c5d73 --- /dev/null +++ b/src/sbt-test/submit-snapshot/ci-submit/project/plugins.sbt @@ -0,0 +1,3 @@ +val pluginVersion = sys.props("plugin.version") + +addSbtPlugin("ch.epfl.scala" % "sbt-github-dependency-graph" % pluginVersion) diff --git a/src/sbt-test/dependency-graph/ci-submit/test b/src/sbt-test/submit-snapshot/ci-submit/test similarity index 100% rename from src/sbt-test/dependency-graph/ci-submit/test rename to src/sbt-test/submit-snapshot/ci-submit/test