Skip to content

Commit b18c44e

Browse files
authored
Update java templates in rbeconfigsgen.go (#999)
* Update java templates in rbeconfigsgen.go Use @rules_java for bazel > 7.0.0 * Fix buildifier CI failures
1 parent 059f56e commit b18c44e

File tree

3 files changed

+149
-15
lines changed

3 files changed

+149
-15
lines changed

pkg/rbeconfigsgen/rbeconfigsgen.go

Lines changed: 47 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -99,12 +99,33 @@ java_runtime(
9999
srcs = [],
100100
java_home = "{{ .JavaHome }}",
101101
)
102+
`))
103+
104+
// javaBuildTemplateLt7 is the Java toolchain config BUILD file template for Bazel versions
105+
// >=5.0.0 (tentative?) and < 7.0.0.
106+
javaBuildTemplateLt7 = template.Must(template.New("javaBuild").Parse(buildHeader + `
107+
load("@bazel_tools//tools/jdk:local_java_repository.bzl", "local_java_runtime")
108+
109+
package(default_visibility = ["//visibility:public"])
110+
111+
alias(
112+
name = "jdk",
113+
actual = "rbe_jdk",
114+
)
115+
116+
local_java_runtime(
117+
name = "rbe_jdk",
118+
java_home = "{{ .JavaHome }}",
119+
version = "{{ .JavaVersion }}",
120+
)
102121
`))
103122

104123
// javaBuildTemplate is the Java toolchain config BUILD file template for Bazel versions
105-
// >=5.0.0 (tentative?).
124+
// >=7.0.0 (including pre-releases).
125+
// The difference between the older template is directly referencing to @rules_java
126+
// instead of the indirection via @bazel_tools
106127
javaBuildTemplate = template.Must(template.New("javaBuild").Parse(buildHeader + `
107-
load("@bazel_tools//tools/jdk:local_java_repository.bzl", "local_java_runtime")
128+
load("@rules_java//toolchains:local_java_repository.bzl", "local_java_runtime")
108129
109130
package(default_visibility = ["//visibility:public"])
110131
@@ -562,6 +583,25 @@ func UsesLocalJavaRuntime(bazelVersion string) (bool, error) {
562583
return !bv.LessThan(*semver.New("5.0.0")), nil
563584
}
564585

586+
func getJavaTemplate(o *Options) (*template.Template, error) {
587+
usesNewJavaRule := o.JavaUseLocalRuntime
588+
if !usesNewJavaRule {
589+
var err error
590+
usesNewJavaRule, err = UsesLocalJavaRuntime(o.BazelVersion)
591+
if (err != nil) {
592+
return nil, fmt.Errorf("unable to determine what Java toolchain rule to use for Bazel %q: %w", o.BazelVersion, err)
593+
}
594+
}
595+
if !usesNewJavaRule {
596+
return legacyJavaBuildTemplate, nil
597+
}
598+
// use latest template if BazelVersion is unspecified
599+
if o.BazelVersion != "" && o.BazelVersion < "7" {
600+
return javaBuildTemplateLt7, nil
601+
}
602+
return javaBuildTemplate, nil
603+
}
604+
565605
// genJavaConfigs returns a BUILD file containing a Java toolchain rule definition that contains
566606
// the following attributes determined by probing details about the JDK version installed in the
567607
// running toolchain container.
@@ -613,17 +653,11 @@ func genJavaConfigs(d *dockerRunner, o *Options) (generatedFile, error) {
613653
}
614654
log.Printf("Java version: '%s'.", javaVersion)
615655

616-
usesNewJavaRule := o.JavaUseLocalRuntime
617-
if !usesNewJavaRule {
618-
usesNewJavaRule, err = UsesLocalJavaRuntime(o.BazelVersion)
619-
if err != nil {
620-
return generatedFile{}, fmt.Errorf("unable to determine what Java toolchain rule to use for Bazel %q: %w", o.BazelVersion, err)
621-
}
622-
}
623-
t := legacyJavaBuildTemplate
624-
if usesNewJavaRule {
625-
t = javaBuildTemplate
626-
}
656+
t, err := getJavaTemplate(o)
657+
if err != nil {
658+
return generatedFile{}, err
659+
}
660+
627661
buf := bytes.NewBuffer(nil)
628662
if err := t.Execute(buf, &javaBuildTemplateParams{
629663
JavaHome: javaHome,

pkg/rbeconfigsgen/rbeconfigsgen_test.go

Lines changed: 100 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ package rbeconfigsgen
1616

1717
import (
1818
"testing"
19+
"text/template"
1920
)
2021

2122
func TestGenCppToolchainTarget(t *testing.T) {
@@ -84,3 +85,102 @@ func TestGenCppToolchainTarget(t *testing.T) {
8485
})
8586
}
8687
}
88+
89+
func TestGetJavaTemplate(t *testing.T) {
90+
tests := []struct {
91+
name string
92+
want *template.Template
93+
opt *Options
94+
}{
95+
{
96+
name: "bazel 4, choose legacy",
97+
want: legacyJavaBuildTemplate,
98+
opt: &Options{
99+
BazelVersion: "4.0.0",
100+
},
101+
},
102+
{
103+
name: "bazel 5, choose BazelLt7",
104+
want: javaBuildTemplateLt7,
105+
opt: &Options{
106+
BazelVersion: "5.0.0",
107+
},
108+
},
109+
{
110+
name: "bazel 7, choose latest",
111+
want: javaBuildTemplate,
112+
opt: &Options{
113+
BazelVersion: "7.0.0",
114+
},
115+
},
116+
{
117+
name: "bazel 7-pre, choose latest",
118+
want: javaBuildTemplate,
119+
opt: &Options{
120+
BazelVersion: "7.0.0-pre.20230724.1",
121+
},
122+
},
123+
{
124+
name: "useLocalRuntime forced, choose latest",
125+
want: javaBuildTemplate,
126+
opt: &Options{
127+
JavaUseLocalRuntime: true,
128+
},
129+
},
130+
{
131+
name: "useLocalRuntime forced, bazel 4, choose BazelLt7",
132+
want: javaBuildTemplateLt7,
133+
opt: &Options{
134+
BazelVersion: "4.0.0",
135+
JavaUseLocalRuntime: true,
136+
},
137+
},
138+
{
139+
name: "useLocalRuntime forced, bazel 5, choose BazelLt7",
140+
want: javaBuildTemplateLt7,
141+
opt: &Options{
142+
BazelVersion: "5.0.0",
143+
JavaUseLocalRuntime: true,
144+
},
145+
},
146+
{
147+
name: "useLocalRuntime forced, bazel 6, choose BazelLt7",
148+
want: javaBuildTemplateLt7,
149+
opt: &Options{
150+
BazelVersion: "6.0.0",
151+
JavaUseLocalRuntime: true,
152+
},
153+
},
154+
{
155+
name: "useLocalRuntime forced, bazel 7, choose latest",
156+
want: javaBuildTemplate,
157+
opt: &Options{
158+
BazelVersion: "7.0.0",
159+
JavaUseLocalRuntime: true,
160+
},
161+
},
162+
{
163+
name: "useLocalRuntime forced, bazel 7-pre, choose latest",
164+
want: javaBuildTemplate,
165+
opt: &Options{
166+
BazelVersion: "7.0.0-pre.20200202",
167+
JavaUseLocalRuntime: true,
168+
},
169+
},
170+
}
171+
172+
for _, tc := range tests {
173+
tc := tc
174+
t.Run(tc.name, func(t *testing.T) {
175+
t.Parallel()
176+
// We skip validation since we don't set all options required for
177+
// regular execution.
178+
got, err := getJavaTemplate(tc.opt);
179+
if err != nil {
180+
t.Fatalf("getJavaTemplate failed: %v, wanted: %v", err, tc.want)
181+
} else if got != tc.want {
182+
t.Fatalf("getJavaTemplate: %v, wanted %v", got, tc.want)
183+
}
184+
})
185+
}
186+
}

rules/exec_properties/exec_properties.bzl

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -203,7 +203,7 @@ PARAMS = {
203203
),
204204
}
205205

206-
def create_exec_properties_dict(**kwargs):
206+
def create_exec_properties_dict(**_kwargs):
207207
fail("create_exec_properties_dict is deprecated. Please use create_rbe_exec_properties_dict instead.")
208208

209209
def create_rbe_exec_properties_dict(**kwargs):
@@ -242,7 +242,7 @@ def create_rbe_exec_properties_dict(**kwargs):
242242

243243
return dict
244244

245-
def merge_dicts(*dict_args):
245+
def merge_dicts(*_dict_args):
246246
fail("merge_dicts is deprecated. Please use dicts.add() instead. See https://github.com/bazelbuild/bazel-skylib/blob/master/docs/dicts_doc.md")
247247

248248
def _exec_property_sets_repository_impl(repository_ctx):

0 commit comments

Comments
 (0)