bazelbuild / rules_scala

Scala rules for Bazel
Apache License 2.0
360 stars 273 forks source link

coverage creates the offline.jar into same directory for tests with different directories #1528

Open nlou9 opened 9 months ago

nlou9 commented 9 months ago

we have two tests core/src/test/scala/integration/kafka/api/MetricsTest.scala core/src/test/scala/unit/kafka/metrics/MetricsTest.scala

We have one BUILD.bazel file under the root of core and scala_library will create two targets for this two files //core:src/test/scala/integration/kafka/api/MetricsTest_lib, //core:src/test/scala/unit/kafka/metrics/MetricsTest_lib.

It seems bazel coverage takes the BUILD.bazel file as root to create the .jar for both tests to the same directory core/MetricsTest_lib-offline.jar. That causes conflict.

I checked the coverage code, it seems related to this line. wonder why don't we use the full path here.

https://github.com/bazelbuild/rules_scala/blob/f9381414068466b9c74ff7681d204e1eb19c7f80/scala/private/phases/phase_coverage.bzl#L47

 bazel coverage //core:all

ERROR: file 'core/MetricsTest_lib-offline.jar' is generated by these conflicting actions:
Label: //core:src/test/scala/integration/kafka/api/MetricsTest_lib, //core:src/test/scala/unit/kafka/metrics/MetricsTest_lib
RuleClass: scala_library rule
JavaActionClass: class com.google.devtools.build.lib.analysis.actions.StarlarkAction
Configuration: 431c6ed08bc0b6e39a8f21066ea2b734ef6de2238f4c0230711b0d2342811a3d
Mnemonic: JacocoInstrumenter
Action key: 632a747906afd7af6e359f859b01779a0ec638a0b658c82157cf7be4d63abf89, ddfc66e8613b8842448c9cc42558e68ed5b78ed803ff5acc113890398ca9ba64
Progress message: JacocoInstrumenter core/MetricsTest_lib-offline.jar
Action describeKey: JacocoInstrumenter core/MetricsTest_lib-offline.jar
  Argument: bazel-out/darwin-opt-exec-2B5CBBC6/bin/external/io_bazel_rules_scala/src/java/io/bazel/rulesscala/coverage/instrumenter/instrumenter
  Argument: bazel-out/darwin-fastbuild/bin/core/src/test/scala/integration/kafka/api/MetricsTest_lib.jar
  Argument: bazel-out/darwin-fastbuild/bin/core/MetricsTest_lib-offline.jar
  Argument: core/src/test/scala/integration/kafka/api/MetricsTest.scala
, JacocoInstrumenter core/MetricsTest_lib-offline.jar
  Argument: bazel-out/darwin-opt-exec-2B5CBBC6/bin/external/io_bazel_rules_scala/src/java/io/bazel/rulesscala/coverage/instrumenter/instrumenter
  Argument: bazel-out/darwin-fastbuild/bin/core/src/test/scala/unit/kafka/metrics/MetricsTest_lib.jar
  Argument: bazel-out/darwin-fastbuild/bin/core/MetricsTest_lib-offline.jar
  Argument: core/src/test/scala/unit/kafka/metrics/MetricsTest.scala

PrimaryInput: File:[[<execution_root>]bazel-out/darwin-fastbuild/bin]core/src/test/scala/integration/kafka/api/MetricsTest_lib.jar, File:[[<execution_root>]bazel-out/darwin-fastbuild/bin]core/src/test/scala/unit/kafka/metrics/MetricsTest_lib.jar
PrimaryOutput: File:[[<execution_root>]bazel-out/darwin-fastbuild/bin]core/MetricsTest_lib-offline.jar
ERROR: com.google.devtools.build.lib.actions.MutableActionGraph$ActionConflictException: for core/MetricsTest_lib-offline.jar, previous action: action 'JacocoInstrumenter core/MetricsTest_lib-offline.jar', attempted action: action 'JacocoInstrumenter core/MetricsTest_lib-offline.jar'
INFO: Elapsed time: 6.896s
INFO: 0 processes.
ERROR: Couldn't start the build. Unable to run tests
INFO: Build Event Protocol files produced successfully.
FAILED: Build did NOT complete successfully (605 packages loaded, 11251 targets configured)
Error: bazel exited with exit code: 1