A batch's workflows are chosen by on.pull.base, but whether each is skipped is decided by wf.skipped(pull, …) with pull = subject.pull.is_some() (crates/knotless-run/src/lib.rs around line 1231). A batch has no pull, so it is filtered by on.push.paths (crates/knotless/src/workflow.rs, Workflow::skipped).
So a workflow with paths only under pull (as web, lexicons and shots have here) runs on every batch, and one whose push.paths differ from its pull.paths is skipped or run by the wrong list. It errs on the side of running, so nothing unchecked lands, but batches run more than they need to.
Expected: a batch is a candidate for pulls, so filter it by on.pull.paths against what the batch changes from its base.
A batch's workflows are chosen by
on.pull.base, but whether each is skipped is decided bywf.skipped(pull, …)withpull = subject.pull.is_some()(crates/knotless-run/src/lib.rs around line 1231). A batch has nopull, so it is filtered byon.push.paths(crates/knotless/src/workflow.rs,Workflow::skipped).So a workflow with
pathsonly underpull(as web, lexicons and shots have here) runs on every batch, and one whosepush.pathsdiffer from itspull.pathsis skipped or run by the wrong list. It errs on the side of running, so nothing unchecked lands, but batches run more than they need to.Expected: a batch is a candidate for pulls, so filter it by
on.pull.pathsagainst what the batch changes from its base.Found while writing the runner's design docs.