Skip to content

fix(ci): trigger Rust CI on libvmaf public header changes - #1541

Closed
lusoris wants to merge 1 commit into
masterfrom
fix/rust-ci-path-filters
Closed

lusoris wants to merge 1 commit into
masterfrom
fix/rust-ci-path-filters

Conversation

@lusoris

@lusoris lusoris commented Sep 23, 2026 •

Copy link
Copy Markdown
Contributor

Summary

Under ADR-0313 a check that does not report on a pull request counts as passed, which turned .github/workflows/rust-ci.yml's too-narrow paths: filter into a silent bypass. bindings/rust/vmafx-sys/build.rs compiles C headers from core/include/libvmaf/libvmaf.h via bindgen, but rust-ci.yml previously filtered only on bindings/rust/**, core/src/feature/rust/**, Cargo.*, and deny.toml. This PR adds core/include/libvmaf/** to workflow path filters and CI impact selectors, accompanied by workflow contract and impact routing regression tests.

Type

  • feat — new feature
  • fix — bug fix
  • perf — performance improvement
  • refactor — no behavior change
  • docs — documentation only
  • test — test-only
  • build / ci — tooling / infra
  • port — cherry-pick from upstream Netflix/vmaf
  • sycl / cuda / simd — backend-specific

Checklist

  • Commits follow Conventional Commits (the commit-msg hook enforces this).
  • make format && make lint is green locally.
  • Unit tests pass: meson test -C build.
  • If I touched any SIMD/GPU code path, I ran /cross-backend-diff and the worst ULP is ≤ 2.
  • If I touched a feature extractor with SIMD/GPU twins, I either updated every twin or listed the gap under "Known follow-ups" below.
  • If I added a new .c / .cpp / .cu / .h / .hpp, it has the appropriate license header (see CONTRIBUTING.md).
  • If this is a breaking change, the commit message uses ! or BREAKING CHANGE: and the migration path is documented below.
  • If this PR adds an ADR, the ADR row lives in docs/adr/_index_fragments/<NNNN-slug>.md and the slug is appended to docs/adr/_index_fragments/_order.txt — do not edit docs/adr/README.md directly (regenerated by scripts/docs/concat-adr-index.sh; see ADR-0221).

Bug-status hygiene (ADR-0165)

  • docs/state.md updated in this PR with a row
    in the appropriate section (Open / Recently closed / Confirmed
    not-affected / Deferred), OR no state delta: REASON.

Netflix golden-data gate (ADR-0024)

  • I did not modify any assertAlmostEqual(...) score in the Netflix golden Python tests.
  • If I believe a golden value must change, I have explained why below AND pinged @lusoris for a CODEOWNERS exception.

Cross-backend numerical results

N/A - CI and workflow path filtering defect.

Deep-dive deliverables (ADR-0108)

  • Research digest — docs/research/2080-rust-ci-path-filter-coverage.md written and linked.
  • Decision matrix — captured in docs/research/2080-rust-ci-path-filter-coverage.md §3.
  • AGENTS.md invariant note — added to bindings/rust/vmafx-sys/AGENTS.md.
  • Reproducer / smoke-test command — pasted below under "Reproducer".
  • CHANGELOG fragment — changelog.d/fixed/rust-ci-path-filter-libvmaf-headers.md.
  • Rebase note — entry added to docs/rebase-notes.md under fix/rust-ci-path-filters.

Reproducer

# Proves red before fix:
python3 -m unittest scripts/ci/tests/test_rust_ci_workflow_contract.py
python3 -m unittest scripts/ci/tests/test_ci_impact.py -k test_libvmaf_public_header_change_selects_rust_and_c_core

Known follow-ups

This PR resolves only the confirmed Rust CI blind spot. Canonical BUG-098 remains open until the residual path-filter audit covers FFmpeg, container, Doxygen, and Intel LLVM workflows.

Under ADR-0313 a check that does not report on a pull request counts as
passed, turning a too-narrow paths: filter into a silent bypass.
bindings/rust/vmafx-sys/build.rs compiles C headers from
core/include/libvmaf/libvmaf.h via bindgen, but
.github/workflows/rust-ci.yml previously filtered only on
bindings/rust/**, core/src/feature/rust/**, Cargo.*, and deny.toml.

Consequently, changes touching public C library headers silently bypassed
vmafx-sys CI and cargo-deny despite altering code compiled during the
Rust FFI build.

Fix this by:
- Adding "core/include/libvmaf/**" to on.push.paths and
  on.pull_request.paths in .github/workflows/rust-ci.yml.
- Adding "core/include/libvmaf/*" and "core/include/libvmaf/**" to
  selectors.rust.patterns in .github/ci-impact.json.
- Adding regression workflow contract tests in
  scripts/ci/tests/test_rust_ci_workflow_contract.py.
- Adding regression routing test test_libvmaf_public_header_change_selects_rust_and_c_core
  to scripts/ci/tests/test_ci_impact.py.
- Documenting the CI trigger requirement in bindings/rust/vmafx-sys/AGENTS.md,
  research digest 2080, rebase notes, and changelog fragment.
- Updating docs/state.md to move T-PATH-FILTERS-WEAKEN-NEW-GATES-2026-09-22
  to Recently closed.

Closes BUG-098.
@github-actions github-actions Bot added the type:bug Something isn't working label Sep 23, 2026
@lusoris

lusoris commented Sep 26, 2026

Copy link
Copy Markdown
Contributor Author

Superseded by #1561 (squash dd51d00). Instead of adding core/include/libvmaf/** to the Rust workflow's path filter, the train removed workflow-level path filters from all seven affected workflows; rust-ci.yml now runs on every PR through the ADR-1140 impact planner, and .github/ci-impact.json routes core/include/libvmaf/** to the Rust lane. docs/state.md records BUG-098 / T-PATH-FILTERS-WEAKEN-NEW-GATES-2026-09-22 as fixed. This branch's commit 9f72ec3 is therefore obsolete, not lost.

@lusoris lusoris closed this Sep 26, 2026
@lusoris
lusoris deleted the fix/rust-ci-path-filters branch October 6, 2026 08:29
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

type:bug Something isn't working

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant