Skip to content

Derive SDKMAN test versions from the candidate list - #1188

Merged
timtebeek merged 1 commit into
mainfrom
tim/sdkman-test-derive-version
Aug 10, 2026
Merged

Derive SDKMAN test versions from the candidate list#1188
timtebeek merged 1 commit into
mainfrom
tim/sdkman-test-derive-version

Conversation

@timtebeek

@timtebeek timtebeek commented Aug 10, 2026

Copy link
Copy Markdown
Member

What's changed?

UpdateSdkManTest.updateVersionExact and UpdateSdkManTest.updateDistributionOnly now read a currently available patch version from sdkman-java.csv, rather than hardcoding one.

What's your motivation?

The nightly SDKMAN! candidates refresh (96e8647d) rolled 17.0.19 to 17.0.20 and 11.0.31 to 11.0.32, turning CI red on every open pull request:

UpdateSdkManTest > updateVersionExact() FAILED
    java.lang.AssertionError: Recipe was expected to make a change but made no changes.
UpdateSdkManTest > updateDistributionOnly() FAILED
    java.lang.AssertionError: Recipe was expected to make a change but made no changes.

Anything in particular you'd like reviewers to focus on?

  • Avoid hardcoded patch version in UpdateSdkManTest #1183 fixed the same class of breakage by asserting on the version basis instead of the exact patch version. That is not sufficient here: these two tests pin a patch version on their input as well as their expectation. UpdateSdkMan builds Pattern.compile("^" + ver + "[.-].*") from that input, so once the candidate list drops 11.0.31, nothing matches, idealCandidate is null and the recipe makes no change at all — a relaxed assertion still fails. I verified that locally before taking this approach.

Reading the version from the candidate list keeps both tests honest about what they cover (updateVersionExact still passes a fully qualified version; updateDistributionOnly still changes only the distribution) without re-pinning to values that expire.

Verified green against both the pre-refresh candidate list (17.0.19 / 11.0.31) and the current one (17.0.20 / 11.0.32).

The nightly SDKMAN! candidates refresh rolled 17.0.19 to 17.0.20 and
11.0.31 to 11.0.32, which broke `updateVersionExact` and
`updateDistributionOnly` on every open pull request.

Unlike #1183 these two tests pin a patch version on their input as well
as their expectation, so asserting on the version basis alone is not
enough; the recipe finds no candidate to upgrade to and makes no change
at all. Read a currently available patch version from the same candidate
list the recipe resolves against instead.
@github-project-automation github-project-automation Bot moved this to In Progress in OpenRewrite Aug 10, 2026
@timtebeek
timtebeek merged commit ccfa7b0 into main Aug 10, 2026
1 check passed
@timtebeek
timtebeek deleted the tim/sdkman-test-derive-version branch August 10, 2026 12:40
@github-project-automation github-project-automation Bot moved this from In Progress to Done in OpenRewrite Aug 10, 2026
mergify Bot added a commit to robfrank/linklift that referenced this pull request Aug 20, 2026
…41.0 to 3.42.0 [skip ci]

Bumps [org.openrewrite.recipe:rewrite-migrate-java](https://github.com/openrewrite/rewrite-migrate-java) from 3.41.0 to 3.42.0.
Release notes

*Sourced from [org.openrewrite.recipe:rewrite-migrate-java's releases](https://github.com/openrewrite/rewrite-migrate-java/releases).*

> 3.42.0
> ------
>
> What's Changed
> --------------
>
> * Adopt upstream XML trailing-comment formatting by [`@​timtebeek`](https://github.com/timtebeek) in [openrewrite/rewrite-migrate-java#1180](https://redirect.github.com/openrewrite/rewrite-migrate-java/pull/1180)
> * Add mapping for CheckForNull to JSpecify annotation by [`@​zbynek`](https://github.com/zbynek) in [openrewrite/rewrite-migrate-java#1179](https://redirect.github.com/openrewrite/rewrite-migrate-java/pull/1179)
> * Skip `UseSetOf`/`UseListOf` for `HashSet`/`ArrayList` subclasses by [`@​timtebeek`](https://github.com/timtebeek) in [openrewrite/rewrite-migrate-java#1182](https://redirect.github.com/openrewrite/rewrite-migrate-java/pull/1182)
> * Avoid hardcoded patch version in UpdateSdkManTest by [`@​timtebeek`](https://github.com/timtebeek) in [openrewrite/rewrite-migrate-java#1183](https://redirect.github.com/openrewrite/rewrite-migrate-java/pull/1183)
> * Only add the Mockito surefire agent configuration when asked, and keep it minimal by [`@​timtebeek`](https://github.com/timtebeek) in [openrewrite/rewrite-migrate-java#1184](https://redirect.github.com/openrewrite/rewrite-migrate-java/pull/1184)
> * Make subpackage recursion explicit in the Jackson JAX-RS JSON rename by [`@​timtebeek`](https://github.com/timtebeek) in [openrewrite/rewrite-migrate-java#1185](https://redirect.github.com/openrewrite/rewrite-migrate-java/pull/1185)
> * Add the Mockito agent properties goal in its own execution by [`@​MBoegers`](https://github.com/MBoegers) in [openrewrite/rewrite-migrate-java#1186](https://redirect.github.com/openrewrite/rewrite-migrate-java/pull/1186)
> * Derive SDKMAN test versions from the candidate list by [`@​timtebeek`](https://github.com/timtebeek) in [openrewrite/rewrite-migrate-java#1188](https://redirect.github.com/openrewrite/rewrite-migrate-java/pull/1188)
> * Do not apply `var` when the generic return type needs the declared type by [`@​jevanlingen`](https://github.com/jevanlingen) in [openrewrite/rewrite-migrate-java#1187](https://redirect.github.com/openrewrite/rewrite-migrate-java/pull/1187)
> * Cover legacy Bouncy Castle artifacts and their API changes by [`@​timtebeek`](https://github.com/timtebeek) in [openrewrite/rewrite-migrate-java#1189](https://redirect.github.com/openrewrite/rewrite-migrate-java/pull/1189)
> * Add jakarta.validation-api dependency when migrating com.sun.istack.NotNull by [`@​steve-aom-elliott`](https://github.com/steve-aom-elliott) in [openrewrite/rewrite-migrate-java#1190](https://redirect.github.com/openrewrite/rewrite-migrate-java/pull/1190)
>
> New Contributors
> ----------------
>
> * [`@​zbynek`](https://github.com/zbynek) made their first contribution in [openrewrite/rewrite-migrate-java#1179](https://redirect.github.com/openrewrite/rewrite-migrate-java/pull/1179)
>
> **Full Changelog**: <openrewrite/rewrite-migrate-java@v3.41.0...v3.42.0>


Commits

* [`1238ceb`](openrewrite/rewrite-migrate-java@1238ceb) OpenRewrite recipe best practices
* [`01d0fe8`](openrewrite/rewrite-migrate-java@01d0fe8) Add `jakarta.validation-api` dependency when migrating `com.sun.istack.NotNul...
* [`33354b5`](openrewrite/rewrite-migrate-java@33354b5) Cover legacy Bouncy Castle artifacts and their API changes ([#1189](https://redirect.github.com/openrewrite/rewrite-migrate-java/issues/1189))
* [`6c648a5`](openrewrite/rewrite-migrate-java@6c648a5) Update Gradle wrapper to 9.7.0
* [`7099ad3`](openrewrite/rewrite-migrate-java@7099ad3) Do not apply `var` when the generic return type needs the declared type ([#1187](https://redirect.github.com/openrewrite/rewrite-migrate-java/issues/1187))
* [`ccfa7b0`](openrewrite/rewrite-migrate-java@ccfa7b0) Derive SDKMAN test versions from the candidate list ([#1188](https://redirect.github.com/openrewrite/rewrite-migrate-java/issues/1188))
* [`96e8647`](openrewrite/rewrite-migrate-java@96e8647) [Auto] SDKMAN! Java candidates as of 2026-08-10T1102
* [`26f898e`](openrewrite/rewrite-migrate-java@26f898e) Add the Mockito agent properties goal in its own execution ([#1186](https://redirect.github.com/openrewrite/rewrite-migrate-java/issues/1186))
* [`d82dd47`](openrewrite/rewrite-migrate-java@d82dd47) OpenRewrite recipe best practices
* [`55f2e93`](openrewrite/rewrite-migrate-java@55f2e93) Make subpackage recursion explicit in the Jackson JAX-RS JSON rename ([#1185](https://redirect.github.com/openrewrite/rewrite-migrate-java/issues/1185))
* Additional commits viewable in [compare view](openrewrite/rewrite-migrate-java@v3.41.0...v3.42.0)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

Archived in project

Development

Successfully merging this pull request may close these issues.

1 participant