From e695cc4f3dbdd569053c7d82f279913d497eaab1 Mon Sep 17 00:00:00 2001 From: Adrien Piquerez Date: Tue, 5 Jul 2022 10:23:05 +0200 Subject: [PATCH] Fix formatting of pacakge url For dependencies with some classifiers --- .../scala/GithubDependencyGraphPlugin.scala | 16 ++++--- .../coursier-manifest/build.sbt | 0 .../coursier-manifest}/project/plugins.sbt | 0 .../coursier-manifest/test | 0 .../default-scala-manifest/build.sbt | 0 .../project/plugins.sbt | 0 .../default-scala-manifest/test | 0 .../ivy-manifest/build.sbt | 0 .../ivy-manifest}/project/plugins.sbt | 0 .../ivy-manifest/test | 0 .../package-urls/build.sbt | 47 +++++++++++++++++++ .../package-urls}/project/plugins.sbt | 0 .../package-urls}/test | 0 .../scala3-manifest/build.sbt | 0 .../scala3-manifest/project/plugins.sbt | 0 .../dependency-manifest/scala3-manifest/test | 1 + .../ci-submit/build.sbt | 9 ++++ .../ci-submit/project/plugins.sbt | 3 ++ .../ci-submit/test | 0 19 files changed, 70 insertions(+), 6 deletions(-) rename src/sbt-test/{dependency-graph => dependency-manifest}/coursier-manifest/build.sbt (100%) rename src/sbt-test/{dependency-graph/ci-submit => dependency-manifest/coursier-manifest}/project/plugins.sbt (100%) rename src/sbt-test/{dependency-graph => dependency-manifest}/coursier-manifest/test (100%) rename src/sbt-test/{dependency-graph => dependency-manifest}/default-scala-manifest/build.sbt (100%) rename src/sbt-test/{dependency-graph/coursier-manifest => dependency-manifest/default-scala-manifest}/project/plugins.sbt (100%) rename src/sbt-test/{dependency-graph => dependency-manifest}/default-scala-manifest/test (100%) rename src/sbt-test/{dependency-graph => dependency-manifest}/ivy-manifest/build.sbt (100%) rename src/sbt-test/{dependency-graph/default-scala-manifest => dependency-manifest/ivy-manifest}/project/plugins.sbt (100%) rename src/sbt-test/{dependency-graph => dependency-manifest}/ivy-manifest/test (100%) create mode 100644 src/sbt-test/dependency-manifest/package-urls/build.sbt rename src/sbt-test/{dependency-graph/ivy-manifest => dependency-manifest/package-urls}/project/plugins.sbt (100%) rename src/sbt-test/{dependency-graph/scala3-manifest => dependency-manifest/package-urls}/test (100%) rename src/sbt-test/{dependency-graph => dependency-manifest}/scala3-manifest/build.sbt (100%) rename src/sbt-test/{dependency-graph => dependency-manifest}/scala3-manifest/project/plugins.sbt (100%) create mode 100644 src/sbt-test/dependency-manifest/scala3-manifest/test rename src/sbt-test/{dependency-graph => submit-snapshot}/ci-submit/build.sbt (78%) create mode 100644 src/sbt-test/submit-snapshot/ci-submit/project/plugins.sbt rename src/sbt-test/{dependency-graph => submit-snapshot}/ci-submit/test (100%) 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