Phase 3, week 23retrospective

Upstream CI green

CI must be green for every supported target; a locally passing patch that breaks bots is not ready.


CI is a configuration matrix, not your machine

Pre-merge CI builds and tests configurations you do not have: other host targets, other backends, assertions on, sanitizers on. The failures that catch a locally green patch are the ones about assumptions you never noticed. A test that binds a riscv triple needs REQUIRES: riscv-registered-target. A test that assumes x86 needs the corresponding guard. A test that assumes a default VLEN needs to stop assuming it.

Read to the first error

A failing build produces a cascade, and the summary describes the last symptom. Reproduce with the same configuration: the same -DLLVM_TARGETS_TO_BUILD, assertions enabled, the same backend list for a compiler project. Then read the log upward until the first line that is wrong rather than caused.

Re-run once, then file

A single retry separates a flake from a break. If it reproduces, treat it as a real failure even when it is not yours: a flaky test in the suite will fail your pull request again in review. Do not disable a test to get green, and use XFAIL only with a linked issue and a plan for it.

Keep the branch stable during a run

Force-pushing while checks run produces results for a commit that no longer exists, and the green tick may belong to the previous revision. Push, wait for the run, read it.

Things that break

A green tick from a lite configuration that never built your target. A REQUIRES line added to hide a genuine failure on another target rather than to describe a missing tool. A test disabled to clear the queue, which removes the regression evidence you just created. And a stale run read as current.

Sources

A version records the documentation the claim was checked against, not a house pin. Confirm flags with --help on the release you installed.

Check yourself

A test passes locally and fails on one bot. What is the likely cause?

What should you do with a test that fails only in one configuration?

Why read the log to the first error rather than the summary?

0 / 3 correct

← back to the map