Skip to content

使用 Trusted Publishers (OIDC) 完成 github workflow 发包

提示

这是第三版本的发包实践。

动机

被 npm 和 github 都发布了公告,要求我们在 npm 官方镜像源发包的开发者,都必须改换 token 的提供方式。

参考资料

官方文档

博客文章

在每个包的信息内,从设置栏内找到 Trusted Publisher 选项

2025-10-31-21-10-58

设置成功后如图所示:

2025-10-31-21-16-09

曾经发布的每一个依赖包,都要这样去人工设置。工作量较大。

大胆尝试,直接试着删除掉之前强依赖的 NODE_AUTH_TOKEN 变量

修改效果如下:

diff
diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml
index 064b857..c544c07 100644
--- a/.github/workflows/release.yml
+++ b/.github/workflows/release.yml
@@ -51,14 +51,6 @@ jobs:
       - name: turbo link 链接远程项目
         run: turbo link --token=${{env.TURBO_TOKEN}} --scope=${{env.TURBO_TEAM}} --yes
 
-      - name: 在 .npmrc 内写入token
-        run: |
-          cat << EOF > "$HOME/.npmrc"
-            //registry.npmjs.org/:_authToken=${{ secrets.NPM_TOKEN }}
-          EOF
-        env:
-          NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
-
       - name: 构建项目
         run: pnpm run build
 
@@ -72,8 +64,6 @@ jobs:
           title: "📢 publish: release package(s)"
         env:
           GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
-          NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
-          NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
 
       - name: 同步GitHub Release
         if: steps.changesets.outputs.published == 'true'

直接暴毙

出现故障,本质上还是需要 NODE_AUTH_TOKEN 变量的。

log
error an error occurred while publishing XXX: E404 Not Found

相关思考

阅读该文章,注意到这一段:

要求使用 npm@11.5.1 以上版本。该文章给出的比较脏的解决方案是手动增加 npm install -g npm@latest 部分。这样 pnpm 就能够使用 OIPC 来获取 token 进而发包了。

2025-10-31-23-11-47

难道 pnpm 本体没能力支持 OIPC 么?

pnpm 也有相关 issue 提及到对 OIPC 的支持

这篇 issue 说明了,pnpm 本身也在逐步支持 OIPC 。

也提及到了要手动增加 npm install -g npm@latest ,以便确保 pnpm 使用的是最新的 npm 包。

2025-10-31-23-14-39

pnpm 本体正在等待合并 pr

pr 正在被合并,只要合并到位,pnpm 就可以通过配置的方式获得到 npm 最新版本的能力了。

被迫将 NODE_AUTH_TOKEN 变量加回给 changesets/action

yaml
- name: 构建并发版
  id: changesets
  uses: changesets/action@v1
  with:
    publish: pnpm release
    version: pnpm run version
    commit: "📢 publish: release package(s)"
    title: "📢 publish: release package(s)"
  env:
    GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
    NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}

怀疑 changesets/action 不得不要求传递有效的 NODE_AUTH_TOKEN

我不清楚 changesets 在执行内部的 changeset publish 命令时,到底能不能使用最新的 npm,这个问题打算先拖个几周。后面 pnpm 会更新的, changesets 肯定也会跟进的。

贡献者

The avatar of contributor named as ruan-cat ruan-cat

页面历史

最近更新