feat: support Node.js content in the gallery release pipeline#423
Conversation
Extension release summary😴 Changed but won't releaseThe following extensions have code changes but the manifest version hasn't been incremented:
If you intended to release these changes, update the See the contributing guide for details. |
karawoo
left a comment
There was a problem hiding this comment.
I think there's an inconsistency here between how the linting step and the extension-list.ts handle it if engines.node is missing. Linting fails, but the extension-list.ts code doesn't -- I think we should be consistent.
| // Node.js content declares its required Node version in package.json's | ||
| // `engines.node`, which is the single source of truth Connect reads (it does not | ||
| // read a nodejs field from manifest.json). Returns undefined for non-Node | ||
| // extensions, which have no package.json. |
There was a problem hiding this comment.
some non-nodejs extensions can have a package.json (package-vulnerability-scanner does, for example) so I think we should combine this with a check for whether the manifest's appmode is "nodejs"
There was a problem hiding this comment.
Fixed in 4f375ea - it should now check for metadata.appmode == nodejs, so a non-nodejs extension that ships a package.json (like package-vulnerability-scanner) won't get a nodejs requirement pulled in here.
Fixed in 4f375ea - extension-list.ts now errors on a nodejs extension missing |
Fixes #373: Makes the release/CI pipeline understand Node.js content
Changes (review commit by commit)
extension-list.ts: deriverequiredEnvironment.nodejsfromengines.nodein the extension'spackage.json(Connect's single source of truth; it doesn't read anodejsfield from the manifest).engines.nodefornodejsapp-mode extensions.nodejsextensions (the published Connect images ship no Node), enable it, and restart so Connect loads it.engines.nodeconvention and theminimumConnectVersion >= 2026.06.0rule.Validation
This PR is infra-only: no Node.js example ships here (in-development examples live in
connect-staging-extensions; the real one is the Express app, #374). So the Node provisioning is validated externally:preview,release, and2026.06.0:https://github.com/posit-dev/connect-extensions/actions/runs/28797948148
{"message":"Hello from Node.js on Posit Connect!"}) and Connect recognizes it as Node.js content (Node.js logo). Confirms the approach works on a live Node-enabled Connect, not just in CI.