LearnNewsExamplesServices
Frontmatter
id12705
titlePath-scope test.yml CI so docs-only PRs skip unit/integration suites
stateClosed
labels
enhancementaibuild
assigneesneo-gpt
createdAtJun 8, 2026, 1:39 AM
updatedAtJun 8, 2026, 1:20 PM
githubUrlhttps://github.com/neomjs/neo/issues/12705
authorneo-opus-vega
commentsCount2
parentIssuenull
subIssues[]
subIssuesCompleted0
subIssuesTotal0
blockedBy[]
blocking[]
closedAtJun 8, 2026, 1:20 PM

Path-scope test.yml CI so docs-only PRs skip unit/integration suites

Closed v13.0.0/archive-v13-0-0-chunk-16 enhancementaibuild
neo-opus-vega
neo-opus-vega commented on Jun 8, 2026, 1:39 AM

Context

Surfaced during the review of PR #12704 — a Markdown-only release-note edit (resources/content/release-notes/v13.0.0.md). Both unit and integration-unified triggered and sat pending on a change that cannot affect them, forcing a reviewer §7.6 ("don't approve over pending CI") judgment on a trivial docs PR. The friction recurs on every docs/content PR: release notes, learn/**, resources/content/** all pay the full code-CI wait and re-trigger the same reviewer dilemma.

Live latest-open sweep: checked the latest 20 open issues at 2026-06-07T23:37Z; no equivalent CI-trigger-scoping ticket (closest is #10945, CLOSED, which expands integration coverage — opposite intent).

The Problem

.github/workflows/test.yml (lines 3-7) triggers on pull_request: branches: [dev] and push: branches: [dev] with no paths / paths-ignore filter, running the matrix.suite: [integration-unified, unit] on every PR regardless of changed paths. For docs/content-only changes these suites are structurally incapable of failing from the diff, yet they run (~5-11 min observed on #12704 / #12697), consume CI compute, and gate docs PRs on irrelevant checks.

Operator read (@tobiu): integration for a Markdown change clearly should not trigger; unit probably not either — but verify, since a few unit specs may parse content (release-note frontmatter, SEO route generation, the content-sync pipeline).

The Architectural Reality

  • Trigger lives at the workflow level in .github/workflows/test.yml on.pull_request — GitHub path filters (paths / paths-ignore) are workflow-level, not per-matrix-job, so a naive filter skips BOTH integration-unified and unit together.
  • Gotcha — required-check interaction: if unit / integration-unified are required status checks under branch protection, a naive paths-ignore leaves them unreported on docs PRs → GitHub shows "expected but missing" → the docs PR can never satisfy the merge gate. The fix must keep required checks satisfiable on skipped PRs (a "skipped → success" shim job, a dorny/paths-filter gate with per-job if:, or removing them from the required set), not just add paths-ignore.

The Fix

  1. Audit .github/workflows/test.yml triggers and the branch-protection required-check set.
  2. Scope the heavy suites so docs/content-only PRs skip them — e.g. workflow-level paths-ignore for resources/content/**, learn/**, **/*.md, paired with a status-shim if they are required checks; OR a paths-filter change-detection job gating each suite via if: (needed if unit must still run for a verified content dependency).
  3. V-B-A before excluding unit: grep the unit suite for content/release-notes/frontmatter fixtures. Document the finding either way (skip unit too, or keep it for the named dependency).
  4. Document the path-scope rationale inline in the workflow so the trigger scope is self-explaining.

Acceptance Criteria

  • A docs/Markdown-only PR (e.g. a resources/content/release-notes/*.md edit) does NOT trigger integration-unified.
  • Same for unit, UNLESS a verified unit-spec content dependency requires it — document the V-B-A result either way.
  • Code PRs (src/**, ai/**, test/**, build config) still trigger the full suites unchanged.
  • A docs-only PR is NOT left merge-blocked by an unreported required check (the gotcha above is explicitly handled).
  • lint-pr-body / lint-pr-review-body / CodeQL still run on docs PRs as appropriate.
  • Path-scope rationale documented in the workflow file.

Out of Scope

  • Restructuring the test suites themselves — this is trigger-scoping only.
  • The reviewer-side §7.6 CI-gate discipline — separate; this ticket removes the friction at its source rather than relitigating it per-PR.

Related

  • Surfaced by the PR #12704 review (docs-only PR, irrelevant code-CI pending).
  • Sibling friction: pr-review-guide.md §7.6 reviewer CI-gate.

Origin Session ID: 728442d6-a2a0-4481-a631-a3112ce6d703 Retrieval Hint: "path-scope test.yml docs-only PRs skip unit integration CI trigger"

tobiu referenced in commit ed11537 - "feat(ci): path-scope heavy test suites (#12705) (#12756) on Jun 8, 2026, 1:20 PM
tobiu closed this issue on Jun 8, 2026, 1:20 PM