bazel-distribution icon indicating copy to clipboard operation
bazel-distribution copied to clipboard

Recursive assembly rules overwrite correct version numbers

Open flyingsilverfin opened this issue 2 years ago • 0 comments

Problem to Solve

Assembly rules often depend on other assembly rules - for example a targz assembly may depend on building JARs to package internally. Most assembly rules take a global constant called version and use it to append the version number to the distribution file names.

However, this can lead to the following situation:

output-2.0.0.tar.gz
 - lib/dependency-main-2.0.0.jar

where the dependency-main comes from a different repository that is on a different version number, let's say 1.0.0. In this case, we actually write an incorrect version number.

The general problem is that the version number is set globally in the root workspace and used for all build targets triggered.

Current Workaround

The best we can do is not to use a verison number at all.

Proposed Solution

Require extension to bazel:

  • Allow hierarchical workspaces to be loaded, each with their own constants & definitions

or

  • Allow defining a version number contextualised to each target (eg. rule instance), rather than each rule.

The latter would require a very verbose set of definitions at the root target, such as @dependency//:main.version=1.0.0, doing this for each target in the build tree requiring a version number.

flyingsilverfin avatar Nov 11 '22 15:11 flyingsilverfin