Skip to content

ci: modernize test-and-release workflow#197

Merged
AlCalzone merged 2 commits into
masterfrom
ci/modernize-workflows
Jul 7, 2026
Merged

ci: modernize test-and-release workflow#197
AlCalzone merged 2 commits into
masterfrom
ci/modernize-workflows

Conversation

@AlCalzone

Copy link
Copy Markdown
Member

Modernizes the CI/release workflow, bringing it up to the pattern already rolled out in AlCalzone/jsonl-db, zwave-js/waddle and AlCalzone/node-coap-client.

  • Removed [skip ci] conditionals on all jobs
  • Added permissions: id-token: write + contents: write for OIDC trusted publishing and GitHub releases
  • Bumped actions/checkout to v7 and actions/setup-node to v6
  • Dropped Node 14/16/18 from the matrix; lint/deploy now use Node 24, unit tests run on [22, 24]
  • Replaced deprecated ::set-output with the $GITHUB_OUTPUT file pattern
  • Switched npm publishing to OIDC trusted publishing (yarn workspaces foreach --all -vti --no-private npm publish --tolerate-republish $TAG), removing the NPM_TOKEN-based yarn config set npmAuthToken step
  • Replaced deprecated actions/create-release@v1 with softprops/action-gh-release@v3
  • Preserved the existing github.actor == 'AlCalzone' deploy guard

Note: the Yarn Berry bump from 3.2.0 to 4.17.0 was attempted per the standard rollout, but yarn install failed under 4.17.0 due to an incompatibility in the third-party @yarnpkg/plugin-changed plugin (Command.String is not a function, a Clipanion API change). That bump was reverted; packageManager stays at yarn@3.2.0 for now. Only the workflow-file modernization is included in this PR.

AlCalzone added 2 commits July 7, 2026 15:47
- Drop [skip ci] guards, add id-token/contents permissions for OIDC + release publishing
- Bump actions/checkout to v7, actions/setup-node to v6, drop Node <22 (use 24 for lint/deploy, [22, 24] for tests)
- Replace deprecated ::set-output with $GITHUB_OUTPUT
- Switch npm publishing to OIDC trusted publishing, drop NPM_TOKEN
- Replace actions/create-release@v1 with softprops/action-gh-release@v3
The previous attempt failed because the vendored @yarnpkg/plugin-changed
build (from Dcard/yarn-plugins v0.7.2) used Clipanion's old decorator API
(@command.String() etc.), which Yarn 4's bundled Clipanion no longer
supports ("Command.String is not a function").

zwave-js hit the same issue migrating to Yarn 4 and fixed it upstream in
their yarn-plugins fork by porting the plugin to Clipanion's Option.*
API (zwave-js/yarn-plugins@e103f80), then publishing a prebuilt bundle.
Point this repo's plugin-changed entry at that maintained bundle instead.

Also removes plugin-workspace-tools/interactive-tools/version, which
Yarn 4 now ships as builtins.
@AlCalzone

Copy link
Copy Markdown
Member Author

Followed up on the Yarn Berry bump that was reverted above.

Root cause: this repo's vendored @yarnpkg/plugin-changed (from Dcard/yarn-plugins v0.7.2) uses Clipanion's old decorator API (@Command.String() etc.), which Yarn 4's bundled Clipanion no longer supports — hence Command.String is not a function.

zwave-js hit the exact same thing migrating to Yarn 4 and fixed it in zwave-js/yarn-plugins by porting the plugin to Clipanion's Option.* API (e103f80) and checking in a prebuilt bundle. This commit points .yarnrc.yml at that maintained bundle (same URL + checksum zwave-js/zwave-js itself uses) and retries the bump to Yarn 4.17.0.

yarn install, yarn build, and yarn lint all pass. yarn test:ci reports "no tests found", which is pre-existing (no *.test.ts files in this repo) and unrelated to this change.

@AlCalzone
AlCalzone merged commit 7c66746 into master Jul 7, 2026
5 checks passed
@AlCalzone
AlCalzone deleted the ci/modernize-workflows branch July 7, 2026 18:07
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