feat!: migrate to Biome + Lefthook + Vitest + esbuild + Node 24#8
Merged
Conversation
Brings the action in line with the org's modern toolchain template (mirroring reside-eng/npm-dependency-stats-action#1655): - Replace ESLint 8 + Prettier 3 + Husky + lint-staged + @side/eslint-config-* + @side/prettier-config with @biomejs/biome 2.4.15 + lefthook 2.1.8. - Replace @vercel/ncc with esbuild 0.28.0 — bundle output is now dist/index.mjs (ESM) with a createRequire banner for CommonJS deps. - Add Vitest 4.1.7 + @vitest/coverage-v8 plus smoke tests for action.ts and github.ts (80% line coverage, gate set at 75%). - Bump Node engine ^24.0.0, @tsconfig/node24, @types/node@^24, TypeScript ^6.0.3 (required by @tsconfig/node24's lib values). - action.yml: runs.using node20 -> node24, main dist/index.js -> dist/index.mjs. - Bump cycjimmy/semantic-release-action v2.7.0 -> v6.0.0 and semantic_version ^18 -> ^25 in the release workflow. - gitignore dist/ on main (release workflow continues to force-commit the rebuilt bundle to the v<major> branch, matching the reference template). - Add Claude Code scaffolding: AGENTS.md, CLAUDE.md stub, .claude/{agents,commands}/.gitkeep, .claude/settings.json permissions, .vscode/extensions.json, .github/workflows/claude-code.yml. BREAKING CHANGE: action.yml now uses node24 runtime and dist/index.mjs entrypoint. Consumers must pin to @v2 (the new major branch produced by semantic-release). Existing @v1 consumers are unaffected. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Drops three sections that don't change agent behaviour at execution time: - Release: version pins and trigger branches aren't load-bearing for dev work; the dist/ ownership rule (the one piece that mattered) is now folded into Conventions. - Atlassian: already declared in ~/.claude/CLAUDE.md and the parent Side/CLAUDE.md; no Atlassian touchpoints in this repo anyway. - Side org context: already declared in the parent Side/CLAUDE.md. Adds the non-obvious things an agent would otherwise rediscover: - The two action modes (upsert vs create-only) and the parent-selector behaviour. - A pointer to the reorderTableRows quirk in src/action.ts. - The module-load side effect in src/github.ts (why tests mock @actions/core before importing it). - The feat!: / BREAKING CHANGE: rule for triggering major bumps. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
hershmire
commented
May 21, 2026
The pre-migration verify.yml and release.yml had a commented-out Coveralls upload step waiting for tests to exist. Now that we have 11 tests at 80% line coverage, wire it up: - vitest.config.ts: add 'lcov' to coverage.reporter so coverage/lcov.info is produced (Coveralls default input path). Keeps 'text' for local CLI output. - verify.yml + release.yml: add Coveralls upload step (coverallsapp/github-action@v2.3.6, SHA-pinned) immediately after the test step. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
mathieudi
approved these changes
May 21, 2026
|
🎉 This PR is included in version 2.0.0 🎉 The release is available on GitHub release Your semantic-release bot 📦🚀 |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Brings
replace-comment-html-actionin line with the org's modern toolchain template, mirroringreside-eng/npm-dependency-stats-action#1655(the closest analog — also a GitHub Action). Also adopts the Claude Code scaffolding patterns fromreside-eng/test-service-ci#692andreside-eng/payment-statement-components#1797.What changed
Toolchain swap
@side/eslint-config-*+@side/prettier-config@side/lint-staged-config@vitest/coverage-v8replaces theecho 'No tests yet'placeholder — adds smoke tests foraction.tsandgithub.ts(11 tests, 80% line coverage, threshold gated at 75%)@vercel/ncc— bundle output is nowdist/index.mjs(ESM) with acreateRequirebanner so CommonJS deps like@actions/githubstill resolve@tsconfig/node24'slibvalues)Runtime bump (Node 20 → Node 24)
engines.node:^24.0.0.node-version:24.15.0@tsconfig/node24+@types/node@^24action.yml:runs.using: node20→node24,main: dist/index.js→dist/index.mjsNODE_VERSION: 24.xRelease workflow
cycjimmy/semantic-release-actionv2.7.0 → v6.0.0 (SHA pin updated)semantic_version: ^18→^25(current semantic-release major)dist/is now gitignored onmain; the existing "Push updates to branch for major version" step continues togit add --force distand force-push the rebuiltdist/index.mjsto thev<major>branch (same pattern as the reference repo'sv3branch)Claude Code scaffolding (all options enabled)
AGENTS.md+ one-lineCLAUDE.mdstub pointing at it.claude/{agents,commands}/.gitkeepplaceholder dirs.claude/settings.jsonwith fine-grained allow/deny/ask permissions.vscode/extensions.jsonrecommending Biome + EditorConfig.github/workflows/claude-code.ymlcallingreside-eng/workflow-templates/.github/workflows/claude-code.yml@v12.gitignoreshifts:.vscode/*deny +!.vscode/extensions.json; plus.claude/worktrees/,.claude/memory,.claude/projects,.claude/settings.local.json,coverage,distSource changes (mechanical)
Three Biome autofixes applied to
src/action.ts:useOptionalChain× 2 (id && id.startsWith(...)→id?.startsWith(...),Map.get(k)!.push(x)→Map.get(k)?.push(x))useAwait(removed redundantasyncfrom a pass-through function)src/github.tshad its imports re-sorted byorganizeImports. No behavioural changes.Breaking change
action.ymlnow uses thenode24runtime anddist/index.mjsentrypoint. Consumers must pin to@v2(the new major branch produced by semantic-release on merge). Existing@v1consumers are unaffected — that branch keeps its olddist/index.jsand Node 20 runtime.The
feat!:commit prefix triggers the major version bump via semantic-release.Test plan
yarn check— clean (no Biome warnings or errors)yarn types:check— passesyarn test:cov— 11/11 tests pass, 80% line coverage (above 75% threshold)yarn build— producesdist/index.mjs(1.5 MB) with thecreateRequirebanner verifiedaction.ymlentrypoint resolves:node24+dist/index.mjscommit-msg(commitlint) +pre-commit(check:fix:staged+types:check) hooks present in.git/hooks/npm-dependency-stats-action@v3branch contains exactlydist/index.mjs+action.ymlwithnode24+dist/index.mjs— same shape this PR's release will produce on thev2branchv2.0.0, and thev2branch contains the rebuiltdist/index.mjs@v1to confirm it's unaffected🤖 Generated with Claude Code