php-compiler

MiniWebApp CI gate ladder

Progressive stages for examples/003-MiniWebApp/ so contributors know which checks are default-on in full CI vs opt-in during iteration. Umbrella tracker: #472.

Probe current status:

make miniwebapp-gates
# or: ./script/miniwebapp-gates.sh
# or: ./phpc doctor --gates

The script prints [x] / [ ] per stage and suggests the next blocker. Use --no-lint to skip the phpc lint --all probe when iterating on later stages.

Stage ladder

Matches script/miniwebapp-gates.sh output order (lint → serve → web-smoke → AOT link → execute → deploy).

Stage Check Env var / command Default on master CI hook Tracking
0 Skeleton opt-out MINIWEBAPP_LINT_GATE=0 opt-out only web-smoke.sh continues on lint failure #621
1 Lint green MINIWEBAPP_LINT_GATE=1 (default) make web-smoke fails on lint regression #539, #621
1b VM CLI route matrix MINIWEBAPP_VM_CLI_GATE=1 (default) ci-fast.shMiniWebApp*VmCli #597
2 PHPUnit serve MINIWEBAPP_SERVE_GATE=1 (default) ci-local.sh, ci-fast.shServeTest @group miniwebapp #641, #470
3 Examples web-smoke wired in examples-web-smoke.sh make examples-web-smoke includes 003 curls #461
3b ci-local shell smoke MINIWEBAPP_WEB_SMOKE_GATE=1 (default) ci-local.shexamples-web-smoke.sh --miniwebapp-only #664, #633
4a AOT dry-run phpc build --project examples/003-MiniWebApp --dry-run probe (LLVM 9) @group aot-lint in ci-local.sh #624, #675
4b AOT link MINIWEBAPP_AOT_LINK_GATE=1 (default) ci-local.shExamplesCompileTest @group aot-link / @group miniwebapp #754, #454
4b2 AOT bisect ladder MINIWEBAPP_AOT_BISECT_GATE=1 opt-in (default off) miniwebapp-gates.sh probe; ci-local.sh --group miniwebapp-bisect #879, #764
4b2 execute AOT CLI execute MINIWEBAPP_AOT_EXECUTE_GATE=1 default on ci-local.shci_run_miniwebapp_aot_execute after @group aot-link #747, #791
4c AOT shell smoke (003 slice) EXAMPLES_AOT_SMOKE_GATE=1, EXAMPLES_AOT_SMOKE_ONLY=003 ❌ (blocked on execute) ci-local.shexamples-aot-smoke.sh #683, #485
4d Deploy smoke DEPLOY_SMOKE_GATE=1 (default) 001/002 + 003 execute when gated ci-local.shdeploy-smoke.sh; 003 execute via DEPLOY_SMOKE_003_EXECUTE=1 or MINIWEBAPP_AOT_EXECUTE_GATE=1 (#745) #718

Defaults for MINIWEBAPP_SERVE_GATE, MINIWEBAPP_WEB_SMOKE_GATE, MINIWEBAPP_AOT_LINK_GATE, MINIWEBAPP_AOT_EXECUTE_GATE, EXAMPLES_AOT_SMOKE_GATE, and DEPLOY_SMOKE_GATE are exported from script/ci-defaults.env. Ladder-only vars (MINIWEBAPP_LINT_GATE, MINIWEBAPP_AOT_BISECT_GATE) are read directly by their scripts — see local-ci-matrix.md § MiniWebApp gates for the full env table.

Quick commands

# Stages 0–1: lint + VM smoke
make web-smoke
MINIWEBAPP_LINT_GATE=0 make web-smoke          # stage 0 skeleton

# Stage 1b
MINIWEBAPP_VM_CLI_GATE=1 ./script/ci-fast.sh

# Stage 2: skip during iteration
MINIWEBAPP_SERVE_GATE=0 ./script/ci-local.sh --filter ServeTest

# Stage 3
make examples-web-smoke

# Stage 3b: skip shell PATH_INFO curls
MINIWEBAPP_WEB_SMOKE_GATE=0 ./script/ci-local.sh

# Stage 4a
./phpc build --project examples/003-MiniWebApp --dry-run

# Stage 4b
./script/ci-local.sh --filter test003MiniWebAppBuildLinks
MINIWEBAPP_AOT_LINK_GATE=0 ./script/ci-local.sh --filter ExamplesCompileTest   # skip link during iteration (#754)

# Stage 4b2 execute (default on; skip with MINIWEBAPP_AOT_EXECUTE_GATE=0)
./script/ci-local.sh --filter MiniWebAppAotExecuteTest

# Stage 4c
EXAMPLES_AOT_SMOKE_ONLY=003 ./script/examples-aot-smoke.sh

# Stage 4d
make deploy-smoke
DEPLOY_SMOKE_GATE=0 ./script/ci-local.sh       # skip 001/002 deploy smoke

# Stage 4b2 bisect (opt-in)
MINIWEBAPP_AOT_BISECT_GATE=1 ./script/miniwebapp-gates.sh
./script/miniwebapp-aot-bisect.sh --list

Set any gate to 0 to skip that stage during fast iteration. Full CI: ./script/ci-local.sh or make test.