Skip to content

Keep the local CI harness, and document it - #11

Merged
zelti merged 2 commits into
mainfrom
docs/local-ci-harness
Aug 24, 2026
Merged

zelti merged 2 commits into
mainfrom
docs/local-ci-harness

Conversation

@zelti

@zelti zelti commented Aug 24, 2026 •

Copy link
Copy Markdown
Owner

Four CI failures this week were not in the code but in the step: a flag passed locally and not in CI, a value an earlier step was supposed to set, a pipeline that behaves differently under pipefail. Running the fifth one locally caught a real bug instead — nginx and apache racing for port 80, which a mocked docker had hidden.

So the harness stops being a scratch file.

forge start

.github/scripts/run-step.py                   # list every step
.github/scripts/run-step.py "the forge command works"
.github/scripts/run-step.py -x "<name>"       # trace, to find the silent grep

It reads .github/workflows/ci.yml and runs the step's run: block verbatim under bash -e, exactly as GitHub does. Verbatim is the whole point — retyping the step is where the errors came from.

What the README says it cannot do

Rather than implying full local coverage:

  • Steps are not independent. Some read fixtures an earlier step created.
  • Two kinds cannot pass locally: the HTTPS ones use curl without -k on purpose, so they need the CA in the system trust store; the DNS ones rewrite the system resolver. Both need sudo, and the README says which command to run if you want them anyway.

Written into both READMEs.

Also

run-step.py joins drive-install.py in the compile check.

Noticed while writing into both READMEs: they match at ## level but their ### subsections have drifted — English has Starting and Stopping, Development Workflow and Common Issues; Spanish has Xdebug. Folded into task 35, which rewrites the READMEs anyway, rather than standing as its own task.

zelti added 2 commits August 23, 2026 21:07
run-step.py moves out of scratch and into .github/scripts/. It reads the
workflow and runs a step's run: block verbatim under bash -e, the way
GitHub does, so a step can be checked before a six-minute round trip.

Verbatim is the point: every CI failure here came from checking a
hand-typed variant rather than the step itself.

The README section, in both languages, says what it cannot do -- steps
are not independent, and the HTTPS and DNS ones need sudo to pass
locally -- rather than implying full coverage.

Also notes task 41: the two READMEs match at ## level but their ###
subsections have drifted apart.
It was task 41 on its own, but it is work for the README pass, not a
separate job. Task 35 now carries it, along with a note that task 38
removed the last docker compose exception that pass had to write around.
@zelti
zelti merged commit 5952c73 into main Aug 24, 2026
2 checks passed
@zelti
zelti deleted the docs/local-ci-harness branch August 24, 2026 01:19
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant