This is an automated email from the ASF dual-hosted git repository.

pjfanning pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/pekko-grpc.git


The following commit(s) were added to refs/heads/main by this push:
     new 21ec5c8c fix: Avoid duplicate gRPC resource directories in sbt builds 
(#895)
21ec5c8c is described below

commit 21ec5c8c5244015e1d1f5a0cb7953e116d0f0b8f
Author: Matthias Kurz <[email protected]>
AuthorDate: Wed Sep 23 16:50:04 2026 +0200

    fix: Avoid duplicate gRPC resource directories in sbt builds (#895)
    
    * test: Detect duplicate gRPC resource directories in sbt 2
    
    Motivation:
    The gRPC plugin duplicates resource directories, which can cause downstream 
packaging to fail.
    
    Modification:
    Extend the existing sbt 2 scripted fixture to assert unique Compile and 
Test resource directories and package its JAR.
    
    Result:
    The assertion fails against the unfixed plugin with each resource directory 
listed twice.
    
    Tests:
    - sbt --batch '++3.8.4' 'sbt-plugin / scripted 
scala3/01-basic-client-server' (expected failure: duplicate directories)
    - scalafmt --test 
sbt-plugin/src/sbt-test/scala3/01-basic-client-server/build.sbt (passed)
    
    References:
    None - reproduces the Play gRPC resource-packaging regression.
    
    * fix: Avoid duplicate gRPC resource directories in sbt builds
    
    Motivation:
    The plugin appends sbt-protoc resource paths even when sbt already lists 
them. Downstream packaging can then encounter duplicate resources.
    
    Modification:
    Deduplicate the combined resource directories in the existing Compile and 
Test plugin settings while retaining custom sbt-protoc paths.
    
    Result:
    Both configurations expose each resource directory once, without changing 
the set of directories.
    
    Tests:
    - sbt scripted scala3/01-basic-client-server on sbt 2.0.0: passed.
    - sbt scripted gen-scala-server/01-gen-basic-server on sbt 1.12.15: passed.
    - sbt 2.1.0-M2 checkResourceDirectories and Compile/packageBin: passed.
    - sbt checkCodeStyle: passed.
    - sbt validatePullRequest: unavailable; this build does not define the 
command.
    - A combined sbt 2.1.0-M2 test/check/package run passed test and check, 
then exited with a Pekko classloader LinkageError; check/package passed 
separately.
    
    References:
    None - fixes the Play gRPC duplicate-resource packaging regression.
---
 .../main/scala/org/apache/pekko/grpc/sbt/PekkoGrpcPlugin.scala |  3 ++-
 .../src/sbt-test/scala3/01-basic-client-server/build.sbt       | 10 ++++++++++
 sbt-plugin/src/sbt-test/scala3/01-basic-client-server/test     |  2 ++
 3 files changed, 14 insertions(+), 1 deletion(-)

diff --git 
a/sbt-plugin/src/main/scala/org/apache/pekko/grpc/sbt/PekkoGrpcPlugin.scala 
b/sbt-plugin/src/main/scala/org/apache/pekko/grpc/sbt/PekkoGrpcPlugin.scala
index 754a40c6..ba708fb3 100644
--- a/sbt-plugin/src/main/scala/org/apache/pekko/grpc/sbt/PekkoGrpcPlugin.scala
+++ b/sbt-plugin/src/main/scala/org/apache/pekko/grpc/sbt/PekkoGrpcPlugin.scala
@@ -132,7 +132,8 @@ object PekkoGrpcPlugin extends AutoPlugin {
               else (mapping :: soFar, seen + path)
           }._1.reverse
         },
-        unmanagedResourceDirectories ++= (PB.recompile / 
unmanagedResourceDirectories).value,
+        unmanagedResourceDirectories :=
+          (unmanagedResourceDirectories.value ++ (PB.recompile / 
unmanagedResourceDirectories).value).distinct,
         Defaults.ConfigZero / watchSources ++= Def.uncached {
           (PB.recompile / sources).value.map(f => WatchSource(f))
         },
diff --git a/sbt-plugin/src/sbt-test/scala3/01-basic-client-server/build.sbt 
b/sbt-plugin/src/sbt-test/scala3/01-basic-client-server/build.sbt
index b4411f23..82df344e 100644
--- a/sbt-plugin/src/sbt-test/scala3/01-basic-client-server/build.sbt
+++ b/sbt-plugin/src/sbt-test/scala3/01-basic-client-server/build.sbt
@@ -19,5 +19,15 @@ scalacOptions ++= Seq(
 
 enablePlugins(PekkoGrpcPlugin)
 
+lazy val checkResourceDirectories = taskKey[Unit]("Check that resource 
directories are unique")
+
+checkResourceDirectories := {
+  val compileDirectories = (Compile / unmanagedResourceDirectories).value
+  val testDirectories = (Test / unmanagedResourceDirectories).value
+  assert(compileDirectories == compileDirectories.distinct,
+    s"Duplicate Compile resource directories: $compileDirectories")
+  assert(testDirectories == testDirectories.distinct, s"Duplicate Test 
resource directories: $testDirectories")
+}
+
 libraryDependencies ++= Seq(
   "org.scalatest" %% "scalatest" % "3.2.20" % Test)
diff --git a/sbt-plugin/src/sbt-test/scala3/01-basic-client-server/test 
b/sbt-plugin/src/sbt-test/scala3/01-basic-client-server/test
index dfffb838..d34d7cba 100644
--- a/sbt-plugin/src/sbt-test/scala3/01-basic-client-server/test
+++ b/sbt-plugin/src/sbt-test/scala3/01-basic-client-server/test
@@ -1 +1,3 @@
 > test
+> checkResourceDirectories
+> Compile / packageBin


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to