Skip to content

Commit 53726f4

Browse files
committed
fix: publish release artifacts without npm registries
1 parent 5c79b9c commit 53726f4

2 files changed

Lines changed: 16 additions & 114 deletions

File tree

.github/workflows/release.yml

Lines changed: 4 additions & 78 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,8 @@
1-
# 自动发布 npm 包 @opensec/secbot(以 2.0.3 / 标签 v2.0.3 为例)
1+
# 自动构建发布包并上传到 GitHub Release(以 2.0.3 / 标签 v2.0.3 为例)
22
# 1. 确认根目录 package.json 的 version 与即将打的标签一致(如 2.0.3 对应标签 v2.0.3)。
3-
# 2. npmjs 发布采用 Trusted Publishing(GitHub Actions OIDC),无需 NPM_TOKEN:
4-
# · 需在 npm 包页面 Settings -> Publishing access / Trusted publishers 中绑定 GitHub 仓库 iammm0/secbot。
5-
# · workflow 文件名需与本文件一致(release.yml)。
6-
# · package.json 的 repository.url 需与 GitHub 仓库匹配。
7-
# · workflow permissions 需包含 id-token: write。
8-
# 3. git tag v2.0.3 && git push origin v2.0.3
9-
# 将触发:构建 → 校验版本 → 打 GitHub Release 并上传 tgz → npm trusted publish(npmjs)+
10-
# GitHub Packages(仓库 Settings -> Packages 可见;包名为 @<仓库所有者>/secbot,与 @opensec/secbot 并存)。
11-
# GitHub Packages 继续使用 GITHUB_TOKEN 认证 npm.pkg.github.com。
3+
# 2. git tag v2.0.3 && git push origin v2.0.3
4+
# 将触发:构建 → 校验版本 → 打 GitHub Release 并上传 tgz。
5+
# 3. 本 workflow 不再发布到 npmjs 或 GitHub Packages。
126

137
name: Release
148

@@ -20,8 +14,6 @@ on:
2014

2115
permissions:
2216
contents: write
23-
packages: write
24-
id-token: write
2517

2618
jobs:
2719
build:
@@ -83,69 +75,3 @@ jobs:
8375
prerelease: ${{ contains(github.ref_name, '-') }}
8476
env:
8577
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
86-
87-
publish-npm:
88-
name: Publish to npm registry
89-
needs: build
90-
runs-on: ubuntu-latest
91-
if: startsWith(github.ref, 'refs/tags/v')
92-
steps:
93-
- uses: actions/checkout@v4
94-
95-
- name: Set up Node.js for npm
96-
uses: actions/setup-node@v4
97-
with:
98-
node-version: '24'
99-
registry-url: 'https://registry.npmjs.org'
100-
cache: 'npm'
101-
102-
- name: Install dependencies
103-
run: npm ci
104-
105-
- name: Publish to npm
106-
run: |
107-
PKG_VER="$(node -p "require('./package.json').version")"
108-
if [[ "$PKG_VER" == *-* ]]; then
109-
npm publish --access public --tag next
110-
else
111-
npm publish --access public
112-
fi
113-
114-
publish-github-packages:
115-
name: Publish to GitHub Packages
116-
needs: build
117-
runs-on: ubuntu-latest
118-
if: startsWith(github.ref, 'refs/tags/v')
119-
steps:
120-
- uses: actions/checkout@v4
121-
122-
# GitHub Packages 要求作用域小写,与 apply-github-packages-name.js 中 pkg.name 一致
123-
- name: Normalize npm scope owner (lowercase)
124-
run: echo "NPM_SCOPE_OWNER=$(echo '${{ github.repository_owner }}' | tr '[:upper:]' '[:lower:]')" >> $GITHUB_ENV
125-
126-
- name: Set up Node.js for GitHub Packages
127-
uses: actions/setup-node@v4
128-
with:
129-
node-version: '24'
130-
registry-url: 'https://npm.pkg.github.com'
131-
scope: '${{ env.NPM_SCOPE_OWNER }}'
132-
cache: 'npm'
133-
134-
- name: Install dependencies
135-
run: npm ci
136-
137-
- name: Apply scoped name for GitHub Packages registry
138-
run: node scripts/apply-github-packages-name.js
139-
env:
140-
GITHUB_REPOSITORY_OWNER: ${{ env.NPM_SCOPE_OWNER }}
141-
142-
- name: Publish to GitHub Packages
143-
run: |
144-
PKG_VER="$(node -p "require('./package.json').version")"
145-
if [[ "$PKG_VER" == *-* ]]; then
146-
npm publish --tag next
147-
else
148-
npm publish
149-
fi
150-
env:
151-
NODE_AUTH_TOKEN: ${{ secrets.GITHUB_TOKEN }}

docs/RELEASE.md

Lines changed: 12 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# 发布指南
22

3-
本仓库当前发布的是 npm `@opensec/secbot`。包内包含:
3+
本仓库当前发布的是 GitHub Release `.tgz` 构建包。包内 npm 元数据仍使用 `@opensec/secbot`,但 release workflow 不再发布到 npmjs 或 GitHub Packages。包内包含:
44

55
- `server/dist`
66
- `terminal-ui/dist`
@@ -14,7 +14,7 @@
1414
## 用户安装
1515

1616
```bash
17-
npm install -g @opensec/secbot
17+
npm install -g ./opensec-secbot-<version>.tgz
1818
secbot
1919
```
2020

@@ -24,13 +24,13 @@ secbot
2424
secbot-server
2525
```
2626

27-
一次性运行
27+
一次性运行本地包
2828

2929
```bash
30-
npx @opensec/secbot
30+
npx ./opensec-secbot-<version>.tgz
3131
```
3232

33-
也可以从 GitHub Releases 下载 `.tgz`
33+
GitHub Releases 下载对应版本的 `.tgz` 包后替换 `<version>`
3434

3535
## 本地发布前检查
3636

@@ -69,10 +69,10 @@ npm pack
6969
| `npm run build` | 构建 NestJS 后端 |
7070
| `npm run build:terminal-ui` | 构建 Ink TUI |
7171
| `npm run release:build` | 清理并构建后端 |
72-
| `npm run release:pack` | 构建后端并执行 `npm pack` |
72+
| `npm run release:pack` | 构建后端并执行 `npm pack` 生成 `.tgz` |
7373
| `npm run release:verify` | 在临时目录安装 tarball 并验证二进制入口 |
7474

75-
注意:根包的 `prepack` 会执行 `npm run build && npm run build:terminal-ui`,因此直接 `npm pack` 也会构建两个产物
75+
注意:根包的 `prepack` 会执行后端构建、TUI 构建、`web` 依赖安装和 Web 构建,因此直接 `npm pack` 也会生成完整产物
7676

7777
## GitHub Actions 发布
7878

@@ -106,40 +106,16 @@ CI 会执行:
106106
5. `npm test`
107107
6. `npm run release:pack`
108108
7. 上传 `.tgz` 到 GitHub Release
109-
8. 发布到 npm registry
110-
9. 发布到 GitHub Packages
111109

112-
预发布版本(版本号包含 `-`会发布到 npm 的 `next` tag
110+
预发布版本(版本号包含 `-`会在 GitHub Release 中标记为 prerelease
113111

114-
## npm Trusted Publishing
112+
## 不发布到 npm
115113

116-
`release.yml` 使用 npm Trusted Publishing,也就是 GitHub Actions OIDC,不需要 `NPM_TOKEN`。需要在 npm 包页面配置 trusted publisher:
114+
`release.yml` 不再包含 npmjs Trusted Publishing,也不会发布到 GitHub Packages。发布产物只作为 `.tgz` 上传到 GitHub Release。
117115

118-
- 仓库:`iammm0/secbot`
119-
- Workflow 文件:`release.yml`
120-
- Package:`@opensec/secbot`
116+
## 不可覆盖已发布资产
121117

122-
如果 trusted publisher 未配置,npm 发布步骤会失败。
123-
124-
## GitHub Packages
125-
126-
GitHub Packages 发布前会运行:
127-
128-
```bash
129-
node scripts/apply-github-packages-name.js
130-
```
131-
132-
它会把包名改为仓库所有者 scope 下的包,例如:
133-
134-
```text
135-
@iammm0/secbot
136-
```
137-
138-
这与 npmjs 上的 `@opensec/secbot` 并存。
139-
140-
## 不可覆盖已发布版本
141-
142-
npm 与 GitHub Packages 都不允许覆盖同一版本。若 CI 报类似 `Cannot publish over previously published version`,需要提升 `package.json` 版本并重新打标签。
118+
同一 tag 的 GitHub Release 会被 workflow 更新并重新上传 `.tgz`。正式发布时仍建议提升 `package.json` 版本并打新标签,避免用户拿到不同内容但版本号相同的包。
143119

144120
## 版本文档
145121

0 commit comments

Comments
 (0)