refreshVersions icon indicating copy to clipboard operation
refreshVersions copied to clipboard

`refreshVersionsCleanup` cleans up the wrong files

Open Vampire opened this issue 4 months ago • 0 comments

The refreshVersionsCleanup task cleans up different files than the refreshVersions task changed. For example it uses hard-coded File("gradle/libs.versions.toml") (just with the path from a constant) to clean up the version catalog file. But using the File constructor in Gradle logic is at best flaky, as is in almost any JVM program. The File constructor resolves relative paths relative to the current working directory. In a Gradle run this often is the root project directory, but this is not guaranteed and not always the case. It could also be the IDE installation directory, or the daemon log directory, .... The only case I'm aware of where File constructor with a relative path is a good idea is, when developing a commandline utility where the relative path is coming from a commandline argument as there you can usually safely assume that the path is menat realtive to the current working directory.

In my case I'm developing a custom convention plugin that also integrates this plugin. I added a functional test for refreshVersionsCleanup as I'm doing some tidying to work-around #661 and #663. Unfortunately, this then "cleaned up" the libs.versions.toml of the plugin project, not the one of the functional test SUT project as the current working directory obviously is not the one of the functional test SUT project.

Unfortunately, this is also not configurable on the refreshVersionsCleanup task, so there is no way to work-around this bug besides avoiding to use the task or disabling it to be on the safe side.


Other similar problematic places currently I have seen are:

  • Releasing.main.kts where you should use __FILE__.parentFile instead of File(".")
  • probably VersionsCatalogUpdaterTest#rulesDir
  • probably TestUtilsKt#testResources
  • probably ResourcesKt#testResources
  • probably ResourcesKt#mainResources
  • probably MigrationTest#Search for files that may contain dependency notations#expected
  • probably MigrationTest#testResources
  • probably ResourcesKt#mainResources
  • probably PluginsVersionKt#pluginsVersion
  • probably DependencyNotationsWebpageUpdateTest#update the list of dependency notations on the website#destination

Vampire avatar Sep 25 '24 17:09 Vampire