Skip to content

Commit 3a2d925

Browse files
author
iammm0
committed
feat(publish): npm 包名 @opensec/secbot 与公开发布配置
Made-with: Cursor
1 parent 08c1558 commit 3a2d925

9 files changed

Lines changed: 52 additions & 34 deletions

File tree

.github/workflows/release.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
# 自动发布(以 2.0.0 为例)
1+
# 自动发布 npm 包 @opensec/secbot(以 2.0.0 / 标签 v2.0.0 为例)
22
# 1. 确认根目录 package.json 的 version 与即将打的标签一致(如 2.0.0 对应标签 v2.0.0)。
33
# 2. 在仓库 Settings → Secrets and variables → Actions 中配置 NPM_TOKEN(npm 侧「Access Token」,
44
# 类型选 Automation,并具备该包的 publish 权限;若包名尚未占用,请先在 npm 网页注册)。
@@ -54,7 +54,7 @@ jobs:
5454
uses: actions/upload-artifact@v4
5555
with:
5656
name: secbot-npm-package
57-
path: secbot-*.tgz
57+
path: '*.tgz'
5858

5959
upload-assets:
6060
name: GitHub Release assets

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -106,7 +106,7 @@ flowchart LR
106106
### 方式一:从 npm 安装
107107

108108
```bash
109-
npm install -g secbot
109+
npm install -g @opensec/secbot
110110
secbot
111111
```
112112

README_EN.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -114,7 +114,7 @@ flowchart LR
114114
### Option A: Install from npm
115115

116116
```bash
117-
npm install -g secbot
117+
npm install -g @opensec/secbot
118118
secbot
119119
```
120120

docs/RELEASE.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,11 +14,11 @@
1414

1515
```bash
1616
# 全局安装
17-
npm install -g secbot
17+
npm install -g @opensec/secbot
1818
secbot
1919

2020
# 或通过 npx 直接运行
21-
npx secbot
21+
npx @opensec/secbot
2222
```
2323

2424
在首次启动前创建 `.env` 文件。最小示例:

package-lock.json

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
{
2-
"name": "secbot",
2+
"name": "@opensec/secbot",
33
"version": "2.0.0",
44
"description": "Secbot pure TypeScript security automation backend and CLI.",
55
"type": "commonjs",
@@ -54,6 +54,9 @@
5454
"type": "git",
5555
"url": "https://github.com/iammm0/secbot.git"
5656
},
57+
"publishConfig": {
58+
"access": "public"
59+
},
5760
"license": "MIT",
5861
"dependencies": {
5962
"@nestjs/common": "^11.0.0",

scripts/build_release.bat

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,15 @@
1-
@echo off
2-
setlocal
3-
cd /d "%~dp0\.."
4-
5-
echo Building Secbot npm release package...
6-
npm run release:pack
7-
if errorlevel 1 (
8-
echo Release build failed.
9-
exit /b 1
10-
)
11-
12-
echo Release package created successfully.
13-
for %%f in (secbot-*.tgz) do echo %%f
14-
endlocal
1+
@echo off
2+
setlocal
3+
cd /d "%~dp0\.."
4+
5+
echo Building Secbot npm release package...
6+
npm run release:pack
7+
if errorlevel 1 (
8+
echo Release build failed.
9+
exit /b 1
10+
)
11+
12+
echo Release package created successfully.
13+
for %%f in (*.tgz) do echo %%f
14+
endlocal
1515
pause

scripts/build_release.sh

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
1-
#!/usr/bin/env bash
2-
set -euo pipefail
3-
4-
cd "$(dirname "$0")/.."
5-
6-
echo "Building Secbot npm release package..."
7-
npm run release:pack
8-
9-
echo "Release package created successfully."
10-
ls -1 secbot-*.tgz 2>/dev/null || true
1+
#!/usr/bin/env bash
2+
set -euo pipefail
3+
4+
cd "$(dirname "$0")/.."
5+
6+
echo "Building Secbot npm release package..."
7+
npm run release:pack
8+
9+
echo "Release package created successfully."
10+
ls -1 ./*.tgz 2>/dev/null || true

scripts/verify_release_package.js

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,17 @@ const REPO_ROOT = path.resolve(__dirname, '..');
1313
const NPM_EXEC_PATH = process.env.npm_execpath || '';
1414
const VERIFY_PREFIX = '[release:verify]';
1515

16+
function nodeModulesDirForPackageName(packageName) {
17+
if (packageName.startsWith('@')) {
18+
const [scope, name] = packageName.split('/');
19+
if (!scope || !name) {
20+
throw new Error(`Invalid scoped package name: ${packageName}`);
21+
}
22+
return path.join('node_modules', scope, name);
23+
}
24+
return path.join('node_modules', packageName);
25+
}
26+
1627
function log(message) {
1728
// eslint-disable-next-line no-console
1829
console.log(`${VERIFY_PREFIX} ${message}`);
@@ -198,7 +209,11 @@ async function main() {
198209
await runNpm(['init', '-y'], { cwd: tempDir, stdio: 'ignore' });
199210
await runNpm(['install', tarballPath, '--silent'], { cwd: tempDir });
200211

201-
const installedPkgPath = path.join(tempDir, 'node_modules', 'secbot', 'package.json');
212+
const rootPkg = parseJsonText(
213+
await fsp.readFile(path.join(REPO_ROOT, 'package.json'), 'utf8'),
214+
'Failed to read root package.json',
215+
);
216+
const installedPkgPath = path.join(tempDir, nodeModulesDirForPackageName(rootPkg.name), 'package.json');
202217
if (!fs.existsSync(installedPkgPath)) {
203218
throw new Error('Installed package.json not found');
204219
}

0 commit comments

Comments
 (0)