You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
#1596 put every package.json under Dependabot. Three other kinds of pinned
third-party version in the repository are still invisible to it, and two of
them are invisible by construction:
tests/integration/Dockerfile.node + 18 brokers/*/Dockerfile.runner, all FROM oven/bun:1.4-debian
docker
no entry — and the tag floats inside 1.4.x, so the tree does not say which image a run used
17 broker containers
image: in the 18 compose files under tests/integration/
docker-compose
16 of them are :latest (one is 2022-latest), which carries no version Dependabot could move; only MinIO is pinned (#1531)
The compose files argue for :latest explicitly — "integration tests want to
surface upstream regressions as soon as they ship, NOT whenever someone
remembers to bump a pin" — and that was the right call while remembering was
the only alternative. It has two costs the comment does not mention: the nightly
(integration-brokers.yml, 03:30 UTC) turns red underneath a run when a
broker ships a breaking release, with nothing in the tree to attribute it to,
and no run is reproducible after the fact — the compose file records postgres:latest, not what that was. One of the sixteen is not even a release: ghcr.io/tursodatabase/libsql-server:latest is a main-branch build
(org.opencontainers.image.version: latest, revision d6c75af6, built
2026-08-23), while the newest release tag is v0.24.33 (2025-12-19), so that
suite has been testing an unreleased server for months.
Proposed fix
Pin, and let Dependabot do the remembering. A new upstream release then
arrives as a PR that runs the suite it affects (the integration-brokers.yml
path filter already covers tests/integration/brokers/**), so a regression
surfaces within a day and is attributable to the bump — the goal of the old
comment, without its costs.
Compose images → the release latest resolves to today, so the pin is
provably what CI has been testing, not a guess. Resolved from the registries
by digest (the version tag sharing the floating tag's manifest-list digest): rabbitmq:4.3.6, cassandra:5.0.9, cockroachdb/cockroach:v26.2.6, amazon/dynamodb-local:3.3.1, greenmail/standalone:2.1.14, rancher/k3s:v1.34.1-k3s1, redpandadata/redpanda:v26.2.3, mariadb:13.0.2, mongo:8.3.11, eclipse-mosquitto:2.1.2-alpine (the
official image's latestis the alpine variant; no plain 2.1.2 tag
exists), mcr.microsoft.com/mssql/server:2022-CU27-ubuntu-22.04, nats:2.15.0, postgres:18.6, redis:8.10.1, yugabytedb/yugabyte:2026.1.1.2-b9. The exception is libsql-server, pinned
to the newest release, v0.24.33, rather than to the main build — the
one pin that changes what is tested, deliberately. MinIO stays as it is
(latest on quay is still the same digest as the pin).
The guard in tests/unit/ci/WorkflowHygiene.test.ts generalises from package.json to every kind of manifest Dependabot can watch here:
Dockerfiles, compose files and .csproj are each named by exactly one entry
of the matching ecosystem; every integration FROM carries a digest; no
compose image: is latest or *-latest.
Notes
Dependabot cannot express two of the pins' formats, and that is fine: 2022-CU27-ubuntu-22.04 (the cumulative-update number sits in what
Dependabot treats as the suffix) and 2026.1.1.2-b9 (the build suffix
changes per release) will not get proposals — the pin still states what was
tested, and both move by hand like MinIO does. Everything else is X.Y.Z[-suffix] with a stable suffix, which it handles.
The nightly schedule stays. Its comment currently says the run exists
because "each suite tracks :latest"; what it still catches after this is
the floating driver install in the runner images (the brokers manifest is
installed unfrozen by design) and any flake, so the comment is reworded
rather than the cron removed.
Still not coverable, for the record: the four JVM arms (build.mill, .mill-version, the jvmId JDK pin — no Mill ecosystem), .bun-version, deno-version: v2.x, node-version: '24' (setup-action inputs), graphifyy==0.9.46 (a deliberate pin in a run: line; AGENTS.md says why).
Verification here is registry-side only: every pin was resolved by digest
and the digest of oven/bun:1.4-debian was confirmed to be the multi-arch
index. The broker suites themselves cannot run on this machine (no Docker
daemon), so the first integration-brokers.yml run on the branch is the
proof that the pinned set is green — and the libsql pin is the one to watch.
Problem
#1596 put every
package.jsonunder Dependabot. Three other kinds of pinnedthird-party version in the repository are still invisible to it, and two of
them are invisible by construction:
benchmarks/comparison/{akka-net,orleans}/*.csproj+packages.lock.json(Akka 1.5.70, Orleans 10.2.2)nugettests/integration/Dockerfile.node+ 18brokers/*/Dockerfile.runner, allFROM oven/bun:1.4-debiandockerimage:in the 18 compose files undertests/integration/docker-compose:latest(one is2022-latest), which carries no version Dependabot could move; only MinIO is pinned (#1531)The compose files argue for
:latestexplicitly — "integration tests want tosurface upstream regressions as soon as they ship, NOT whenever someone
remembers to bump a pin" — and that was the right call while remembering was
the only alternative. It has two costs the comment does not mention: the nightly
(
integration-brokers.yml, 03:30 UTC) turns red underneath a run when abroker ships a breaking release, with nothing in the tree to attribute it to,
and no run is reproducible after the fact — the compose file records
postgres:latest, not what that was. One of the sixteen is not even a release:ghcr.io/tursodatabase/libsql-server:latestis a main-branch build(
org.opencontainers.image.version: latest, revisiond6c75af6, built2026-08-23), while the newest release tag is
v0.24.33(2025-12-19), so thatsuite has been testing an unreleased server for months.
Proposed fix
Pin, and let Dependabot do the remembering. A new upstream release then
arrives as a PR that runs the suite it affects (the
integration-brokers.ymlpath filter already covers
tests/integration/brokers/**), so a regressionsurfaces within a day and is attributable to the bump — the goal of the old
comment, without its costs.
latestresolves to today, so the pin isprovably what CI has been testing, not a guess. Resolved from the registries
by digest (the version tag sharing the floating tag's manifest-list digest):
rabbitmq:4.3.6,cassandra:5.0.9,cockroachdb/cockroach:v26.2.6,amazon/dynamodb-local:3.3.1,greenmail/standalone:2.1.14,rancher/k3s:v1.34.1-k3s1,redpandadata/redpanda:v26.2.3,mariadb:13.0.2,mongo:8.3.11,eclipse-mosquitto:2.1.2-alpine(theofficial image's
latestis the alpine variant; no plain2.1.2tagexists),
mcr.microsoft.com/mssql/server:2022-CU27-ubuntu-22.04,nats:2.15.0,postgres:18.6,redis:8.10.1,yugabytedb/yugabyte:2026.1.1.2-b9. The exception is libsql-server, pinnedto the newest release,
v0.24.33, rather than to the main build — theone pin that changes what is tested, deliberately. MinIO stays as it is
(
lateston quay is still the same digest as the pin).FROM oven/bun:1.4-debian@sha256:4f6e31d1…(the index digest, multi-arch, identical to
1.4.2-debiantoday — matching.bun-version). TheDockerfile.nodepolicy ([Feature] Adopt Bun 1.4.0: pin the CI toolchain via .bun-version, bump Docker base images to oven/bun:1.4-debian, update docs (EN+DE) #1328) stays exactly aswritten: patch releases flow, the minor moves with
.bun-versionin onereviewed commit. The
dockerentry carries anignoreon major and minorfor
oven/bun, so what Dependabot moves is the digest — the 1.4.x rebuilds— and
1.5-debianis never proposed, the way@types/nodemajors are not(Dependabot re-proposes @types/node majors against the deliberate engines-floor pin (4th round: #481) #906). One catch-all group, so a rebuild is one PR across the 19 files
rather than 19.
nugetfor the two .NET arms, with theMicrosoft.Orleans.*pair groupedat every update type (the two move in lockstep, like
github/codeql-actionin Dependabot splits a codeql-action bump into one PR per sub-path, and each half fails CI by construction #1348) and a minor-and-patch group for the rest. Same re-measure rule as
the JS arms: a merge here is a reason to re-run
bench:comparebefore thetables are next updated.
tests/unit/ci/WorkflowHygiene.test.tsgeneralises frompackage.jsonto every kind of manifest Dependabot can watch here:Dockerfiles, compose files and
.csprojare each named by exactly one entryof the matching ecosystem; every integration
FROMcarries a digest; nocompose
image:islatestor*-latest.Notes
2022-CU27-ubuntu-22.04(the cumulative-update number sits in whatDependabot treats as the suffix) and
2026.1.1.2-b9(the build suffixchanges per release) will not get proposals — the pin still states what was
tested, and both move by hand like MinIO does. Everything else is
X.Y.Z[-suffix]with a stable suffix, which it handles.because "each suite tracks
:latest"; what it still catches after this isthe floating driver install in the runner images (the brokers manifest is
installed unfrozen by design) and any flake, so the comment is reworded
rather than the cron removed.
build.mill,.mill-version, thejvmIdJDK pin — no Mill ecosystem),.bun-version,deno-version: v2.x,node-version: '24'(setup-action inputs),graphifyy==0.9.46(a deliberate pin in arun:line; AGENTS.md says why).and the digest of
oven/bun:1.4-debianwas confirmed to be the multi-archindex. The broker suites themselves cannot run on this machine (no Docker
daemon), so the first
integration-brokers.ymlrun on the branch is theproof that the pinned set is green — and the libsql pin is the one to watch.
Follows #1596.