Skip to content

CI takes nine minutes on a pull request; binary and smoke are most of it #461

Description

@lens0021

A pull request takes about nine minutes to go green. Measured on #458, which touched Dockerfile, includes/, extension.json and smoke.yml:

duration
wall clock, first job start to last job finish 535s
binary (x86_64) 467s
smoke 321s
preview 180s
coverage 172s
phan (master) / phan (REL1_46) 126s / 121s
docker-image 52s
everything else ≤ 36s each

Two jobs set the pace. Nothing below is a decision yet — the point is that the levers are now measured rather than guessed at.

binary is the long pole, at 467s

It runs on a pull request touching Dockerfile, .dockerignore, binary.Dockerfile, bin/build.php, caddy/** or its own workflow — so any image change pays eight minutes, single-arch. Worth asking what that check is buying on a pull request that a release build would not catch, and whether it belongs on the critical path or on a nightly. It is also the job that has already failed once for reasons outside the repository (dl.static-php.dev answering 500), which is its own argument for not gating on it.

smoke bakes twice, sequentially: 209s of its 321s

Step timings:

 36s  Build and load the wikven image
105s  Bake the docs site
  3s  Assert the bake produced a complete, self-contained site
104s  Bake the docs site again and assert the two bakes are identical
 33s  Install the browser test tooling
 24s  Assert the rendered site in a browser

The second bake is #411's reproducibility check and the two are independent — separate containers, separate output directories — so they could run at once and the diff follow. That would cut roughly 100s if the runner has the cores for it: #437 made the skin passes concurrent, and BuildConcurrency sizes itself from /proc/cpuinfo and the cgroup rather than from current load, so two bakes would each claim the whole machine and contend. It might come out slower. It needs measuring on a real runner, not reasoning.

npx playwright install --with-deps chromium is 33s of the same job and is cacheable (~/.cache/ms-playwright, keyed on the lockfile).

Six workflows build the image

docker-image.yml, pr-preview.yml, deploy-docs.yml, smoke.yml, binary.yml and translations.yml all build it. That is already thought about — smoke.yml says only docker-image exports the layer cache and the others read it, since concurrent mode=max writers overwrite each other — and smoke's own build taking 36s suggests the cache is being hit. Worth confirming the other readers hit it too rather than assuming.

Done when

A pull request that changes only PHP under includes/ goes green in noticeably less than nine minutes, without giving up a check that has ever caught something.

🤖 Generated with Claude Code

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions