Repository navigation
ci: path-filter extension tests and split TypeScript and R checks - #1941
Conversation
Run the slow extension test and build workflow only when files that can affect the extension change, using a deny-list so new inputs still trigger it. Move formatting and linting into separate typescript and r workflows with their own path filters, and add a TypeScript type-check job.
renkun-ken
left a comment
There was a problem hiding this comment.
Reviewed 9383a5b. No actionable regressions found.
The main workflow's ordered exclusions and re-inclusions retain the current build/test inputs and helper scripts. The TypeScript filters match the current formatter scope and cover compiler, dependency, lint/format, and file-discovery configuration; the R filters include both linted directories and their .lintr files. Reusable release calls remain available through workflow_call. The release/latest behavior changes are documented in the PR.
Validation: parsed the three workflow files and checked representative path-filter cases; local TypeScript formatting and both R lint commands passed. All eight hosted checks passed, including extension tests on macOS, Linux, and Windows, the VSIX build, TypeScript formatting/lint/typecheck, and R lint.
…ecks # Conflicts: # .github/workflows/main.yml
Summary
The slow extension test workflow currently runs for every change, including documentation and CI-only edits. This PR path-filters it and moves the quick checks into their own workflows.
main.yml(tests + VSIX build) runs on push / pull_request only when files that can affect the extension change. It uses a deny-list ('**'followed by exclusions) so new inputs trigger it by default. Excluded: top-level docs, lint/format configs, editor and agent directories, benchmarks, and.github/**exceptmain.ymland the scripts it runs.workflow_callfromrelease.ymlis unaffected.typescript.yml:format(oxfmt),lint(oxlint), and a newtypecheck(tsc --noEmit) job, filtered to TypeScript sources, dependency manifests,tsconfig.json, oxc configs, and.gitignore.r.yml: lintr onR/andsess/, filtered to those directories. lintr is installed withr-lib/actions/setup-r-dependencies.workflow_dispatch,contents: read, and cancel superseded PR runs.mainhas no required status checks, so skipped workflows do not block merges.Trade-offs:
release.ymlor thelatestGitHub release; they run on PRs and pushes.latest, and the documentation push starts no new build.latestthen stays behind until the next relevant push.release.yml/pre-release.ymlalone no longer run the extension tests, which do not exercise those workflows anyway.