Skip to content

Commit 50674d3

Browse files
committed
[maintenance] Migrate examples and tests to support both bzlmod and workspace modes, update dependencies and Bazel to 9.0.0rc5, and add MODULE.bazel files for examples
1 parent b412275 commit 50674d3

File tree

12 files changed

+271
-61
lines changed

12 files changed

+271
-61
lines changed

.bazelrc

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,12 @@
11
common --enable_bzlmod=true
22
common --incompatible_use_plus_in_repo_names
33
common --incompatible_disallow_empty_glob=false
4+
common --incompatible_disable_native_repo_rules=true
5+
common --incompatible_autoload_externally=
6+
47
common --java_runtime_version=remotejdk_17
58
common --tool_java_runtime_version=remotejdk_17
69

7-
# TODO[https://github.com/bazelbuild/rules_kotlin/issues/1395]: Uncomment when all rules support not using native repo rules.
8-
# common --incompatible_disable_native_repo_rules=true
9-
# common --incompatible_autoload_externally=
10-
1110
build --strategy=KotlinCompile=worker
1211
build --test_output=all
1312
build --verbose_failures

.bazelversion

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
8.4.2
1+
9.0.0rc5

MODULE.bazel

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ module(
55
repo_name = "rules_kotlin",
66
)
77

8-
proto_version = "4.33.1"
8+
proto_version = "4.33.4"
99

1010
proto_version_parts = proto_version.split(".")
1111

@@ -137,13 +137,17 @@ bazel_dep(name = "rules_pkg", version = "1.0.1")
137137
bazel_dep(name = "stardoc", version = "0.8.0", dev_dependency = True, repo_name = "io_bazel_stardoc")
138138
bazel_dep(name = "aspect_bazel_lib", version = "2.22.0", dev_dependency = True)
139139
bazel_dep(name = "rules_testing", version = "0.9.0", dev_dependency = True)
140-
bazel_dep(name = "rules_bazel_integration_test", version = "0.34.0", dev_dependency = True)
140+
bazel_dep(name = "rules_bazel_integration_test", version = "0.35.0", dev_dependency = True)
141141

142142
bazel_binaries = use_extension("@rules_bazel_integration_test//:extensions.bzl", "bazel_binaries", dev_dependency = True)
143+
bazel_binaries.download(version = "7.x")
144+
bazel_binaries.download(version = "8.x")
143145
bazel_binaries.download(version_file = "//:.bazelversion")
144146
use_repo(
145147
bazel_binaries,
146148
"bazel_binaries",
147149
"bazel_binaries_bazelisk",
148150
"build_bazel_bazel_.bazelversion",
151+
"build_bazel_bazel_7_x",
152+
"build_bazel_bazel_8_x",
149153
)

examples/anvil/MODULE.bazel

Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
module(name = "anvil-example")
2+
3+
bazel_dep(name = "rules_android", version = "0.7.0")
4+
bazel_dep(name = "bazel_skylib", version = "1.7.1")
5+
bazel_dep(name = "rules_java", version = "8.9.0")
6+
bazel_dep(name = "rules_kotlin", version = "2.2.0")
7+
bazel_dep(name = "rules_jvm_external", version = "6.6")
8+
9+
android_sdk_repository_extension = use_extension("@rules_android//rules/android_sdk_repository:rule.bzl", "android_sdk_repository_extension")
10+
use_repo(android_sdk_repository_extension, "androidsdk")
11+
12+
register_toolchains("@androidsdk//:sdk-toolchain", "@androidsdk//:all")
13+
14+
maven = use_extension("@rules_jvm_external//:extensions.bzl", "maven")
15+
maven.install(
16+
name = "maven_rules_kotlin_example",
17+
aar_import_bzl_label = "@rules_android//rules:rules.bzl",
18+
artifacts = [
19+
"com.google.dagger:dagger:2.50",
20+
"com.google.dagger:dagger-compiler:2.50",
21+
"com.google.dagger:dagger-producers:2.50",
22+
"com.squareup.anvil:compiler:2.4.9",
23+
"com.squareup.anvil:annotations:2.4.9",
24+
"androidx.activity:activity:1.0.0",
25+
"androidx.annotation:annotation:1.1.0",
26+
"androidx.appcompat:appcompat-resources:1.1.0",
27+
"androidx.appcompat:appcompat:1.1.0",
28+
"androidx.arch.core:core-common:2.1.0",
29+
"androidx.arch.core:core-runtime:2.0.0",
30+
"androidx.cardview:cardview:1.0.0",
31+
"androidx.collection:collection:1.1.0",
32+
"androidx.coordinatorlayout:coordinatorlayout:1.1.0",
33+
"androidx.core:core-ktx:1.3.0",
34+
"androidx.core:core:1.3.0",
35+
"androidx.cursoradapter:cursoradapter:1.0.0",
36+
"androidx.customview:customview:1.0.0",
37+
"androidx.drawerlayout:drawerlayout:1.0.0",
38+
"androidx.fragment:fragment:1.1.0",
39+
"androidx.interpolator:interpolator:1.0.0",
40+
"androidx.lifecycle:lifecycle-common:2.1.0",
41+
"androidx.lifecycle:lifecycle-livedata-core:2.0.0",
42+
"androidx.lifecycle:lifecycle-livedata:2.0.0",
43+
"androidx.lifecycle:lifecycle-runtime:2.1.0",
44+
"androidx.lifecycle:lifecycle-viewmodel:2.1.0",
45+
"androidx.loader:loader:1.0.0",
46+
"androidx.recyclerview:recyclerview:1.1.0",
47+
"androidx.savedstate:savedstate:1.0.0",
48+
"androidx.transition:transition:1.2.0",
49+
"androidx.vectordrawable:vectordrawable-animated:1.1.0",
50+
"androidx.vectordrawable:vectordrawable:1.1.0",
51+
"androidx.versionedparcelable:versionedparcelable:1.1.0",
52+
"androidx.viewpager2:viewpager2:1.0.0",
53+
"androidx.viewpager:viewpager:1.0.0",
54+
"com.google.android.material:material:1.1.0",
55+
"javax.inject:javax.inject:1",
56+
"junit:junit:4.13",
57+
"org.jetbrains.kotlin:kotlin-test:1.5.10",
58+
"com.google.truth:truth:1.0.1",
59+
"org.jetbrains:annotations:13.0",
60+
],
61+
excluded_artifacts = [
62+
"org.jetbrains.kotlin:kotlin-stdlib",
63+
"org.jetbrains.kotlin:kotlin-stdlib-jdk8",
64+
"org.jetbrains.kotlin:kotlin-stdlib-jdk7",
65+
"org.jetbrains.kotlin:kotlin-compiler-embeddable",
66+
"org.jetbrains.kotlin:kotlin-reflect",
67+
"org.jetbrains.kotlin:kotlin-script-runtime",
68+
],
69+
repositories = [
70+
"https://maven.google.com",
71+
"https://repo1.maven.org/maven2",
72+
],
73+
use_starlark_android_rules = True,
74+
)
75+
use_repo(maven, "maven_rules_kotlin_example")

examples/associates/MODULE.bazel

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
module(name = "associates-example")
2+
3+
bazel_dep(name = "bazel_skylib", version = "1.7.1")
4+
bazel_dep(name = "rules_java", version = "8.9.0")
5+
bazel_dep(name = "rules_kotlin", version = "2.2.0")
6+
bazel_dep(name = "rules_jvm_external", version = "6.6")
7+
8+
maven = use_extension("@rules_jvm_external//:extensions.bzl", "maven")
9+
maven.install(
10+
name = "maven_rules_kotlin_example",
11+
artifacts = [
12+
"junit:junit:4.13",
13+
],
14+
repositories = [
15+
"https://repo1.maven.org/maven2",
16+
],
17+
)
18+
use_repo(maven, "maven_rules_kotlin_example")

examples/dagger/MODULE.bazel

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
module(name = "dagger-example")
2+
3+
bazel_dep(name = "bazel_skylib", version = "1.7.1")
4+
bazel_dep(name = "rules_java", version = "8.9.0")
5+
bazel_dep(name = "rules_kotlin", version = "2.2.0")
6+
bazel_dep(name = "rules_jvm_external", version = "6.6")
7+
8+
maven = use_extension("@rules_jvm_external//:extensions.bzl", "maven")
9+
maven.install(
10+
name = "maven_rules_kotlin_example",
11+
artifacts = [
12+
"com.google.dagger:dagger:2.57.2",
13+
"com.google.dagger:dagger-compiler:2.57.2",
14+
"com.google.dagger:dagger-producers:2.57.2",
15+
"javax.inject:javax.inject:1",
16+
"org.jetbrains.kotlinx:kotlinx-coroutines-core:1.10.2",
17+
"org.jetbrains.kotlin:kotlin-metadata-jvm:2.3.0",
18+
],
19+
repositories = [
20+
"https://repo1.maven.org/maven2",
21+
],
22+
)
23+
use_repo(maven, "maven_rules_kotlin_example")

examples/deps/.bazelrc

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,5 @@
11
common --java_runtime_version=remotejdk_21
22
common --tool_java_runtime_version=remotejdk_21
3-
common --incompatible_enable_android_toolchain_resolution
4-
common --enable_workspace=true
5-
common --enable_bzlmod=false
3+
common --incompatible_enable_android_toolchain_resolution # Required for bazel 7
64
common --android_platforms=//:arm64-v8a
75
common --toolchain_resolution_debug=.*

examples/deps/MODULE.bazel

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
module(name = "deps-example")
2+
3+
bazel_dep(name = "rules_android", version = "0.7.0")
4+
bazel_dep(name = "bazel_skylib", version = "1.7.1")
5+
bazel_dep(name = "rules_java", version = "8.9.0")
6+
bazel_dep(name = "rules_kotlin", version = "2.2.0")
7+
bazel_dep(name = "rules_jvm_external", version = "6.6")
8+
9+
android_sdk_repository_extension = use_extension("@rules_android//rules/android_sdk_repository:rule.bzl", "android_sdk_repository_extension")
10+
use_repo(android_sdk_repository_extension, "androidsdk")
11+
12+
register_toolchains("@androidsdk//:sdk-toolchain", "@androidsdk//:all")
13+
14+
register_toolchains("//bzl:experimental_toolchain")
15+
16+
maven = use_extension("@rules_jvm_external//:extensions.bzl", "maven")
17+
maven.install(
18+
name = "maven_rules_kotlin_example",
19+
aar_import_bzl_label = "@rules_android//rules:rules.bzl",
20+
artifacts = [
21+
"com.google.auto.value:auto-value:1.6.5",
22+
"com.google.auto.value:auto-value-annotations:1.6.5",
23+
],
24+
repositories = [
25+
"https://maven.google.com",
26+
"https://repo1.maven.org/maven2",
27+
],
28+
use_starlark_android_rules = True,
29+
)
30+
use_repo(maven, "maven_rules_kotlin_example")

examples/integration.bzl

Lines changed: 60 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,24 @@ load(
66
"bazel_integration_test",
77
)
88

9+
def _version_supports_workspace(clean_version):
10+
"""Returns True if version < 9.0.0 (workspace is deprecated in Bazel 9+)."""
11+
12+
# clean_version is already extracted via Label(version).name, e.g., "8.0.0" or "9.0.0rc5" or ".bazelversion"
13+
parts = clean_version.split(".")
14+
if len(parts) >= 1 and parts[0]:
15+
# Handle versions like "9.0.0rc5" by splitting on common suffixes
16+
major_str = parts[0]
17+
for suffix in ["rc", "pre", "alpha", "beta"]:
18+
major_str = major_str.split(suffix)[0]
19+
if major_str:
20+
major = int(major_str)
21+
return major < 9
22+
23+
# For non-standard version strings (like ".bazelversion"), assume workspace is not supported
24+
# since we're transitioning away from workspace
25+
return False
26+
927
def derive_metadata(directory):
1028
return struct(
1129
directory = directory,
@@ -34,6 +52,14 @@ def derive_metadata(directory):
3452
allow_empty = True,
3553
)
3654
],
55+
has_module = len(native.glob(
56+
["%s/MODULE.bazel" % directory, "%s/MODULE" % directory],
57+
allow_empty = True,
58+
)) > 0,
59+
has_workspace = len(native.glob(
60+
["%s/WORKSPACE" % directory, "%s/WORKSPACE.bazel" % directory],
61+
allow_empty = True,
62+
)) > 0,
3763
)
3864

3965
def example_integration_test_suite(
@@ -43,23 +69,42 @@ def example_integration_test_suite(
4369
for version in bazel_binaries.versions.all:
4470
if version in metadata.only or (not metadata.only and version not in metadata.exclude):
4571
clean_bazel_version = Label(version).name
46-
test_name = "%s_%s_test" % (name, clean_bazel_version)
47-
bazel_integration_test(
48-
name = test_name,
49-
timeout = "eternal",
50-
additional_env_inherit = [
51-
"ANDROID_HOME",
52-
"ANDROID_SDK_ROOT",
53-
"ANDROID_NDK_HOME",
54-
],
55-
bazel_version = version,
56-
tags = tags + [clean_bazel_version, name],
57-
test_runner = "//src/main/kotlin/io/bazel/kotlin/test:BazelIntegrationTestRunner",
58-
workspace_files = metadata.workspace_files,
59-
workspace_path = metadata.directory,
60-
)
72+
73+
# Build list of modes to test
74+
modes = []
75+
if metadata.has_module:
76+
modes.append(("bzlmod", {}))
77+
if metadata.has_workspace and _version_supports_workspace(clean_bazel_version):
78+
modes.append(("workspace", {"WORKSPACE_ENABLED": "1"}))
79+
80+
for mode, env in modes:
81+
bazel_integration_test(
82+
name = "%s_%s_%s_test" % (name, mode, clean_bazel_version),
83+
timeout = "eternal",
84+
additional_env_inherit = [
85+
"ANDROID_HOME",
86+
"ANDROID_SDK_ROOT",
87+
"ANDROID_NDK_HOME",
88+
],
89+
env = env,
90+
bazel_version = version,
91+
tags = tags + [clean_bazel_version, name, name + "_" + mode],
92+
test_runner = "//src/main/kotlin/io/bazel/kotlin/test:BazelIntegrationTestRunner",
93+
workspace_files = metadata.workspace_files,
94+
workspace_path = metadata.directory,
95+
)
6196

6297
native.test_suite(
6398
name = name,
6499
tags = [name],
65100
)
101+
102+
native.test_suite(
103+
name = name + "_bzlmod",
104+
tags = [name + "_bzlmod"],
105+
)
106+
107+
native.test_suite(
108+
name = name + "_workspace",
109+
tags = [name + "_workspace"],
110+
)

examples/plugin/MODULE.bazel

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
module(name = "plugin-example")
2+
3+
bazel_dep(name = "rules_android", version = "0.7.0")
4+
bazel_dep(name = "bazel_skylib", version = "1.7.1")
5+
bazel_dep(name = "rules_java", version = "8.9.0")
6+
bazel_dep(name = "rules_kotlin", version = "2.2.0")
7+
bazel_dep(name = "rules_jvm_external", version = "6.6")
8+
9+
android_sdk_repository_extension = use_extension("@rules_android//rules/android_sdk_repository:rule.bzl", "android_sdk_repository_extension")
10+
use_repo(android_sdk_repository_extension, "androidsdk")
11+
12+
register_toolchains("@androidsdk//:sdk-toolchain", "@androidsdk//:all")
13+
14+
maven = use_extension("@rules_jvm_external//:extensions.bzl", "maven")
15+
maven.install(
16+
name = "maven_rules_kotlin_example",
17+
aar_import_bzl_label = "@rules_android//rules:rules.bzl",
18+
artifacts = [
19+
"junit:junit:4.13.2",
20+
"org.jetbrains.kotlinx:kotlinx-serialization-core-jvm:1.0.1",
21+
],
22+
repositories = [
23+
"https://repo1.maven.org/maven2",
24+
],
25+
use_starlark_android_rules = True,
26+
)
27+
use_repo(maven, "maven_rules_kotlin_example")

0 commit comments

Comments
 (0)