Skip to content

docs/** is in no CI path filter, so astro check never runs on documentation changes #34

Description

@yashau

Symptom

A change to docs/** runs no documentation build in PR CI. js-check is filtered out, and js-check is the job that would have validated it.

Observed on #33: six files changed, four of them under docs/ (including a brand-new page), and js-check reported skipping. The only reason that page is known to build is that astro check was run locally before pushing.

Mechanism

packages/docs is a renderer, not a copy — docs-source.ts:33 sets DOCS_BASE = "../../docs" and the Astro loader reads the originals out of the repo-root docs/ directory. So the content of docs/ is an input to the packages/docs build.

js-check runs mise run typecheck, which fans out to packages/docs typecheckastro check.

But the js filter in ci.yml (lines 90–115) lists packages/** and never docs/**. Editing the content the docs package renders therefore skips the job that renders it.

What reaches main unchecked

Anything astro check would catch in documentation content: invalid or missing frontmatter, a sidebar.order of the wrong type, a file that breaks the content-collection schema, a bad component reference. Not broken internal links — Starlight does not validate those by default, so that gap is separate and pre-existing.

Because docs-release.yml is tag-triggered, the first thing that fails is a release, on a docs-v* tag, at the point when the intent is to publish rather than to fix.

Proposed fix

Add docs/** to the js filter, next to the entries that are already there for this exact reason:

            js: &js
              - *common
              ...
              - 'patches/**'
              # `packages/docs` renders `docs/` rather than containing it (see
              # DOCS_BASE in docs-source.ts), so the documentation content is an
              # input to that build and `astro check` has to see a change to it.
              - 'docs/**'

The cost is that a docs-only PR now runs the whole of js-check — typecheck plus the JS suites — for a markdown edit. If that is judged too slow, the alternative is a dedicated docs filter feeding a job that only runs pnpm --filter @prick/docs run typecheck. The one-line filter entry seems the better trade until docs-only PRs are frequent enough to care.

Note

This is the third instance of this class in the same filter block, and the existing comments document the previous two: the root files that "were being missed", and action/**, which "matched no filter at all before, so a change to the composite Action reached CI without running the Action's own suite". Worth a glance over the remaining top-level paths for a fourth while fixing this one.

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions