Release plumbing for 4.0.0-alpha.0 - #872
Conversation
The publish workflow needed three changes for the release commit to prove what it ships. - It ran v3's Node suite with coverage. That directory now holds v4, whose specs run in a real browser, so the job installs Chromium and runs `npm test`. Coverage is dropped with it: this suite writes no clover report, and the pull-request job is where coverage is measured. - It publishes `npm run check:package` before the tarball goes out. That script packs the package and runs the result through a Node, a browser and a TypeScript consumer with the workspace aliases removed, so what passes is what a consumer installs. Nothing gated the tarball before. - It needs no version gate, and a comment now says why: a tag publishes the packages on the branch it points at, and the workflow runs from the ref of the tag. A `4.x` tag here publishes v4; a `3.x` tag on the `3.x` branch publishes v3 from that branch's copy of this file. `@studiometa/eslint-plugin-js-toolkit` moves to 4.0.0-alpha.0 with the framework. Its rule set already targets v4, and both packages publish from this branch to the same `next` dist-tag. The changelog gets a 4.0.0-alpha.0 section. The `Unreleased` entries that belonged to the 3.x line stay on the `3.x` branch, which carries the same file; what is left here describes v4 and points at the migration guide, since a rewrite has no meaningful line-by-line diff against 3.9.0. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_011izFBQT4AsFcD4tVZz1f7R
Export sizeBundled per export with peer dependencies left external, dynamic imports excluded and the output minified; sizes are gzipped. ✅ No export size changes. Unchanged (196)@studiometa/js-toolkit
|
Code ReviewRisk: Low — The release workflow now validates and publishes the v4 packages on Ubuntu, with no blocking defects identified. Updates the publish job to install Chromium, run the browser-based toolkit tests, validate the packed package, and retain coverage for the ESLint plugin. It also versions the ESLint plugin for the v4 alpha release and replaces the unreleased changelog content with the 4.0.0-alpha.0 release notes. Review usage: 19,448 in (11,966 cached) / 593 out tokens — $0.0071 (openrouter/openai/gpt-5.6-luna, thinking: low) Reviewed by @weareikko/code-review v0.9.5 for commit 0cccdde. Previous review runsPrevious run archived 2026-08-26T19:49:31ZCode ReviewRisk: High — blocking issues remain — resolve them before merge. Updates the publish workflow to run the v4 browser suite, validate the packed package, and publish both packages as 1 issue found:
Review usage: 63,294 in (40,897 cached) / 989 out tokens — $0.0190 (openrouter/openai/gpt-5.6-luna, thinking: low) Reviewed by @weareikko/code-review v0.9.5 for commit b467e98. |
Codecov Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files@@ Coverage Diff @@
## main #872 +/- ##
=======================================
Coverage 94.55% 94.55%
=======================================
Files 38 38
Lines 1176 1176
Branches 498 498
=======================================
Hits 1112 1112
Misses 57 57
Partials 7 7
Flags with carried forward coverage won't be shown. Click here to find out more. ☔ View full report in Codecov by Harness. 🚀 New features to boost your workflow:
|
`playwright install --with-deps` installs system dependencies through `apt`, so it only does its job on Ubuntu — and the release job, which now runs the browser suite, was on `macos-latest`. Ubuntu also makes the release run the suite in the same environment `tests.yml` verifies every pull request in, which is what a release job should be doing. Reported by @weareikko/code-review on #872. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_011izFBQT4AsFcD4tVZz1f7R
mount benchmarksBase and head measured on this runner, alternating over 3 rounds each; every value is the median of the round medians. Running both sides on one machine is what removes cross-machine noise — a cached baseline from another runner would put it back. A move under 25%, or on a benchmark under 5 ms, is not reported as a change: it is inside the measured noise of a shared runner. No benchmark moved beyond the noise floor. Within noise (18)
|
What
The release plumbing for
4.0.0-alpha.0, so tagging is the only step left.Follows #871, which gave v4 the
@studiometa/js-toolkitname.Changes
publish.ymlnpm test. Coverage goes with it: this suite writes no clover report, and the pull-request job is where coverage is measured.npm run check:packagebefore publishing. It packs the package and runs the tarball through a Node, a browser and a TypeScript consumer with the workspace aliases removed, so what passes is what a consumer installs. Nothing gated the tarball before.4.xtag here publishes v4; a3.xtag on3.xpublishes v3 from that branch's copy of this file.Versions
@studiometa/eslint-plugin-js-toolkitmoves to4.0.0-alpha.0with the framework. Its rule set already targets v4 (configs.v4), and both packages publish from this branch to the samenextdist-tag.Changelog
A
4.0.0-alpha.0section. TheUnreleasedentries belonging to the 3.x line stay on the3.xbranch, which carries the same file. What is left here describes v4 and points at the migration guide — a rewrite has no meaningful line-by-line diff against 3.9.0. Every API name in it was checked against the sources.What happens on the tag
4.0.0-alpha.0*.*.*triggernext(the workflow's prerelease branch already mapsalpha)latestnextcurrently points at3.9.0-beta.2and moves to4.0.0-alpha.0, so@studiometa/js-toolkit@nextbecomes a breaking major. The release notes should say so.Verification
npm run lintclean,npm run buildclean. The publish workflow itself is only exercised by the tag, so the two steps it gained were run locally against this tree:npm test(113 files, 1569 tests) andnpm run check:package(596 files, 306.6 kB packed, three consumers).🤖 Generated with Claude Code
https://claude.ai/code/session_011izFBQT4AsFcD4tVZz1f7R