Repository navigation
[TASK] DPL-203: runTests.sh and workflow follow-ups - #97
Merged
Merged
Conversation
The four workflow steps named "Functional MySQL 8.0 mysqli" and "Functional MySQL 8.0 pdo_mysql" passed "-d mariadb", so they ran the same database as the two MariaDB steps directly above them and only duplicated their coverage under a MySQL name. No workflow invoked "-d mysql" at all, leaving MySQL untested on both core versions. They run "-d mysql" now. The harness needs nothing else - the "mysql" branch, the "mysql-func" container and "IMAGE_MYSQL" have always been there and were simply never reached from CI. The readiness budget covers the slower startup: "waitFor" allows 60 seconds since the docker adoption, and mysql:8.0 needs 12-13 seconds under docker to initialise a fresh data directory. No version is pinned here. "handleDbmsOptions" defaults "-i" to 8.0 for MySQL, which is what the step names promise, so this commit changes the database and nothing else. The explicit "-i" that makes every label verifiable follows in its own commit. The MariaDB steps are left alone. They claim 10.5 while passing no "-i" and therefore run the 10.4 default, which is that same label defect and not part of this change.
"${USERSET}" passes "--user ${HOST_UID}" without a group, so a docker
container runs as "uid=${HOST_UID} gid=0(root)". A "--tmpfs" is created
"root:root" and inherits the mode of its host mountpoint, which is 0755
at a CI umask of 0022 - group 0 gets "r-x" only, and the functional
sqlite suite fails with "unable to open database file".
The docker adoption worked around this by mounting the sqlite tmpfs
"mode=1777". That is correct and umask independent, but it treats the
one mount rather than the missing group.
The mount options move into "TMPFS_MOUNT_OPTIONS", assigned next to the
container parameters they belong to, so the two container binaries can
state what they actually need: docker adds "uid" and "gid" and keeps
"mode=1777", rootless podman maps the container root to the host user
and needs neither, keeping "mode=1777" for the rootful case.
"${USERSET}" is deliberately left alone. It is evaluated for both
container binaries, and appending a group there would change which host
group rootless podman maps the container to, which is a different
question from who owns a tmpfs.
The comment moves along with the options and now names the umask that
makes this visible: at the 0002 of a typical workstation the mountpoint
comes up 0775 and the defect cannot be reproduced at all.
Three defects sat on the single "renderDocumentation" run line, so they
are fixed together rather than by editing that line three times.
It hardcoded "-it" on top of "${CONTAINER_INTERACTIVE}", which is
already emptied when "CI" is "true". docker rejects "-t" without a
terminal and aborts with "cannot attach stdin to a TTY-enabled
container because stdin is not a terminal". No workflow on this branch
invokes the suite, so nothing is red today, but it is a hard failure
for anyone rendering locally with "-b docker" and it would bite the
moment a documentation workflow is added, as "main" already has one.
It inlined "${CONTAINER_INTERACTIVE}" while
"DOCUMENTATION_COMMON_PARAMS" was assigned for both container binaries
and never used. That cost the container "--rm", so every render left a
stopped container behind, and under docker it cost "${USERSET}", so the
rendered output was written as root into a bind mounted project. The
suite renders documentation, it does not talk to a database container,
so it now uses the parameters built for it. The bind mount the run line
repeated is part of them and is dropped from the line.
"CI_PARAMS" is assigned as well. It is expanded into the podman
container parameters and into the mock server container but was never
assigned, and the mock server line sits outside the podman branch, so
the empty expansion reaches the docker path too. It is not a leftover:
the harnesses this one is modelled on treat it as an escape hatch a
caller can export to inject additional container flags, so the
assignment is added rather than the references removed.
The working directory is unchanged: neither the old line nor the
parameters set one, so the image keeps using its own default.
Ten functional workflow steps named a database version in their label and then passed no "-i", so they ran whatever "handleDbmsOptions" defaults to. The four MariaDB steps claimed 10.5 and ran 10.4. The four MySQL and the two PostgresSQL steps happened to match their label, because 8.0 and 10 are the defaults, but only by coincidence: a changed default would have silently moved them too. Each of the ten now passes the version its name promises, so the label is the contract and no longer a comment that has to be checked against the harness. The values are unchanged in effect except for MariaDB, which moves 10.4 -> 10.5 and is the point of the change. Every version is inside the allowed list of this branch's own "handleDbmsOptions": mariadb 10.4-11.4, mysql 8.0-8.4, postgres 10-16. Nothing had to be approximated. The two "Functional SQLite" steps stay as they are. The "sqlite" arm rejects "-i" outright, and no version is named in their label. The matrix is deliberately not widened. "main" runs its "pdo_mysql" rows on MariaDB 10.11 and MySQL 8.4 while this branch labels them 10.5 and 8.0; making these labels true keeps the narrower matrix this branch already has. Aligning the two branches would add and remove matrix entries, which the follow-ups explicitly rule out, and is left as a separate decision.
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.
Follow-up work from the CI pipeline adoption (WVP-106) for branch
1.Addresses DPL-203 (T1, T2, T3, T4) and DPL-213 (the explicit
-ilabelsweep, which is scoped to this branch only). Branch
mainis handled in its ownpull request and needs no label work — it is the reference state DPL-213 points
at.
What applied
-d mysqlanywhere on this branch beforehand.renderDocumentationhardcodes-it--userpassed without a group idCI_PARAMSnever assignedDOCUMENTATION_COMMON_PARAMSunused-iCommits
[TASK] DPL-203: Run MySQL functional jobs on MySQLThe four steps named
Functional MySQL 8.0 …passed-d mariadb, duplicatingthe MariaDB steps directly above them under a MySQL name; there was no
-d mysqlinvocation on the branch at all. They run
-d mysqlnow. The harness needednothing else — the
mysql)arm, themysql-funccontainer andIMAGE_MYSQLhave always been there and were simply never reached from CI. The
waitForcapof 60 seconds, raised in WVP-106 precisely because
mysql:8.0needs 12-13s underdocker, was confirmed still in place before making the steps real.
[TASK] DPL-203: Own the sqlite tmpfs from the host${USERSET}passes a uid but no group, so a docker container runs asuid=${HOST_UID} gid=0and the--tmpfscomes uproot:rootwith the mode ofits host mountpoint. The options move into
TMPFS_MOUNT_OPTIONS, assigned percontainer binary: docker adds
uid/gid, rootless podman needs neither.The existing
mode=1777is kept in both arms — do-not-touch list.${USERSET}itself is deliberately left alone.[TASK] DPL-203: Render docs with own parametersThree defects sat on the one
renderDocumentationrun line, so they are fixedtogether: the hardcoded
-iton top of${CONTAINER_INTERACTIVE}is gone (T2),the line now uses
DOCUMENTATION_COMMON_PARAMS, which was built for bothcontainer binaries and never used (T4b), and
CI_PARAMSgets itsCI_PARAMS="${CI_PARAMS:-}"assignment (T4a). Using the intended parameters alsorestores
--rmand, under docker,${USERSET}. The working directory isunchanged — neither the old line nor the parameters set one.
[TASK] DPL-213: Pin the database versions in CIFunctional MariaDB 10.5 mysqli-i, ran 10.4-i 10.5Functional MariaDB 10.5 pdo_mysql-i, ran 10.4-i 10.5Functional MySQL 8.0 mysqli-i, default 8.0-i 8.0Functional MySQL 8.0 pdo_mysql-i, default 8.0-i 8.0Functional PostgresSQL 10-i, default 10-i 10Functional SQLite-iis rejected for-d sqlite10 steps. Only MariaDB changes in effect (10.4 → 10.5); the others were already
running what their label claimed, but only because they happened to match the
harness default — a changed default would have moved them silently.
Deliberately not done
The matrix is not widened.
mainruns itspdo_mysqlrows on MariaDB 10.11and MySQL 8.4; this branch labels them 10.5 and 8.0. The decision taken is to make
this branch's labels true as they are, keeping its narrower matrix. Aligning
the two branches would add and remove matrix entries, which the WVP-106 follow-ups
explicitly forbid. This is a real drift and wants a separate decision — noted
here as follow-up, not resolved in this pull request.
Other
main→1drift found while verifying, all out of scope here and listedso it is not lost:
runs-on: ubuntu-22.04+actions/checkout@v4versusubuntu-latest+@v6onmain; nodocumentation.ymland notestcore14.ymlon this branch;
waitForruns in${IMAGE_ALPINE}rather than${IMAGE_PHP};the phpunit commands lack the
--exclude-group not-core-${CORE_VERSION}thatmainhas; andrenderDocumentationstill hardcodes the render-guides imageliteral although
IMAGE_DOCSis assigned to exactly that value.The commented-out
checkRstblock in both workflows is left commented — it existsidentically on
mainand is dormant, not a defect.Correction to the issue text
DPL-203 T4a says
CI_PARAMSis "referenced in the podman branch". It is alsoexpanded on the unconditional deepl-mockserver
runline inside thefunctionalsuite, so the empty expansion reaches the docker path too — 4 callsites, not 3.
DPL-203 T4b's rationale does not fit this branch: it says
renderDocumentationuses
CONTAINER_COMMON_PARAMSand therefore picks up--network,--add-hostand a stray
-w. On this branch it inlined${CONTAINER_INTERACTIVE}instead, sothe variable was dead but that particular side effect never existed here. It is
accurate for
main. The conclusion — use the variable built for the job — holdseither way.
Verification
Static, plus this pull request's own CI. The functional suites were deliberately
not run locally — this is one of 20+ branches in the same sweep and each pull
request's CI exercises them.
Structural comparison of every workflow against
origin/1— YAML parsed on bothsides, everything except the
runstrings compared: identical. Exactly 10runstrings differ, all of them the intended label steps; no job, step, matrixentry or trigger added, removed or reordered.
Every
-iwas fed through this branch's ownhandleDbmsOptions, extractedfrom
runTests.shand executed, to prove the value is accepted and that theresulting
DBMS_VERSIONis the one the step name claims. All 12 functional stepspass, including the two SQLite steps confirmed to carry no
-i.Substantive property assertions, run over non-comment lines only so that an
inserted comment cannot satisfy a check (the trap the issue calls out):
--tmpfsuses${TMPFS_MOUNT_OPTIONS}; the literal option string isgone from the code
TMPFS_MOUNT_OPTIONSis assigned exactly twice, and both assignments stillcarry
mode=1777uid=${HOST_UID},gid=${HOST_GID}USERSET="--user $HOST_UID"is unchanged, one occurrenceCI_PARAMS="${CI_PARAMS:-}"appears exactly once-itremains on any code line;renderDocumentationruns with${DOCUMENTATION_COMMON_PARAMS}CONTAINER_INTERACTIVE="-it --init", thewaitForcap of60 and its
cleanUpabort are unchanged againstorigin/1-b dockerflag count across the workflows is unchanged (36), and theWVP-106 workflow header comment is byte-identical in both files
Acceptance
Build/Scripts/runTests.shand.github/workflows/*-ion any-d sqlitestep-b dockerflags, WVP-106 workflow headercomment, sqlite
mode=1777,waitForcap of 60 with itscleanUp; exit 1,CONTAINER_INTERACTIVE="-it --init"wrapped at 72