RoaringBitmap: Broken releases due(?) to broken maven setup (RoaringBitmapParent artifact)

I used to issue releases by going to the main RoaringBitmap repository and typing mvn release:clean && mvn release:prepare && mvn release:perform. Since PR https://github.com/RoaringBitmap/RoaringBitmap/pull/181 this no longer works. Sadly, CI does not check that releases are possible, so I did not catch the issue.

As I recall the point of the release was to move to a “classic maven project” described as follow:

Cannot we do a classic maven project by moving RoaringBitmap actual source to a specific submodule, and leaving all other submodules where they are?

Technically, I can issue the commands, but it does not generate an actual release and the result is a broken repository. I left the broken commits on purpose, so you can see the result…

https://github.com/RoaringBitmap/RoaringBitmap/commits/master

Note that to be able to do this in a sane way, I had to make a small change to the pom file so that jmh is excluded as a submodule by default, because otherwise, we run the full jmh unit test which takes 3 hours on my machine, and fails for an unclear reason (it looks like -DBITMAP_TYPES=ROARING_ONLY has no effect when doing mvn perform), with The forked VM terminated without saying properly goodbye.

Anyhow, the broken aspect of the release with mvn release:clean && mvn release:prepare && mvn release:perform has to do with the fact that this attempts to release an artifact RoaringBitmapParent. I am not sure what that is, and I am not sure that it is correct. Yet this seems to have been deliberate, see the pom file: https://github.com/RoaringBitmap/RoaringBitmap/blob/master/pom.xml#L5

To still be able to issue releases, I did a deploy instead from within the roaringbitmap subdirectory, hoping it would save us from RoaringBitmapParent artifact nonesense…

  cd roaringbitmap
  mvn versions:set -DnewVersion=0.6.53
  mvn clean deploy
  git commit -a
  git tag -a v0.6.53 -m "version 0.6.53"
  git push --tags
  # go to https://oss.sonatype.org/#nexus-search;quick~roaringbitmap and initial the release manually

Sadly, this result in something that is broken as well as you can see from a report on the mailing list:

I’m having some problems pulling the latest release from maven central via Leiningen:

[~/repos/streaming-lda] $ lein deps

Retrieving org/roaringbitmap/RoaringBitmap/0.6.53/RoaringBitmap-0.6.53.pom from central

Could not find artifact org.roaringbitmap:RoaringBitmapParent:pom:0.6.53 in central > (https://repo1.maven.org/maven2/)

This could be due to a typo in :dependencies or network issues.

You can see it’s looking for a artifact with “RoaringBitmapParent” in the name. Leiningen doesn’t do this when I try to pull down any other version, it just grabs the pom and jar having the usual names, like this: [~/repos/streaming-lda] $ lein deps Retrieving org/roaringbitmap/RoaringBitmap/0.6.49/RoaringBitmap-0.6.49.pom from central Retrieving org/roaringbitmap/RoaringBitmap/0.6.49/RoaringBitmap-0.6.49.jar from central
I can see from the history your pom file that this is some sort of intentional change. My maven knowledge is fairly low, but I’m suspicious that this is something Leiningen either doesn’t support requires some workaround for. Do you know anything more about this than I do?

Anyhow, it seems clear that either the maven project is broken or else, I am lacking the right release instructions.

I think that this is an urgent problem.

About this issue

  • Original URL
  • State: closed
  • Created 7 years ago
  • Comments: 33 (33 by maintainers)

Most upvoted comments

@Kineolyan

I don’t think he was serious. I am not considering Gradle. Someone would have to build a case for it and do the legwork.

I’ll add that tools like Maven is what turn people off to command line tools. You really, really want to go back and hide in an IDE. I’m a command-like guy and I cringe when I have to issue maven commands… because it is going to be slow and fragile… I mean… like us get serious… what is this -Darguments="-DskipTests" shit? And how does it differ from -Darguments="-Dmaven.test.skip"? It is just insane.

Fortunately, we don’t have to program using maven… most of the time.

Hello @lemire,

As pointed in my comment, I think I can easily tune something not to run tests during the deploy phase of the release process. It only add more elements to the poms. Regarding the release of RoaringBitmapParent, I am pretty sure but not certain that it must be released, because our dear RoaringBitmapParent marks it as its parent. If not present, all builds will fail for this pom cannot be downloaded. But again, as I did not deploy on a real Maven repository, I cannot be sure.

About @richardstartin proposal of migrating to Gradle, it is an option I consider for various projects. In our case, I am not sure it would change much. It is just the trendy tool wrt Maven.

Cheers

@richardstartin

would now be the wrong time to suggest Gradle?

(sounds of Daniel grinding his teeth)

Gradle? Ok…

https://gradle.org/maven-vs-gradle/

  • Maven provides a very rigid model that makes customization tedious and sometimes impossible
  • These and more performance features make Gradle at least twice as fast for nearly every scenario (100x faster for large builds using the build cache)
  • Gradle provides a modern CLI that has discoverability features like gradle tasks, as well as improved logging and command-line completion.
  • Gradle provides an interactive web-based UI for debugging and optimizing builds: build scans.
  • Maven has few, built-in dependency scopes, which forces awkward module architectures in common scenarios

I offer you this PR that should solve your issue. As stated in my comment, I kept the release of the parent pom, as it is not really a pain and acts as BOM for other projects and is needed for the code project. In a nutshell, the PR makes the historical command line works and restores the old tag name.

Cheers 😃