Skip to content

Commit c0ff9a0

Browse files
committed
fix(gradle): bundle info
1 parent 0649d37 commit c0ff9a0

File tree

3 files changed

+103
-82
lines changed

3 files changed

+103
-82
lines changed

module/gradle/bundle/bundle.go

Lines changed: 100 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,100 @@
1+
package bundle
2+
3+
import (
4+
"github.com/Masterminds/semver"
5+
"github.com/samber/lo"
6+
"golang.org/x/exp/slices"
7+
"os"
8+
"path/filepath"
9+
"strings"
10+
"sync"
11+
)
12+
13+
type Item struct {
14+
// Version
15+
Version *semver.Version
16+
// Path
17+
Path string
18+
}
19+
20+
var once sync.Once
21+
var list []Item
22+
23+
const defaultGradlePath = "/opt/gradle"
24+
25+
func List() []Item {
26+
once.Do(func() {
27+
dir, e := os.ReadDir(defaultGradlePath)
28+
if e != nil {
29+
return
30+
}
31+
for _, it := range dir {
32+
if !it.IsDir() {
33+
continue
34+
}
35+
var name = it.Name()
36+
ver, e := semver.NewVersion(strings.TrimPrefix(name, "gradle-"))
37+
if e != nil {
38+
continue
39+
}
40+
var item = Item{Version: ver, Path: filepath.Join(defaultGradlePath, name)}
41+
list = append(list, item)
42+
}
43+
slices.SortFunc(list, func(a, b Item) int { return a.Version.Compare(b.Version) })
44+
})
45+
var _list = make([]Item, len(list))
46+
copy(_list, list)
47+
return _list
48+
}
49+
50+
func FindOkVersion(gradleVersion string) (selectedGradleBinPath, selectedJavaHome string) {
51+
gradleParsedVersion, e := semver.NewVersion(gradleVersion)
52+
if e != nil {
53+
return
54+
}
55+
r, _, ok := lo.FindLastIndexOf(List(), func(it Item) bool {
56+
return it.Version.Major() == gradleParsedVersion.Major() &&
57+
it.Version.Minor() == gradleParsedVersion.Minor()
58+
})
59+
if !ok {
60+
return
61+
}
62+
selectedGradleBinPath = filepath.Join(r.Path, "bin", "gradle")
63+
selectedJavaHome = selectJavaVersionOnly(gradleParsedVersion)
64+
selectedJavaHome = filepath.Join("/opt/openjdk", selectedJavaHome)
65+
return
66+
}
67+
68+
func SelectJavaHome(gradleVersion string) string {
69+
var parsed, e = semver.NewVersion(gradleVersion)
70+
if e != nil {
71+
return ""
72+
}
73+
return filepath.Join(selectJavaVersionOnly(parsed))
74+
}
75+
76+
const (
77+
jdk8 = "jdk8u402-b06"
78+
jdk11 = "jdk-11.0.22+7"
79+
jdk17 = "jdk-17.0.10+7"
80+
jdk21 = "jdk-21.0.2+13"
81+
jdk24 = "jdk-24.0.1"
82+
)
83+
84+
var _GradleVersionFirstTimeAllowJavaWith2XVersionNumber = semver.MustParse("4.7")
85+
var _GradleVersionFirstTimeSupportJdk17 = semver.MustParse("7.3.3")
86+
var _GradleVersionFirstTimeSupportJdk21 = semver.MustParse("8.5")
87+
var _GradleVersionFirstTimeSupportJdk24 = semver.MustParse("8.14")
88+
89+
func selectJavaVersionOnly(parsedVersion *semver.Version) string {
90+
if parsedVersion.Compare(_GradleVersionFirstTimeAllowJavaWith2XVersionNumber) < 0 {
91+
return jdk8
92+
} else if parsedVersion.Compare(_GradleVersionFirstTimeSupportJdk17) < 0 {
93+
return jdk11
94+
} else if parsedVersion.Compare(_GradleVersionFirstTimeSupportJdk21) < 0 {
95+
return jdk17
96+
} else if parsedVersion.Compare(_GradleVersionFirstTimeSupportJdk24) < 0 {
97+
return jdk21
98+
}
99+
return jdk24
100+
}

module/gradle/gradle_env.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import (
55
"errors"
66
"fmt"
77
"github.com/murphysecurity/murphysec/infra/logctx"
8+
"github.com/murphysecurity/murphysec/module/gradle/bundle"
89
"os"
910
"os/exec"
1011
"path/filepath"
@@ -47,14 +48,14 @@ func DetectGradleEnv(ctx context.Context, dir string) (*GradleEnv, error) {
4748
log.Info("use default gradle version")
4849
gwv = "8.6"
4950
}
50-
r.Path, r.JavaHome = selectGradleAndJavaVersion(gwv)
51+
r.Path, r.JavaHome = bundle.FindOkVersion(gwv)
5152
log.Infof("use bundled gradle: %v", r.Path)
5253
log.Infof("use bundled java: %v", r.JavaHome)
5354
return r, nil
5455
}
5556
var chosenJavaHome string
5657
if os.Getenv("MPS_BUNDLED_JAVA") == "1" {
57-
chosenJavaHome = buildJavaHome(selectJavaVersionOnly(gwv))
58+
chosenJavaHome = bundle.SelectJavaHome(gwv)
5859
r.JavaHome = chosenJavaHome
5960
log.Infof("use bundled Java eval gradle version(from wrapper): %s", chosenJavaHome)
6061
}

module/gradle/gradle_version_matrix.go

Lines changed: 0 additions & 80 deletions
This file was deleted.

0 commit comments

Comments
 (0)