Skip to content

chore: add Renovate config and retarget the CI platform matrix - #3

Merged
fi3ework merged 6 commits into
mainfrom
chore/renovate
Aug 5, 2026
Merged

chore: add Renovate config and retarget the CI platform matrix#3
fi3ework merged 6 commits into
mainfrom
chore/renovate

Conversation

@fi3ework

@fi3ework fi3ework commented Aug 5, 2026

Copy link
Copy Markdown
Member

Summary

Two related changes to repo infrastructure.

1. Renovate config

Adds .github/renovate.json5, following the shape used by rslint and rstest: config:recommended + github>rstackjs/renovate:security + schedule:weekly + helpers:pinGitHubActionDigests, with chore semantic commits and rangeStrategy: bump.

Two repo-specific rules:

  • packages/vscode/tests/** is ignored — the E2E fixtures deliberately pin the published @rslint/core / @rstest/core / rstack versions the suites run against, so bumping them is a manual, E2E-verified decision.
  • The @rslint/core / @rstest/core / rstack devDependencies are excluded — their ranges are the type-level side of the runtime SUPPORT_MATRIX (shared/versionCheck.ts) and only move with a compatibility decision.

Renovate only activates once the Renovate GitHub App is installed for this repository. With this config already in place, the app skips its onboarding PR and starts opening update PRs directly.

2. CI platform matrix

Splits the two per-OS jobs into one Linux check job (build, lint, format, unit tests) and an E2E matrix over windows-latest and macos-latest.

Unit tests, Linux only. The three places the source branches on process.platform — bin names in detection.ts, platform packages in stacks/lint/utils.ts, path casing in stacks/test/projectCoverage.ts — are only reachable when the host is that platform, so a second OS re-runs identical assertions. The Windows branches stay covered by the Windows E2E job.

E2E on Windows + macOS, no Linux. These are the platforms upstream rstest runs its VS Code suites on, which is what keeps the ported suites viable as verbatim copies.

Linux is excluded because of a race in the ported watch-mode suites. progress.test.ts rewrites a fixture with writeFile, which truncates the file to zero bytes before writing it back; inotify reports that empty intermediate state as its own event, so the watcher can trigger a run against a zero-length test file. That run collects nothing and the assertions then inspect a run that never saw the edit. Observed on ubuntu-latest in run 30985755059: ✗ test/progress.test.ts (0) and No test suites found in file, with /2 failed/ never matching.

The racy code is byte-identical to upstream (only the exports helper and the fixture-path constant differ), and upstream never runs these suites on Linux — its VS Code step requires node_version == '24' while its only Linux matrix entries are node 20 and 26. Fixing the race means diverging from a verbatim copy; not running Linux does not. The suites pass 5/5 unmodified on macOS locally.

Verification

pnpm lint, pnpm run fmt:check, pnpm run test:unit and pnpm run test:e2e:rstest all pass locally on macOS. The new macos-latest E2E job runs for the first time on this PR.

Same shape as the rslint/rstest configs (config:recommended + the
rstackjs security preset + weekly schedule + pinned action digests),
with two local rules: E2E fixture manifests are ignored (they pin the
published toolchain versions the suites verify), and the @rslint/core /
@rstest/core / rstack devDependencies are excluded because their ranges
mirror the runtime SUPPORT_MATRIX and move only with a compatibility
decision.
@fi3ework fi3ework changed the title chore: add Renovate config chore: add Renovate config and retarget the CI platform matrix Aug 5, 2026
Splits the two per-OS jobs into one Linux check job (build, lint, format,
unit tests) and an E2E matrix over windows-latest and macos-latest.

Unit tests gain nothing from a second OS: the three places the source
branches on `process.platform` (bin names in detection.ts, platform
packages in stacks/lint/utils.ts, path casing in
stacks/test/projectCoverage.ts) are only reachable when the host is that
platform, and the Windows branches stay covered by the Windows E2E job.

The E2E matrix drops Linux and gains macOS, matching the platforms
upstream rstest runs these suites on. The ported watch-mode suites
rewrite a fixture with `writeFile`, which truncates before writing;
inotify reports that empty intermediate state as its own event, so the
watcher can trigger a run against a zero-length test file and the
assertions then inspect a run that never saw the edit (observed on
ubuntu-latest: "No test suites found in file", 0 collected). Fixing it
means diverging from a verbatim upstream copy; not running Linux does
not. The suites pass 5/5 unmodified on macOS locally.
The weekly schedule gates when a PR is opened, so a package that ships
every few days would still be picked up at most once a week — the
security preset's `minimumReleaseAge: null` only waives the release-age
cooldown, not the schedule. Give the Rstack scopes their own group with
`schedule: ['at any time']` so a release is proposed on the next run
after it publishes; everything else stays weekly.
SUPPORT_MATRIX declares a floor, not a pin, so raising @rslint/core,
@rstest/core or rstack in package.json does not move it — the earlier
exclusion treated the two as coupled. They now follow the same
open-schedule rule as the rest of the Rstack scopes.
@fi3ework
fi3ework merged commit 3a9e224 into main Aug 5, 2026
3 checks passed
@fi3ework
fi3ework deleted the chore/renovate branch August 7, 2026 05:28
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.

1 participant