Skip to content

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

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

cs-raj merged 3 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 publishes @contentstack/datasync-content-store-filesystem to npm with a long-lived NPM_TOKEN through JS-DevTools/npm-publish@v3, and attaches the tarball to the release with the archived actions/upload-release-asset@v1.

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

The last release, v2.1.12 (May), failed at the npm publish step, so npm is still at 2.1.11 while master is at 2.1.14.

Fix

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

Before After
Trigger release: created release: published
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
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 ci
Build npm run build-ts unchanged
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 and npm pack all pass.

Publish on release:published from release.yml so the npm trusted publisher can
be keyed on the filename, 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 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 05:38
@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.

@github-actions

github-actions Bot commented Oct 5, 2026

Copy link
Copy Markdown

🔒 Security Scan Results

ℹ️ Note: Only vulnerabilities with available fixes (upgrades or patches) are counted toward thresholds.

Check Type Count (with fixes) Without fixes Threshold Result
🔴 Critical Severity 0 0 10 ✅ Passed
🟠 High Severity 0 2 25 ✅ Passed
🟡 Medium Severity 0 1 500 ✅ Passed
🔵 Low Severity 0 0 1000 ✅ Passed

⏱️ SLA Breach Summary

✅ No SLA breaches detected. All vulnerabilities are within acceptable time thresholds.

Severity Breaches (with fixes) Breaches (no fixes) SLA Threshold (with/no fixes) Status
🔴 Critical 0 0 15 / 30 days ✅ Passed
🟠 High 0 0 30 / 120 days ✅ Passed
🟡 Medium 0 0 90 / 365 days ✅ Passed
🔵 Low 0 0 180 / 365 days ✅ Passed

ℹ️ Vulnerabilities Without Available Fixes (Informational Only)

The following vulnerabilities were detected but do not have fixes available (no upgrade or patch). These are excluded from failure thresholds:

  • Critical without fixes: 0
  • High without fixes: 2
  • Medium without fixes: 1
  • Low without fixes: 0

✅ BUILD PASSED - All security checks passed

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 allows shell command execution in the write-enabled upload job.

Review effort: Balanced
Findings: 1 High severity

Open (1)
What changed in this PR

Migrates the filesystem content store’s npm release workflow from token authentication to OIDC trusted publishing.

Changes:

  • Publishes on release publication using Node 24, with separate stable and prerelease tags.
  • Uses clean dependency installs and explicit release-tag checkouts.
  • Uploads release tarballs through a separate GitHub CLI job after publishing.
File Description
.github/​workflows/​release.yml Replaces token-based publishing and modernizes release 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
@github-actions

Copy link
Copy Markdown

🔒 Security Scan Results

ℹ️ Note: Only vulnerabilities with available fixes (upgrades or patches) are counted toward thresholds.

Check Type Count (with fixes) Without fixes Threshold Result
🔴 Critical Severity 0 0 10 ✅ Passed
🟠 High Severity 2 0 25 ✅ Passed
🟡 Medium Severity 1 0 500 ✅ Passed
🔵 Low Severity 0 0 1000 ✅ Passed

⏱️ SLA Breach Summary

✅ No SLA breaches detected. All vulnerabilities are within acceptable time thresholds.

Severity Breaches (with fixes) Breaches (no fixes) SLA Threshold (with/no fixes) Status
🔴 Critical 0 0 15 / 30 days ✅ Passed
🟠 High 0 0 30 / 120 days ✅ Passed
🟡 Medium 0 0 90 / 365 days ✅ Passed
🔵 Low 0 0 180 / 365 days ✅ Passed

✅ BUILD PASSED - All security checks passed

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.

🟢 Approval recommended

The workflow consistently implements the stated trusted-publishing and release requirements.

0 open findings

1 resolved since last review

🧠 Review effort: Balanced

overrides.brace-expansion: 5.0.9 -> 5.0.12
Fixes SNYK-JS-BRACEEXPANSION-20244948, -20244950, -20244952 (via rimraf > glob > minimatch).
package-lock.json regenerated from a clean install.

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
@github-actions

Copy link
Copy Markdown

🔒 Security Scan Results

ℹ️ Note: Only vulnerabilities with available fixes (upgrades or patches) are counted toward thresholds.

Check Type Count (with fixes) Without fixes Threshold Result
🔴 Critical Severity 0 0 10 ✅ Passed
🟠 High Severity 0 0 25 ✅ Passed
🟡 Medium Severity 0 0 500 ✅ Passed
🔵 Low Severity 0 0 1000 ✅ Passed

⏱️ SLA Breach Summary

✅ No SLA breaches detected. All vulnerabilities are within acceptable time thresholds.

Severity Breaches (with fixes) Breaches (no fixes) SLA Threshold (with/no fixes) Status
🔴 Critical 0 0 15 / 30 days ✅ Passed
🟠 High 0 0 30 / 120 days ✅ Passed
🟡 Medium 0 0 90 / 365 days ✅ Passed
🔵 Low 0 0 180 / 365 days ✅ Passed

✅ BUILD PASSED - All security checks passed

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 dependency refresh should be reverted or explicitly documented and validated.

1 open finding

🧠 Review effort: Balanced

Comment thread package.json
@cs-raj
cs-raj merged commit 83b232d into development Oct 14, 2026
11 checks passed
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