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]