From 4b2eaf0afc9c3cf21ab113b59515bfd70736a7d4 Mon Sep 17 00:00:00 2001 From: Richard McDaniel <1130888+rmcdaniel@users.noreply.github.com> Date: Sun, 1 Nov 2026 20:03:40 +0000 Subject: [PATCH] CI: accept a lower-case Docker absence message in the deadline-health cells On the Ubuntu 26 runner image the Docker CLI reports a removed container as "error: no such object: ...". The cells runner matched only "No such object", so a cell whose database container had already gone (SQLite has none) halted as cleanup unconfirmed. Run 41338240707 on #925 failed this way on runner image ubuntu26/20261025.179 while the same job passed on other images. The match is now case-insensitive; the test's fake Docker can answer in lower case. Co-Authored-By: Claude Opus 5.5 --- .../server-parity/codec-deadline-cells.sh | 3 ++- tests/Unit/ServerParityCodecDeadlineCellsTest.mjs | 13 ++++++++++++- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/scripts/conformance/server-parity/codec-deadline-cells.sh b/scripts/conformance/server-parity/codec-deadline-cells.sh index 1665456d8..6ad5614be 100644 --- a/scripts/conformance/server-parity/codec-deadline-cells.sh +++ b/scripts/conformance/server-parity/codec-deadline-cells.sh @@ -19,7 +19,8 @@ actors_stopped() { local name state for name in "$@"; do if ! state=$(docker inspect --format '{{.State.Running}}' "$name" 2>&1); then - if [[ "$state" == *"No such object"* || "$state" == *"No such container"* ]]; then + # The Docker CLI on the Ubuntu 26 runner image prints these in lower case. + if [[ "${state,,}" == *"no such object"* || "${state,,}" == *"no such container"* ]]; then continue fi echo "::error::Could not confirm that $name stopped: $state" >&2 diff --git a/tests/Unit/ServerParityCodecDeadlineCellsTest.mjs b/tests/Unit/ServerParityCodecDeadlineCellsTest.mjs index 7d49b36b0..07e7e78e3 100644 --- a/tests/Unit/ServerParityCodecDeadlineCellsTest.mjs +++ b/tests/Unit/ServerParityCodecDeadlineCellsTest.mjs @@ -38,7 +38,9 @@ case "$command" in rm -f "$LIVE/$name" ;; inspect) if [[ -n "\${INSPECT_FAILS:-}" ]]; then echo "Cannot connect to the Docker daemon" >&2; exit 1; fi - if [[ -e "$LIVE/$name" ]]; then echo true; else echo "Error: No such object: $name" >&2; exit 1; fi ;; + if [[ -e "$LIVE/$name" ]]; then echo true; exit 0; fi + if [[ -n "\${LOWERCASE_ABSENT:-}" ]]; then echo "error: no such object: $name" >&2; else echo "Error: No such object: $name" >&2; fi + exit 1 ;; *) exit 2 ;; esac `); @@ -84,6 +86,15 @@ test('every cell runs once, in its own scope, after the previous one stopped, an assert.deepEqual(states, []); }); +// Run 41338240707 on #925: the Ubuntu 26 runner image's Docker CLI reports a +// removed container in lower case, which the absence check did not accept. +test("a removed container reported in lower case counts as stopped", () => { + const {child, statuses, events} = runCells({LOWERCASE_ABSENT: '1'}); + assert.equal(child.status, 0, child.stderr); + assert.deepEqual(events, DATABASES.map(started)); + assert.deepEqual(new Set(Object.values(statuses)), new Set(['0'])); +}); + // Run 40110569900 on #748: the MySQL-family cells exited 2 because their // unique scopes (cpu-mysql-8.0, ...) held a dot the cell refuses. test('every cell gets a unique scope the cell accepts', () => {