Skip to content

Commit 2be5f56

Browse files
authored
Merge pull request #1358 from cloudfoundry/fix_1338
Fix pointing exact version with BP_JAVA_VERSION
2 parents 336de41 + 37a515d commit 2be5f56

2 files changed

Lines changed: 61 additions & 8 deletions

File tree

src/java/jres/jre.go

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -310,16 +310,37 @@ func GetJREVersion(ctx *common.Context, jreName string) (libbuildpack.Dependency
310310
return dep, nil
311311
}
312312

313+
var exactVersionWithBuildRegex = regexp.MustCompile(`^\d+\.\d+\.\d+\+\d+$`)
314+
var exactVersionRegex = regexp.MustCompile(`^\d+\.\d+\.\d+$`)
315+
313316
func normalizeVersionPattern(version string) string {
317+
if strings.Contains(version, "*") {
318+
return version
319+
}
320+
// Exact version with build metadata (e.g. "17.0.19+11") — pass through as-is.
321+
// Must be checked before the general "+" replacement below.
322+
if isValidVersionWithBuild(version) {
323+
return version
324+
}
314325
if strings.Contains(version, "+") {
315326
return strings.ReplaceAll(version, "+", "*")
316327
}
317-
if strings.Contains(version, "*") {
328+
// Exact patch version (e.g. "17.0.13") — already fully specified, don't append ".*"
329+
// which would produce an unmatchable pattern like "17.0.13.*".
330+
if isValidVersion(version) {
318331
return version
319332
}
320333
return version + ".*"
321334
}
322335

336+
func isValidVersion(version string) bool {
337+
return exactVersionRegex.MatchString(version)
338+
}
339+
340+
func isValidVersionWithBuild(version string) bool {
341+
return exactVersionWithBuildRegex.MatchString(version)
342+
}
343+
323344
func parseJBPConfigVersion(configValue string) string {
324345
re := regexp.MustCompile(`version:\s*['"]?([0-9]+[0-9.*+]*)['"]?`)
325346
matches := re.FindStringSubmatch(configValue)

src/java/jres/jre_test.go

Lines changed: 39 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -177,11 +177,11 @@ dependencies:
177177
cf_stacks:
178178
- cflinuxfs4
179179
- name: openjdk
180-
version: 17.0.13
181-
uri: https://example.com/openjdk-17.tar.gz
182-
sha256: 2222222222222222222222222222222222222222222222222222222222222222
180+
version: 17.0.19+11
181+
uri: https://example.com/openjdk-17.0.19+11.tar.gz
182+
sha256: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
183183
cf_stacks:
184-
- cflinuxfs4
184+
- cflinuxfs4
185185
- name: openjdk
186186
version: 21.0.5
187187
uri: https://example.com/openjdk-21.tar.gz
@@ -295,7 +295,7 @@ dependencies:
295295
dep, err := jres.GetJREVersion(ctx, "openjdk")
296296
Expect(err).NotTo(HaveOccurred())
297297
Expect(dep.Name).To(Equal("openjdk"))
298-
Expect(dep.Version).To(Equal("17.0.13"))
298+
Expect(dep.Version).To(Equal("17.0.19+11"))
299299
})
300300

301301
It("resolves major version 21", func() {
@@ -311,7 +311,31 @@ dependencies:
311311
dep, err := jres.GetJREVersion(ctx, "openjdk")
312312
Expect(err).NotTo(HaveOccurred())
313313
Expect(dep.Name).To(Equal("openjdk"))
314-
Expect(dep.Version).To(Equal("17.0.13"))
314+
Expect(dep.Version).To(Equal("17.0.19+11"))
315+
})
316+
317+
It("handles version patterns with wildcards", func() {
318+
os.Setenv("BP_JAVA_VERSION", "17.+")
319+
dep, err := jres.GetJREVersion(ctx, "openjdk")
320+
Expect(err).NotTo(HaveOccurred())
321+
Expect(dep.Name).To(Equal("openjdk"))
322+
Expect(dep.Version).To(Equal("17.0.19+11"))
323+
})
324+
325+
It("resolves exact patch version", func() {
326+
os.Setenv("BP_JAVA_VERSION", "17.0.19")
327+
dep, err := jres.GetJREVersion(ctx, "openjdk")
328+
Expect(err).NotTo(HaveOccurred())
329+
Expect(dep.Name).To(Equal("openjdk"))
330+
Expect(dep.Version).To(Equal("17.0.19+11"))
331+
})
332+
333+
It("resolves exact version with build metadata (X.Y.Z+W format)", func() {
334+
os.Setenv("BP_JAVA_VERSION", "17.0.19+11")
335+
dep, err := jres.GetJREVersion(ctx, "openjdk")
336+
Expect(err).NotTo(HaveOccurred())
337+
Expect(dep.Name).To(Equal("openjdk"))
338+
Expect(dep.Version).To(Equal("17.0.19+11"))
315339
})
316340
})
317341

@@ -370,7 +394,15 @@ dependencies:
370394
dep, err := jres.GetJREVersion(ctx, "openjdk")
371395
Expect(err).NotTo(HaveOccurred())
372396
Expect(dep.Name).To(Equal("openjdk"))
373-
Expect(dep.Version).To(Equal("17.0.13"))
397+
Expect(dep.Version).To(Equal("17.0.19+11"))
398+
})
399+
400+
It("resolves exact version 17.0.19+11 pattern", func() {
401+
os.Setenv("JBP_CONFIG_OPEN_JDK_JRE", "{jre: {version: 17.0.19+11}}")
402+
dep, err := jres.GetJREVersion(ctx, "openjdk")
403+
Expect(err).NotTo(HaveOccurred())
404+
Expect(dep.Name).To(Equal("openjdk"))
405+
Expect(dep.Version).To(Equal("17.0.19+11"))
374406
})
375407

376408
It("resolves version 11.+ pattern", func() {

0 commit comments

Comments
 (0)