Files
renovate/lib/modules/manager/bazel-module
Sebastian Poxhofer 97327c3d28 refactor(linters): add prefer-coerce-array rule (#45492)
* 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()`.
2026-08-28 09:27:58 +00:00
..

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.lock file 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 .bazelversion file 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.