[TASK] Run CI containers with docker - #92
Merged
Merged
Conversation
GitHub hosted runners ship both podman and docker. Since 2026-07-29
their podman/crun combination intermittently aborts the first container
start of a job with "OCI runtime error: crun: unknown version
specified" (exit code 126), independent of the job, the core version or
the PHP version. Neither the runner image nor the TYPO3 testing image
changed, and a rerun on another host clears it.
runTests.sh prefers podman whenever it is present and only falls back
to docker. That default is correct for the script and is kept, since
podman-only machines are exactly what it is built for. GitHub hosted
runners are the single place these workflows meet the broken
combination, so the override belongs in the workflows: every
"runTests.sh" call passes "-b docker" now, with the reasoning noted in
the workflow header so the flag can be dropped knowingly later.
Selecting docker exposes a second, unrelated defect. docker runs the
container as "--user $HOST_UID" with group 0, while the sqlite tmpfs
comes up owned by root with mode 0755, so no test database can be
created and every functional sqlite test fails with "unable to open
database file". Rootless podman is root inside its user namespace and
passes no "--user", which is why this never showed before. The tmpfs is
mounted with "mode=1777" now, which docker needs and podman does not
mind, and which stays correct regardless of the selected runtime.
The documentation rendering call moves from "-b podman" to "-b docker"
as well. Its container run hardcoded "-it" on top of the interactive
flags the script already manages, which docker rejects without a TTY
("the input device is not a TTY"). The redundant flag is dropped, so
CI mode stays non-interactive while local runs keep the "-it --init"
the script adds itself.
Documentation renderingYou can find files attached to the below linked Workflow Run URL (Logs). Please note that files only stay for around 5 days!
|
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Why
GitHub hosted runners ship both podman and docker. Since 2026-07-29 their
podman/crun combination intermittently aborts the first container start of a
job with
exit code 126. It is independent of the job, the core version and the PHP
version, and a rerun on another host clears it. Neither the runner image nor
the TYPO3 testing image changed, so this is variance in the GitHub host fleet,
not in anything of ours.
The change
Build/Scripts/runTests.shprefers podman whenever it is present and onlyfalls back to docker. That default is correct for the script — podman-only
machines are exactly what it is built for — so it stays. The GitHub hosted
runners are the single place these workflows meet the broken combination, so
the override belongs in the workflows.
Every
runTests.shcall now passes-b docker, with the reasoning in theworkflow header so the flag can be dropped knowingly once GitHub stops
producing the mismatch.
Selecting docker exposed a second, unrelated defect
docker runs the container as
--user $HOST_UIDwith group 0, while the sqlitetmpfs comes up owned by
root:rootwith mode0755— so no test database canbe created and every functional sqlite test fails with
unable to open database file. Rootless podman is root inside its user namespace and passes no--user, which is why this never showed before.Fixed in
runTests.shby mounting that tmpfs withmode=1777: docker needsit, podman does not mind, and it stays correct regardless of which runtime is
selected.
Documentation rendering
That job pinned
-b podmanexplicitly. It moves to-b dockertoo, whichrequired dropping a redundant hardcoded
-itfrom therenderDocumentationcontainer run: docker rejects
-twithout a TTY (the input device is not a TTY), and the script already manages the interactive flags itself(
CONTAINER_INTERACTIVE, empty in CI). Local runs keep-it --init.This pull request is its own proof
The pipeline below runs with both changes.