nextlevelbuilder / nextlevelbuilder/ui-ux-pro-max-skill
Release failing since Aug 18: NPM_TOKEN rejected, nothing published since 2.15.0
Nobody has claimed this yet.
- Dominant language
- Python
- Stars
- 129k
- Forks
- 13.7k
- Avg merge
- 23h 27m
- Merged PRs (30d)
- 23
Description
The Release workflow failed on the last two pushes to main and nothing has been published since ui-ux-pro-max-cli@2.15.0 on August 13. Failing runs are 32170126651 (Aug 18) and 32365670346 (Aug 20), both stopping at the same step:
[@semantic-release/npm] › ℹ Verifying OIDC context for publishing from GitHub Actions
[@semantic-release/npm] › ℹ OIDC token exchange with the npm registry failed: 404 OIDC token exchange error - package not found
[@semantic-release/npm] › ℹ Verify authentication for registry https://registry.npmjs.org/
npm error 401 Unauthorized - GET https://registry.npmjs.org/-/whoami
[semantic-release] › ✘ EINVALIDNPMTOKEN Invalid npm token.
The registry answers 401 to whoami, so the NPM_TOKEN secret is there but no longer accepted. It worked on August 13, so it expired or was revoked in between. npm shortened the maximum lifetime of access tokens in September 2025, so classic tokens now expire on their own.
Two ways out. The quick one is rotating the secret: a granular access token with publish permission for ui-ux-pro-max-cli, saved over NPM_TOKEN, no code change. The durable one is npm trusted publishing, which @semantic-release/npm v13 already attempts first (that OIDC line above) and which release.yml already has the id-token: write permission for. The 404 means the package has no trusted publisher registered yet. Adding one on npmjs.com pointing at nextlevelbuilder/ui-ux-pro-max-skill and the release.yml workflow makes the exchange succeed, and the secret can then be deleted.
Two smaller things I ran into while reading the log.
The failure notification is broken too, which is likely why this went unnoticed. .releaserc.json sets failTitle, so @semantic-release/github tries to open an issue on failure, and that call fails with Validation Failed: {"value":"semantic-release","resource":"Label","field":"name","code":"invalid"}. The plugin labels that issue semantic-release by default and the repo has no label with that name, so no failure issue was ever created. Creating the label, or setting labels: false on the github plugin, should let it through.
And #451 does not fix this, in case it gets read as the fix. @semantic-release/npm is a direct dependency of semantic-release, so dropping the -p flag does not stop npx from installing it, and the log shows it loading from .releaserc.json, which still declares it with pkgRoot: cli. With the plugin loaded and no trusted publisher configured, lib/verify-auth.js falls through to setNpmrcAuth and throws ENONPMTOKEN instead. Same red run, different message. That PR becomes correct once the trusted publisher exists on npm.
Happy to send the workflow side of that, or the label fix, if either helps.
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start with the failing runs 32170126651 and 32365670346, then inspect release.yml, .releaserc.json, and lib/verify-auth.js to confirm the authentication and failure-notification paths. Coordinate with a maintainer on either the npm trusted-publisher or token-rotation route, and verify that a release completes and failure notifications can create their issue.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- github-actions, node.js
- Domain
- ci-cd, devops, release
- Issue type
- Bug
- Difficulty
- 3/5
- Estimated time
- 1-2 days
- Activity status
- Active
- Clarity
- Mostly clear
- Newbie friendliness
- 62/100