Skip to content

chore(release): publish to npm with trusted publishing - #111

Merged
cs-raj merged 4 commits into
developmentfrom
feat/DX-27614
Oct 14, 2026
Merged

cs-raj merged 4 commits into
developmentfrom
feat/DX-27614

Conversation

@cs-raj

@cs-raj cs-raj commented Oct 5, 2026

Copy link
Copy Markdown
Contributor

Problem

release.yml on development still publishes @contentstack/datasync-filesystem-sdk on every push to master with a long-lived NPM_TOKEN through JS-DevTools/npm-publish@v3, then tags, creates the GitHub release and attaches the tarball with archived actions (the master copy is release-triggered, same token).

The SE1 publishing policy requires OIDC trusted publishing instead: no token, a release.yml workflow that runs when a release is published, Node 24.

Fix

release.yml is rewritten in place. What changes inside it:

Before After
Trigger push to master release: published — creating the GitHub release is what publishes
npm auth NPM_TOKEN via JS-DevTools/npm-publish@v3 OIDC — id-token: write, no token, plain npm publish
npm publish action default npm publish --access public; pre-releases go to the beta dist-tag, releases to latest
Tag + release creation Klemensas/action-autotag, actions/create-release@v1 (archived) removed — the release is the trigger
Release asset actions/upload-release-asset@v1 (archived) inside the publish job separate upload-release-asset job, runs after a successful publish: npm pack + gh release upload --clobber with the job token
Install npm install (+ npm install npm-pack) npm ci
Node / npm 22.x / npm 10 24 / latest npm
Checkout implicit, credentials persisted the release tag, persist-credentials: false
Actions checkout@v4, setup-node@v4 @v7

Verification

Node 22 and Node 24: install, build, unit tests and npm pack all pass.

Publish on release:published from release.yml instead of on every push to
master, so the npm trusted publisher can be keyed on the filename and a person
creating the GitHub release is what publishes; drop the NPM_TOKEN passed to
JS-DevTools/npm-publish in favour of id-token: write (OIDC), run on Node 24 with
npm@latest (trusted publishing needs npm >= 11.5.1), check out the release tag
without persisted credentials. The auto-tag and create-release steps go away
with the trigger; the tarball is attached to the release from a separate job
with gh release upload instead of the archived upload-release-asset action.
GitHub pre-releases go to the beta dist-tag.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Copilot AI balanced review requested due to automatic review settings October 5, 2026 07:25
@cs-raj cs-raj self-assigned this Oct 5, 2026
@snyk-io

snyk-io Bot commented Oct 5, 2026 •

Copy link
Copy Markdown

✅ Snyk checks have passed. No issues have been found so far.

Status Scan Engine Critical High Medium Low Total (0)
✅ Open Source Security 0 0 0 0 0 issues
✅ Licenses 0 0 0 0 0 issues
✅ Code Security 0 0 0 0 0 issues

💻 Catch issues earlier using the plugins for VS Code, JetBrains IDEs, Visual Studio, and Eclipse.

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot review overview

🟡 Changes recommended

Direct release-tag interpolation permits shell command execution with the upload job’s write-scoped token.

Review effort: Balanced
Findings: 1 High severity

Open (1)
What changed in this PR

Migrates npm releases to release-triggered OIDC trusted publishing.

Changes:

  • Replaces token-based publishing with Node 24 and OIDC authentication.
  • Routes prereleases to beta and stable releases to latest.
  • Uploads release tarballs in a separate job using GitHub CLI.
File Description
.github/​workflows/​release.yml Reworks publishing authentication, triggers, tooling, and asset uploads.

💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.

Comment thread .github/workflows/release.yml Outdated
Refuse to publish when the release tag is not "v" + the package.json version,
so a tag cut on the wrong commit cannot publish an older version under a
newer tag. The tag now reaches the upload step through the RELEASE_TAG env
variable instead of being interpolated into the shell line (GitHub Actions
script-injection hardening).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Copilot AI balanced review requested due to automatic review settings October 13, 2026 09:44

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟡 Changes recommended

The workflow references unavailable checkout@v7 and setup-node@v7 action versions, preventing both jobs from running.

0 open findings

1 resolved since last review

🧠 Review effort: Balanced

cs-raj and others added 2 commits October 14, 2026 14:31
lodash ^4.17.21 (4.17.21) -> ^4.18.1 (4.18.1)
Fixes SNYK-JS-LODASH-15869619, SNYK-JS-LODASH-15053838 (Prototype Pollution)
and SNYK-JS-LODASH-15869625 (Arbitrary Code Injection).

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Copilot AI balanced review requested due to automatic review settings October 14, 2026 09:01

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟡 Changes recommended

The unrelated runtime dependency and broad lockfile updates should be reverted or separately justified and validated.

1 open finding

🧠 Review effort: Balanced

Comment thread package.json
@cs-raj
cs-raj merged commit bf4c39c into development Oct 14, 2026
10 checks passed
@cs-raj
cs-raj deleted the feat/DX-27614 branch October 14, 2026 10:21
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.

4 participants