Skip to content

ci: skip PR runs of workflows the change cannot affect - #435

Closed
napetrov wants to merge 1 commit into
mainfrom
dev/napetrov/ci-path-filters
Closed

napetrov wants to merge 1 commit into
mainfrom
dev/napetrov/ci-path-filters

Conversation

@napetrov

Copy link
Copy Markdown
Contributor

Part of #432

Summary

pull_request touches only...          skips
bindings/c/**, examples/c/**          linux, linux-arm, macos, cpp-runtime, wheel
bindings/cpp/**                       linux, linux-arm, macos, c-api, wheel
bindings/python/**, examples/python   linux, linux-arm, macos, c-api, cpp-runtime
tests/**, benchmark/**, utils/**      c-api, cpp-runtime, wheel
**/*.md, CODEOWNERS, dependabot.yml   all six build workflows
another workflow's yml / scripts      the workflows that don't use them
  • Each of the six build workflows gets a pull_request.paths-ignore list.
  • push to main and workflow_dispatch are unchanged and still run everything.
  • They are ignore-lists, so a path that isn't listed (a new directory, include/**, cmake/**) still triggers every workflow.
  • Why the bindings can be skipped for core workflows: the root CMake project never builds bindings/; only bindings/{c,cpp} pull in the core via add_subdirectory(../..).
  • Also drops -DSVS_EXPERIMENTAL_LEANVEC=YES from ARM and macOS. That option no longer exists; it is only mentioned in HISTORY.md.

Evidence

  • Before: C API-only PRs ran the full x86/ARM/macOS core matrix on every push. [C API] Add logging support (logger handle) #408 is one example: 2.5k min of build-linux alone.
  • After: I replayed the new filters (same glob semantics) against the changed files of every PR updated 09-16..10-16:
PR-event runner-minutes in window : 71,044
skipped by the new filters        : 12,175  (17%)
PRs where something is skipped    : #393 #403 #404 #408 #410 #411 #416 #428 #429 #430

Checks:

  • PRs touching include/ or core plus bindings still run every workflow.
  • pre-commit (check yaml) passes, and actionlint reports no issues.
  • No required status checks are configured on main, so a skipped workflow cannot leave a PR stuck waiting on a pending check.

Merge Danger

Door: two-way

Blast Radius: CI-only

  • If a listed path does in fact affect a skipped workflow, a break would surface on the next push to main instead of on the PR. The lists were derived from the CMake structure: bindings/ is not built by the root project; tests/, utils/ and benchmark/ are off unless SVS_BUILD_* are set, which the binding scripts don't do.
  • If required checks are added later, any required workflow must be removed from the filters, or a skipped run will block merges.
  • The job names are unchanged.

🤖 Generated with Claude Code

Add pull_request paths-ignore filters to the six build workflows. The root
CMake project never builds bindings/, so a C API-only PR no longer runs the
x86/ARM/macOS core matrix, and docs- or CODEOWNERS-only PRs run nothing
heavy. Pushes to main are unfiltered. Filters are ignore-lists, so an
unlisted path still triggers the workflow.

Replayed against the PRs of the last 30 days this skips ~12k of ~71k
PR-event runner-minutes.

Also drop -DSVS_EXPERIMENTAL_LEANVEC=YES from the ARM and macOS builds;
the option no longer exists in the CMake project.
@ethanglaser

ethanglaser commented Oct 16, 2026 •

Copy link
Copy Markdown
Member

Thanks for checking on this, closing in favor of #436

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.

2 participants