* refactor(linters): add prefer-coerce-array rule Refs #45217 `x ?? []` and `coerceArray(x)` say the same thing, but only the second one is searchable and consistent. The rule flags a `??` whose default is a bare `[]` literal; a non-empty default or an asserted `([] as Foo[])` still passes. Applying it across `lib/` surfaced three spots the helper cannot cover, which keep `?? []` with a disable comment or a narrower fix: - `package-files.ts` destructures a tuple, which `coerceArray()` widens - `generate.spec.ts` defaults `matchAll()`, an iterator rather than an array - `mise/upgradeable-tooling.ts` declares a `Record` return, so its `?? []` fallback was wrong to begin with and becomes `coerceObject()` * refactor(platform/github): hoist the GHE version header lookup `Object.entries(...).find()` returns a tuple, and defaulting it with `?? []` only to destructure the second element reads as an array default when it is not one. Name the found entry instead, which drops the `?? []` rather than routing a tuple through `coerceArray()`.
The bazel-module manager can update Bazel module (bzlmod) enabled workspaces.
Maven
It also takes care about maven artifacts initalized with bzlmod. For simplicity the name of extension variable is limited to maven*. E.g.:
maven = use_extension("@rules_jvm_external//:extensions.bzl", "maven")
maven_1 = use_extension("@rules_jvm_external//:extensions.bzl", "maven")
Both install and artifact methods are supported:
maven.install(
artifacts = [
"org.seleniumhq.selenium:selenium-java:4.4.0",
],
)
maven.artifact(
artifact = "javapoet",
group = "com.squareup",
neverlink = True,
version = "1.11.1",
)
Docker
Similarly, it updates Docker / OCI images pulled with oci_pull.
Note that the extension must be called oci:
oci = use_extension("@rules_oci//oci:extensions.bzl", "oci")
oci.pull(
name = "nginx_image",
digest = "sha256:287ff321f9e3cde74b600cc26197424404157a72043226cbbf07ee8304a2c720",
image = "index.docker.io/library/nginx",
platforms = ["linux/amd64"],
tag = "1.27.1",
)
It also supports Docker images pulled with rules_img pull:
pull = use_repo_rule("@rules_img//img:pull.bzl", "pull")
pull(
name = "ubuntu",
digest = "sha256:1e622c5f9ac0c0144d577702ba5f2cce79fc8e3cf89ec88291739cd4eee3b7b9",
registry = "index.docker.io",
repository = "library/ubuntu",
tag = "24.04",
)
Crate
It also supports Rust crate dependencies initialized with rules_rust crate_universe. For simplicity the name of extension variable is limited to crate*. E.g.:
crate = use_extension("@rules_rust//crate_universe:extension.bzl", "crate")
crate_1 = use_extension("@rules_rust//crate_universe:extension.bzl", "crate")
The spec method is supported:
crate.spec(
package = "axum",
version = "0.8.4",
)
crate.spec(
package = "tokio",
version = "1.45.1",
features = [
"full",
],
)
crate.spec(
package = "custom_crate",
git = "https://github.com/example/custom_crate.git",
tag = "v1.0.0",
)
Lockfile support
The bazel-module manager updates the MODULE.bazel.lock file when dependencies change.
After updating MODULE.bazel, Renovate runs bazel mod deps to regenerate the lockfile.
Requirements:
- A
MODULE.bazel.lockfile must already exist in the repository - Bazelisk must be available (Renovate installs it automatically when using containerbase)
- Bazelisk determines the correct Bazel version from the
.bazelversionfile in the repository (if present)
If no MODULE.bazel.lock file is found, the lockfile update step is skipped.
It will only run if the allowedUnsafeExecutions global option includes bazelModDeps.