Skip to content

Commit cf3e513

Browse files
committed
fix: support JBP_CONFIG_OPEN_JDK_JRE environment variable
The buildpack was ignoring JBP_CONFIG_OPEN_JDK_JRE (documented in README) because it was only looking for JBP_CONFIG_OPENJDK (derived from internal name "openjdk"). This caused version configurations like {jre: {version: 21.+}} to be silently ignored, falling back to the default Java 17. Root cause: - Code constructed env var: JBP_CONFIG_OPENJDK - Users/docs specified: JBP_CONFIG_OPEN_JDK_JRE - Mismatch → env var not found → default version used Fix: - Check both JBP_CONFIG_OPENJDK and JBP_CONFIG_OPEN_JDK_JRE for OpenJDK - Maintains backward compatibility (both names work) - Add debug logging to trace version resolution - Add comprehensive unit tests for both env var names Closes: Issue where JBP_CONFIG_OPEN_JDK_JRE was not respected
1 parent 39a12b2 commit cf3e513

2 files changed

Lines changed: 64 additions & 1 deletion

File tree

src/java/jres/jre.go

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -213,23 +213,42 @@ func GetJREVersion(ctx *common.Context, jreName string) (libbuildpack.Dependency
213213
}
214214

215215
// Check for legacy JBP_CONFIG_<JRE_NAME> environment variable
216+
// For OpenJDK, support both JBP_CONFIG_OPENJDK and JBP_CONFIG_OPEN_JDK_JRE for backward compatibility
216217
envKey := fmt.Sprintf("JBP_CONFIG_%s", strings.ToUpper(strings.ReplaceAll(jreName, "-", "_")))
217-
if envVal := os.Getenv(envKey); envVal != "" {
218+
envVal := os.Getenv(envKey)
219+
220+
// Special case for OpenJDK: also check JBP_CONFIG_OPEN_JDK_JRE (documented name)
221+
if envVal == "" && jreName == "openjdk" {
222+
envVal = os.Getenv("JBP_CONFIG_OPEN_JDK_JRE")
223+
if envVal != "" {
224+
envKey = "JBP_CONFIG_OPEN_JDK_JRE"
225+
}
226+
}
227+
228+
if envVal != "" {
229+
ctx.Log.Debug("Found %s='%s'", envKey, envVal)
230+
218231
versionPattern := parseJBPConfigVersion(envVal)
219232
if versionPattern == "" {
220233
return libbuildpack.Dependency{}, fmt.Errorf("could not parse version from %s='%s'", envKey, envVal)
221234
}
235+
ctx.Log.Debug("Parsed version pattern from %s: '%s'", envKey, versionPattern)
222236

223237
normalizedPattern := normalizeVersionPattern(versionPattern)
238+
ctx.Log.Debug("Normalized pattern: '%s' -> '%s'", versionPattern, normalizedPattern)
239+
224240
availableVersions := ctx.Manifest.AllDependencyVersions(jreName)
225241
if len(availableVersions) == 0 {
226242
return libbuildpack.Dependency{}, fmt.Errorf("no versions of %s found in manifest", jreName)
227243
}
244+
ctx.Log.Debug("Available versions for %s: %v", jreName, availableVersions)
228245

229246
matchedVersion, err := libbuildpack.FindMatchingVersion(normalizedPattern, availableVersions)
230247
if err != nil {
248+
ctx.Log.Debug("FindMatchingVersion failed: %s", err.Error())
231249
return libbuildpack.Dependency{}, fmt.Errorf("no version of %s matching '%s' found in manifest. Available versions: %v", jreName, versionPattern, availableVersions)
232250
}
251+
ctx.Log.Debug("Matched version: %s", matchedVersion)
233252

234253
return libbuildpack.Dependency{Name: jreName, Version: matchedVersion}, nil
235254
}

src/java/jres/jre_test.go

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -299,6 +299,50 @@ dependencies:
299299
Expect(err.Error()).To(ContainSubstring("could not parse version"))
300300
})
301301
})
302+
303+
Context("with JBP_CONFIG_OPEN_JDK_JRE", func() {
304+
AfterEach(func() {
305+
os.Unsetenv("JBP_CONFIG_OPEN_JDK_JRE")
306+
})
307+
308+
It("resolves version 21.+ pattern", func() {
309+
os.Setenv("JBP_CONFIG_OPEN_JDK_JRE", "{jre: {version: 21.+}}")
310+
dep, err := jres.GetJREVersion(ctx, "openjdk")
311+
Expect(err).NotTo(HaveOccurred())
312+
Expect(dep.Name).To(Equal("openjdk"))
313+
Expect(dep.Version).To(Equal("21.0.5"))
314+
})
315+
316+
It("resolves version 17.+ pattern", func() {
317+
os.Setenv("JBP_CONFIG_OPEN_JDK_JRE", "{jre: {version: 17.+}}")
318+
dep, err := jres.GetJREVersion(ctx, "openjdk")
319+
Expect(err).NotTo(HaveOccurred())
320+
Expect(dep.Name).To(Equal("openjdk"))
321+
Expect(dep.Version).To(Equal("17.0.13"))
322+
})
323+
324+
It("resolves version 11.+ pattern", func() {
325+
os.Setenv("JBP_CONFIG_OPEN_JDK_JRE", "{jre: {version: 11.+}}")
326+
dep, err := jres.GetJREVersion(ctx, "openjdk")
327+
Expect(err).NotTo(HaveOccurred())
328+
Expect(dep.Name).To(Equal("openjdk"))
329+
Expect(dep.Version).To(Equal("11.0.25"))
330+
})
331+
332+
It("fails when requested version does not exist", func() {
333+
os.Setenv("JBP_CONFIG_OPEN_JDK_JRE", "{jre: {version: 99.+}}")
334+
_, err := jres.GetJREVersion(ctx, "openjdk")
335+
Expect(err).To(HaveOccurred())
336+
Expect(err.Error()).To(ContainSubstring("no version of openjdk matching"))
337+
})
338+
339+
It("prefers JBP_CONFIG_OPEN_JDK_JRE over default when both are unset", func() {
340+
os.Setenv("JBP_CONFIG_OPEN_JDK_JRE", "{jre: {version: 21.+}}")
341+
dep, err := jres.GetJREVersion(ctx, "openjdk")
342+
Expect(err).NotTo(HaveOccurred())
343+
Expect(dep.Version).To(Equal("21.0.5"))
344+
})
345+
})
302346
})
303347

304348
Describe("DetermineJavaVersion", func() {

0 commit comments

Comments
 (0)