Skip to content

Commit 1aa8ba7

Browse files
committed
Comment out unsupported commands, update flags to be more orderly.
1 parent bb77376 commit 1aa8ba7

File tree

2 files changed

+124
-82
lines changed

2 files changed

+124
-82
lines changed

.bazelrc

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,9 @@ common --incompatible_disallow_empty_glob=false
44
common --java_runtime_version=remotejdk_17
55
common --tool_java_runtime_version=remotejdk_17
66

7-
common --incompatible_disable_native_repo_rules=true
8-
common --incompatible_autoload_externally=
9-
10-
# TODO[https://github.com/bazelbuild/rules_kotlin/issues/1395]: Remove when all rules support not using native repo rules.
11-
common:deprecated --incompatible_disable_native_repo_rules=false
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=
1210

1311
build --strategy=KotlinCompile=worker
1412
build --test_output=all

src/main/kotlin/io/bazel/kotlin/test/BazelIntegrationTestRunner.kt

Lines changed: 121 additions & 77 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ import java.nio.file.Path
1414
import java.util.concurrent.Callable
1515
import java.util.concurrent.Executors
1616
import java.util.concurrent.TimeUnit
17+
import java.util.function.Predicate
1718
import java.util.zip.GZIPInputStream
1819
import kotlin.io.path.createDirectories
1920
import kotlin.io.path.exists
@@ -50,74 +51,95 @@ object BazelIntegrationTestRunner {
5051
}
5152
}
5253

53-
unpack.resolve("MODULE.bazel")
54-
5554
val version = bazel.run(workspace, "--version").parseVersion()
5655

57-
val bazelrc = version.resolveBazelRc(workspace)
56+
val workspaceFlags = FlagSets(
57+
sequence {
58+
if (workspace.hasModule()) {
59+
yield(
60+
listOf(
61+
Flag("--override_module=rules_kotlin=$unpack"),
62+
Flag("--enable_workspace=false") { v -> v >= Version.Known(7, 0, 0) },
63+
),
64+
)
65+
}
66+
if (workspace.hasWorkspace()) {
67+
yield(
68+
listOf(
69+
Flag("--override_repository=rules_kotlin=$unpack"),
70+
Flag("--enable_workspace=true") { v -> v < Version.Known(7, 0, 0) },
71+
),
72+
)
73+
}
74+
}.toList(),
75+
)
5876

59-
listOf(true, false).filter { bzlmod ->
60-
bzlmod && workspace.hasModule() || !bzlmod && workspace.hasWorkspace()
61-
}.forEach { bzlmod ->
62-
listOf(true, false).forEach { buildToolsApi ->
63-
println("Starting bzlmod $bzlmod test")
64-
val overrideFlag =
65-
if (bzlmod) "--override_module=rules_kotlin=$unpack" else "--override_repository=rules_kotlin=$unpack"
66-
bazel.run(
67-
workspace,
68-
"--bazelrc=$bazelrc",
69-
"clean",
70-
"--expunge",
71-
"--async",
72-
).onFailThrow()
77+
val deprecationFlags = FlagSets(
78+
listOf(
79+
listOf(
80+
// TODO[https://github.com/bazelbuild/rules_kotlin/issues/1395]: enable when rules_android
81+
// no longer uses local_config_platform
82+
Flag("--incompatible_disable_native_repo_rules=true") { false },
83+
Flag("--incompatible_autoload_externally=") { v -> v > Version.Known(8, 0, 0) },
84+
Flag("--incompatible_disallow_empty_glob=false"),
85+
),
86+
),
87+
)
88+
89+
val experimentFlags = FlagSets(
90+
listOf(
91+
listOf(
92+
Flag("--@rules_kotlin//kotlin/settings:experimental_build_tools_api=false"),
93+
),
94+
listOf(
95+
Flag("--@rules_kotlin//kotlin/settings:experimental_build_tools_api=true"),
96+
),
97+
),
98+
)
99+
100+
val systemFlagSets = workspaceFlags * version.resolveBazelRc(workspace)
101+
val commandFlagSets = deprecationFlags * experimentFlags
102+
103+
systemFlagSets.asStringsFor(version).forEach { systemFlags ->
104+
commandFlagSets.asStringsFor(version).forEach { commandFlags ->
73105
bazel.run(
74106
workspace,
75-
"--bazelrc=$bazelrc",
107+
*systemFlags,
76108
"shutdown",
77109
).onFailThrow()
78110
bazel.run(
79111
workspace,
80-
"--bazelrc=$bazelrc",
112+
*systemFlags,
81113
"info",
82-
*version.workspaceFlag(bzlmod),
83-
overrideFlag,
114+
*commandFlags,
84115
).onFailThrow()
85116
bazel.run(
86117
workspace,
87-
"--bazelrc=$bazelrc",
118+
*systemFlags,
88119
"build",
89-
overrideFlag,
90-
"--incompatible_disallow_empty_glob=false",
91-
"--@rules_kotlin//kotlin/settings:experimental_build_tools_api=${buildToolsApi}",
120+
*commandFlags,
92121
"//...",
93-
*version.workspaceFlag(bzlmod),
94122
).onFailThrow()
95123
bazel.run(
96124
workspace,
97-
"--bazelrc=$bazelrc",
125+
*systemFlags,
98126
"query",
99-
overrideFlag,
100-
"--incompatible_disallow_empty_glob=false",
127+
*commandFlags,
101128
"@rules_kotlin//...",
102-
*version.workspaceFlag(bzlmod),
103129
).onFailThrow()
104130
bazel.run(
105131
workspace,
106-
"--bazelrc=$bazelrc",
132+
*systemFlags,
107133
"query",
108-
*version.workspaceFlag(bzlmod),
109-
overrideFlag,
110-
"--incompatible_disallow_empty_glob=false",
134+
*commandFlags,
111135
"kind(\".*_test\", \"//...\")",
112136
).ok { process ->
113137
if (process.stdOut.isNotEmpty()) {
114138
bazel.run(
115139
workspace,
116-
"--bazelrc=$bazelrc",
140+
*systemFlags,
117141
"test",
118-
*version.workspaceFlag(bzlmod),
119-
overrideFlag,
120-
"--@rules_kotlin//kotlin/settings:experimental_build_tools_api=${buildToolsApi}",
142+
*commandFlags,
121143
"--test_output=all",
122144
"//...",
123145
).onFailThrow()
@@ -127,59 +149,82 @@ object BazelIntegrationTestRunner {
127149
}
128150
}
129151

152+
class Flag(val value: String, val condition: Predicate<Version>) {
153+
constructor(value: String) : this(value, { true })
154+
}
155+
156+
class FlagSets(val sets: List<List<Flag>>) {
157+
158+
operator fun times(other: FlagSets): FlagSets = FlagSets(
159+
sets.flatMap { set ->
160+
other.sets.map { otherSet -> otherSet + set }
161+
},
162+
)
163+
164+
fun asStringsFor(v: Version): List<Array<String>> =
165+
sets.map { set ->
166+
set.filter { it.condition.test(v) }.map { flag -> flag.value }.toTypedArray()
167+
}
168+
}
169+
130170
fun Path.hasModule() = resolve("MODULE").exists() || resolve("MODULE.bazel").exists()
131171
private fun Path.hasWorkspace() =
132172
resolve("WORKSPACE").exists() || resolve("WORKSPACE.bazel").exists()
133173

134-
sealed class Version {
135-
abstract fun resolveBazelRc(workspace: Path): Path;
174+
sealed class Version : Comparable<Version> {
175+
override fun compareTo(other: Version): Int = 1
176+
177+
abstract fun resolveBazelRc(workspace: Path): FlagSets
136178

137-
abstract fun workspaceFlag(isBzlMod: Boolean): Array<String>
138179

139180
class Head : Version() {
140-
override fun resolveBazelRc(workspace: Path): Path {
141-
workspace.resolve(".bazelrc.head").takeIf(Path::exists)?.let {
142-
return it
143-
}
144-
workspace.resolve(".bazelrc").takeIf(Path::exists)?.let {
145-
return it
146-
}
147-
return workspace.resolve("/dev/null")
148-
}
181+
override fun compareTo(other: Version): Int = (other as? Head)?.let { 0 } ?: 1
149182

150-
override fun workspaceFlag(isBzlMod: Boolean): Array<String> = arrayOf("--enable_bzlmod=$isBzlMod", "--enable_workspace=${!isBzlMod}")
183+
override fun resolveBazelRc(workspace: Path) = FlagSets(
184+
listOf(
185+
sequenceOf(".bazelrc.head", ".bazelrc")
186+
.map(workspace::resolve)
187+
.filter(Path::exists)
188+
.map { Flag("--bazelrc=$it") }
189+
.toList()
190+
.takeIf { it.isNotEmpty() }
191+
?: listOf(Flag("--bazelrc=/dev/null")),
192+
),
193+
)
151194
}
152195

153196
class Known(private val major: Int, private val minor: Int, private val patch: Int) :
154197
Version() {
155-
override fun resolveBazelRc(workspace: Path): Path {
156-
sequence {
157-
val parts = mutableListOf(major, minor, patch)
158-
(parts.size downTo 0).forEach { index ->
159-
yield("." + parts.subList(0, index).joinToString("-"))
198+
override fun compareTo(other: Version): Int {
199+
return (other as? Known)?.let {
200+
return when {
201+
other.major > major -> -1
202+
other.major < major -> 1
203+
other.minor > minor -> -1
204+
other.minor < minor -> 1
205+
other.patch > patch -> -1
206+
other.patch < patch -> 1
207+
else -> 0
160208
}
161-
}
162-
.map { suffix -> workspace.resolve(".bazelrc${suffix}") }
163-
.find(Path::exists)
164-
?.let { bazelrc ->
165-
return bazelrc
166-
}
167-
return workspace.resolve("/dev/null")
209+
} ?: -1
168210
}
169211

170-
override fun workspaceFlag(isBzlMod: Boolean): Array<String> = if (isBzlMod) {
171-
arrayOf(
172-
"--enable_bzlmod=true",
173-
// TODO[https://github.com/bazelbuild/rules_kotlin/issues/1395]: enable when rules_android
174-
// no longer uses local_config_platform
175-
//"--incompatible_disable_native_repo_rules=true",
176-
"--incompatible_autoload_externally=",
177-
)
178-
} else if (major >= 7) {
179-
arrayOf("--enable_workspace=true", "--enable_bzlmod=false")
180-
} else {
181-
arrayOf("--enable_bzlmod=false")
182-
}
212+
override fun resolveBazelRc(workspace: Path) = FlagSets(
213+
listOf(
214+
sequence {
215+
val parts = mutableListOf(major, minor, patch)
216+
(parts.size downTo 0).forEach { index ->
217+
yield("." + parts.subList(0, index).joinToString("-"))
218+
}
219+
}
220+
.map { suffix -> workspace.resolve(".bazelrc${suffix}") }
221+
.filter(Path::exists)
222+
.map { p -> Flag("--bazelrc=$p") }
223+
.toList()
224+
.takeIf { it.isNotEmpty() }
225+
?: listOf(Flag("--bazelrc=/dev/null")),
226+
),
227+
)
183228
}
184229
}
185230

@@ -200,7 +245,6 @@ object BazelIntegrationTestRunner {
200245
patch = result.groups["patch"]?.value?.toInt() ?: 0,
201246
)
202247
}
203-
204248
}
205249
throw IllegalStateException("Bazel version not available")
206250
}

0 commit comments

Comments
 (0)