zengen 0.1.1 → 0.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.github/README-CI.md +120 -0
- package/.github/workflows/ci.yml +69 -0
- package/.github/workflows/publish.yml +56 -0
- package/.github/workflows/version.yml +88 -0
- package/dist/cli.js +6 -1
- package/dist/cli.js.map +1 -1
- package/package.json +5 -2
- package/src/cli.ts +9 -1
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
# GitHub CI/CD 配置指南
|
|
2
|
+
|
|
3
|
+
本文档描述了如何为 zengen 项目配置 GitHub Actions 进行可信发布。
|
|
4
|
+
|
|
5
|
+
## 概述
|
|
6
|
+
|
|
7
|
+
我们配置了三个 GitHub Actions workflows:
|
|
8
|
+
|
|
9
|
+
1. **CI** (`ci.yml`) - 代码质量检查和测试
|
|
10
|
+
2. **Version Management** (`version.yml`) - 版本管理和自动创建 Release
|
|
11
|
+
3. **Publish to npm** (`publish.yml`) - 可信发布到 npm registry
|
|
12
|
+
|
|
13
|
+
## 配置步骤
|
|
14
|
+
|
|
15
|
+
### 1. 设置 npm 认证令牌
|
|
16
|
+
|
|
17
|
+
由于 npm 经典令牌已被撤销,需要使用新的认证方式:
|
|
18
|
+
|
|
19
|
+
#### 选项 A: 使用细粒度访问令牌(推荐)
|
|
20
|
+
1. 登录 [npmjs.com](https://www.npmjs.com)
|
|
21
|
+
2. 进入 Account Settings → Access Tokens
|
|
22
|
+
3. 点击 "Create New Token"
|
|
23
|
+
4. 选择 "Automation" 类型
|
|
24
|
+
5. 配置权限:
|
|
25
|
+
- 读取和写入包
|
|
26
|
+
- 绕过 2FA(用于自动化工作流)
|
|
27
|
+
6. 设置有效期(最长 90 天)
|
|
28
|
+
7. 复制生成的令牌
|
|
29
|
+
|
|
30
|
+
#### 选项 B: 使用 OIDC 可信发布
|
|
31
|
+
1. 确保在 GitHub 仓库设置中启用了 OIDC
|
|
32
|
+
2. 配置 npm 以信任 GitHub Actions 的 OIDC 令牌
|
|
33
|
+
|
|
34
|
+
### 2. 配置 GitHub Actions 权限
|
|
35
|
+
|
|
36
|
+
确保仓库有以下权限设置:
|
|
37
|
+
- Settings → Actions → General
|
|
38
|
+
- Workflow permissions: 选择 "Read and write permissions"
|
|
39
|
+
- 确保启用了 OIDC 支持
|
|
40
|
+
|
|
41
|
+
**注意**:对于 npm OIDC 发布,不需要配置 `NPM_TOKEN` secret。GitHub Actions 会自动使用 OIDC 令牌进行认证。
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
## 工作流程
|
|
45
|
+
|
|
46
|
+
### CI 流程
|
|
47
|
+
1. 当有 push 到 main 分支或创建 PR 时触发
|
|
48
|
+
2. 在多个 Node.js 版本上运行测试
|
|
49
|
+
3. 执行代码质量检查
|
|
50
|
+
4. 构建包并验证
|
|
51
|
+
|
|
52
|
+
### 版本管理流程
|
|
53
|
+
1. 当 package.json 版本变更时触发
|
|
54
|
+
2. 自动创建 GitHub Release
|
|
55
|
+
3. 生成基于提交历史的 changelog
|
|
56
|
+
|
|
57
|
+
### 发布流程
|
|
58
|
+
1. 当创建 GitHub Release 时触发
|
|
59
|
+
2. 使用 OIDC 进行可信认证
|
|
60
|
+
3. 构建并发布到 npm
|
|
61
|
+
4. 生成来源证明(provenance)
|
|
62
|
+
|
|
63
|
+
## 手动发布
|
|
64
|
+
|
|
65
|
+
如果需要手动发布:
|
|
66
|
+
|
|
67
|
+
1. 更新 `package.json` 中的版本号
|
|
68
|
+
2. 提交并推送到 main 分支
|
|
69
|
+
3. 版本管理 workflow 会自动创建 Release
|
|
70
|
+
4. 发布 workflow 会自动发布到 npm
|
|
71
|
+
|
|
72
|
+
或者使用 workflow_dispatch:
|
|
73
|
+
1. 前往 Actions → Publish to npm
|
|
74
|
+
2. 点击 "Run workflow"
|
|
75
|
+
3. 选择分支并运行
|
|
76
|
+
|
|
77
|
+
## 安全注意事项
|
|
78
|
+
|
|
79
|
+
1. **令牌安全**:
|
|
80
|
+
- 永远不要在代码中硬编码令牌
|
|
81
|
+
- 使用 GitHub Secrets 存储敏感信息
|
|
82
|
+
- 定期轮换令牌
|
|
83
|
+
|
|
84
|
+
2. **OIDC 优势**:
|
|
85
|
+
- 消除长期令牌的管理
|
|
86
|
+
- 自动化的短期会话令牌
|
|
87
|
+
- 更好的安全审计
|
|
88
|
+
|
|
89
|
+
3. **来源证明**:
|
|
90
|
+
- 使用 `--provenance` 标志发布
|
|
91
|
+
- 验证包的构建环境和来源
|
|
92
|
+
- 增加用户信任
|
|
93
|
+
|
|
94
|
+
## 故障排除
|
|
95
|
+
|
|
96
|
+
### 常见问题
|
|
97
|
+
|
|
98
|
+
1. **认证失败**:
|
|
99
|
+
- 确保仓库启用了 OIDC 支持
|
|
100
|
+
- 检查 workflow 中设置了 `permissions: id-token: write`
|
|
101
|
+
- 验证 npm 版本是否支持 OIDC(需要 npm 9.0.0+)
|
|
102
|
+
|
|
103
|
+
2. **版本检测失败**:
|
|
104
|
+
- 确保 `fetch-depth: 0` 以获取完整历史
|
|
105
|
+
- 检查 package.json 格式是否正确
|
|
106
|
+
|
|
107
|
+
3. **构建失败**:
|
|
108
|
+
- 检查 Node.js 版本兼容性
|
|
109
|
+
- 验证 TypeScript 配置
|
|
110
|
+
- 确保所有依赖项已安装
|
|
111
|
+
|
|
112
|
+
### 调试
|
|
113
|
+
- 查看 GitHub Actions 日志
|
|
114
|
+
- 启用调试日志:在仓库 Settings → Actions → Runner 中设置 secret `ACTIONS_STEP_DEBUG` 为 `true`
|
|
115
|
+
|
|
116
|
+
## 相关链接
|
|
117
|
+
|
|
118
|
+
- [npm 认证变更公告](https://github.blog/changelog/2025-12-09-npm-classic-tokens-revoked-session-based-auth-and-cli-token-management-now-available/)
|
|
119
|
+
- [GitHub Actions npm 发布文档](https://docs.github.com/en/actions/publishing-packages/publishing-nodejs-packages)
|
|
120
|
+
- [npm 可信发布文档](https://docs.npmjs.com/trusted-publishing-with-oidc)
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
name: CI
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches: [main]
|
|
6
|
+
pull_request:
|
|
7
|
+
branches: [main]
|
|
8
|
+
|
|
9
|
+
jobs:
|
|
10
|
+
test:
|
|
11
|
+
runs-on: ubuntu-latest
|
|
12
|
+
strategy:
|
|
13
|
+
matrix:
|
|
14
|
+
node-version: [18.x, 20.x, 22.x]
|
|
15
|
+
|
|
16
|
+
steps:
|
|
17
|
+
- name: Checkout repository
|
|
18
|
+
uses: actions/checkout@v4
|
|
19
|
+
|
|
20
|
+
- name: Setup Node.js ${{ matrix.node-version }}
|
|
21
|
+
uses: actions/setup-node@v4
|
|
22
|
+
with:
|
|
23
|
+
node-version: ${{ matrix.node-version }}
|
|
24
|
+
cache: 'npm'
|
|
25
|
+
|
|
26
|
+
- name: Install dependencies
|
|
27
|
+
run: npm ci
|
|
28
|
+
|
|
29
|
+
- name: Run linting (if configured)
|
|
30
|
+
run: |
|
|
31
|
+
if [ -f .eslintrc.js ] || [ -f .eslintrc.json ] || [ -f .eslintrc ]; then
|
|
32
|
+
npx eslint src/ --ext .ts,.tsx
|
|
33
|
+
else
|
|
34
|
+
echo "No ESLint config found, skipping linting"
|
|
35
|
+
fi
|
|
36
|
+
|
|
37
|
+
- name: Type check
|
|
38
|
+
run: npx tsc --noEmit
|
|
39
|
+
|
|
40
|
+
- name: Run tests
|
|
41
|
+
run: npm test
|
|
42
|
+
|
|
43
|
+
- name: Build package
|
|
44
|
+
run: npm run build
|
|
45
|
+
|
|
46
|
+
- name: Verify CLI works
|
|
47
|
+
run: |
|
|
48
|
+
node dist/cli.js --help
|
|
49
|
+
echo "CLI verification successful"
|
|
50
|
+
|
|
51
|
+
security:
|
|
52
|
+
runs-on: ubuntu-latest
|
|
53
|
+
steps:
|
|
54
|
+
- name: Checkout repository
|
|
55
|
+
uses: actions/checkout@v4
|
|
56
|
+
|
|
57
|
+
- name: Setup Node.js
|
|
58
|
+
uses: actions/setup-node@v4
|
|
59
|
+
with:
|
|
60
|
+
node-version: '20.x'
|
|
61
|
+
|
|
62
|
+
- name: Install dependencies
|
|
63
|
+
run: npm ci
|
|
64
|
+
|
|
65
|
+
- name: Run npm audit
|
|
66
|
+
run: npm audit --audit-level=moderate
|
|
67
|
+
|
|
68
|
+
- name: Check for outdated dependencies
|
|
69
|
+
run: npm outdated || true
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
name: Publish to npm
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
release:
|
|
5
|
+
types: [published]
|
|
6
|
+
workflow_dispatch: # 允许手动触发
|
|
7
|
+
|
|
8
|
+
permissions:
|
|
9
|
+
contents: read
|
|
10
|
+
id-token: write # 必需:用于 OIDC 认证
|
|
11
|
+
|
|
12
|
+
jobs:
|
|
13
|
+
publish-npm:
|
|
14
|
+
runs-on: ubuntu-latest
|
|
15
|
+
steps:
|
|
16
|
+
- name: Checkout repository
|
|
17
|
+
uses: actions/checkout@v4
|
|
18
|
+
with:
|
|
19
|
+
fetch-depth: 0
|
|
20
|
+
|
|
21
|
+
- name: Setup Node.js for npm publish
|
|
22
|
+
uses: actions/setup-node@v4
|
|
23
|
+
with:
|
|
24
|
+
node-version: '20.x'
|
|
25
|
+
registry-url: 'https://registry.npmjs.org'
|
|
26
|
+
cache: 'npm'
|
|
27
|
+
|
|
28
|
+
- name: Update npm to latest version
|
|
29
|
+
run: npm install -g npm@latest
|
|
30
|
+
|
|
31
|
+
- name: Install dependencies
|
|
32
|
+
run: npm ci
|
|
33
|
+
|
|
34
|
+
- name: Run tests
|
|
35
|
+
run: npm test
|
|
36
|
+
|
|
37
|
+
- name: Build package
|
|
38
|
+
run: npm run build
|
|
39
|
+
|
|
40
|
+
- name: Verify build
|
|
41
|
+
run: |
|
|
42
|
+
ls -la dist/
|
|
43
|
+
test -f dist/index.js && test -f dist/cli.js
|
|
44
|
+
echo "Build verification successful"
|
|
45
|
+
|
|
46
|
+
- name: Check npm version
|
|
47
|
+
run: npm --version
|
|
48
|
+
|
|
49
|
+
- name: Publish to npm
|
|
50
|
+
run: |
|
|
51
|
+
# 首先尝试不使用 provenance,确保基本发布能工作
|
|
52
|
+
echo "Attempting to publish to npm..."
|
|
53
|
+
npm publish --access public
|
|
54
|
+
env:
|
|
55
|
+
# 对于 GitHub Actions 的 npm 发布,使用 NODE_AUTH_TOKEN
|
|
56
|
+
NODE_AUTH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
name: Version Management
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches: [main]
|
|
6
|
+
paths:
|
|
7
|
+
- 'package.json'
|
|
8
|
+
- 'src/**'
|
|
9
|
+
|
|
10
|
+
jobs:
|
|
11
|
+
check-version:
|
|
12
|
+
runs-on: ubuntu-latest
|
|
13
|
+
outputs:
|
|
14
|
+
version_changed: ${{ steps.check.outputs.version_changed }}
|
|
15
|
+
new_version: ${{ steps.check.outputs.new_version }}
|
|
16
|
+
steps:
|
|
17
|
+
- name: Checkout repository
|
|
18
|
+
uses: actions/checkout@v4
|
|
19
|
+
with:
|
|
20
|
+
fetch-depth: 0
|
|
21
|
+
|
|
22
|
+
- name: Check if version changed
|
|
23
|
+
id: check
|
|
24
|
+
run: |
|
|
25
|
+
# 获取当前版本
|
|
26
|
+
CURRENT_VERSION=$(jq -r '.version' package.json)
|
|
27
|
+
echo "Current version: $CURRENT_VERSION"
|
|
28
|
+
|
|
29
|
+
# 获取上一个提交的版本
|
|
30
|
+
git checkout HEAD~1 package.json 2>/dev/null || true
|
|
31
|
+
PREVIOUS_VERSION=$(jq -r '.version' package.json 2>/dev/null || echo "0.0.0")
|
|
32
|
+
git checkout HEAD package.json
|
|
33
|
+
|
|
34
|
+
echo "Previous version: $PREVIOUS_VERSION"
|
|
35
|
+
|
|
36
|
+
if [ "$CURRENT_VERSION" != "$PREVIOUS_VERSION" ]; then
|
|
37
|
+
echo "Version changed from $PREVIOUS_VERSION to $CURRENT_VERSION"
|
|
38
|
+
echo "version_changed=true" >> $GITHUB_OUTPUT
|
|
39
|
+
echo "new_version=$CURRENT_VERSION" >> $GITHUB_OUTPUT
|
|
40
|
+
else
|
|
41
|
+
echo "Version unchanged"
|
|
42
|
+
echo "version_changed=false" >> $GITHUB_OUTPUT
|
|
43
|
+
echo "new_version=" >> $GITHUB_OUTPUT
|
|
44
|
+
fi
|
|
45
|
+
|
|
46
|
+
create-release:
|
|
47
|
+
needs: check-version
|
|
48
|
+
if: needs.check-version.outputs.version_changed == 'true'
|
|
49
|
+
runs-on: ubuntu-latest
|
|
50
|
+
steps:
|
|
51
|
+
- name: Checkout repository
|
|
52
|
+
uses: actions/checkout@v4
|
|
53
|
+
with:
|
|
54
|
+
fetch-depth: 0
|
|
55
|
+
|
|
56
|
+
- name: Setup Node.js
|
|
57
|
+
uses: actions/setup-node@v4
|
|
58
|
+
with:
|
|
59
|
+
node-version: '20.x'
|
|
60
|
+
|
|
61
|
+
- name: Get version and changelog
|
|
62
|
+
id: get_info
|
|
63
|
+
run: |
|
|
64
|
+
VERSION=$(jq -r '.version' package.json)
|
|
65
|
+
echo "version=$VERSION" >> $GITHUB_OUTPUT
|
|
66
|
+
|
|
67
|
+
# 尝试获取最近的提交信息作为发布说明
|
|
68
|
+
CHANGELOG=$(git log --oneline -n 10 --grep="^feat\|^fix\|^chore\|^docs\|^style\|^refactor\|^test\|^perf" || echo "No significant changes found")
|
|
69
|
+
echo "changelog<<EOF" >> $GITHUB_OUTPUT
|
|
70
|
+
echo "$CHANGELOG" >> $GITHUB_OUTPUT
|
|
71
|
+
echo "EOF" >> $GITHUB_OUTPUT
|
|
72
|
+
|
|
73
|
+
- name: Create GitHub Release
|
|
74
|
+
uses: softprops/action-gh-release@v1
|
|
75
|
+
with:
|
|
76
|
+
tag_name: v${{ steps.get_info.outputs.version }}
|
|
77
|
+
name: Release v${{ steps.get_info.outputs.version }}
|
|
78
|
+
body: |
|
|
79
|
+
## Changes in v${{ steps.get_info.outputs.version }}
|
|
80
|
+
|
|
81
|
+
${{ steps.get_info.outputs.changelog }}
|
|
82
|
+
|
|
83
|
+
### Automated Release
|
|
84
|
+
This release was automatically created when the package version was updated.
|
|
85
|
+
draft: false
|
|
86
|
+
prerelease: false
|
|
87
|
+
env:
|
|
88
|
+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
package/dist/cli.js
CHANGED
|
@@ -38,11 +38,16 @@ const commander_1 = require("commander");
|
|
|
38
38
|
const builder_1 = require("./builder");
|
|
39
39
|
const path = __importStar(require("path"));
|
|
40
40
|
const fs = __importStar(require("fs/promises"));
|
|
41
|
+
// 获取版本号 - 从 package.json 读取
|
|
42
|
+
// 注意:在构建时,版本号会被替换为当前 package.json 中的版本
|
|
43
|
+
function getVersion() {
|
|
44
|
+
return '0.1.2'; // 这个值会在构建时被替换
|
|
45
|
+
}
|
|
41
46
|
const program = new commander_1.Command();
|
|
42
47
|
program
|
|
43
48
|
.name('zengen')
|
|
44
49
|
.description('ZEN - A minimalist Markdown documentation site builder')
|
|
45
|
-
.version(
|
|
50
|
+
.version(getVersion());
|
|
46
51
|
// 构建命令
|
|
47
52
|
program
|
|
48
53
|
.command('build')
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEA,yCAAoC;AACpC,uCAAuC;AAEvC,2CAA6B;AAC7B,gDAAkC;
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "zengen",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.2",
|
|
4
4
|
"description": "ZEN - A minimalist Markdown documentation site builder",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -10,7 +10,10 @@
|
|
|
10
10
|
"scripts": {
|
|
11
11
|
"build": "tsc",
|
|
12
12
|
"dev": "ts-node src/cli.ts",
|
|
13
|
-
"test": "
|
|
13
|
+
"test": "npm run test:types && npm run test:build && npm run test:cli",
|
|
14
|
+
"test:types": "tsc --noEmit",
|
|
15
|
+
"test:build": "npm run build && test -f dist/index.js && test -f dist/cli.js",
|
|
16
|
+
"test:cli": "node -e \"const pkg = require('./package.json'); console.log('Package:', pkg.name, 'v' + pkg.version)\"",
|
|
14
17
|
"prepublishOnly": "npm run build"
|
|
15
18
|
},
|
|
16
19
|
"keywords": [
|
package/src/cli.ts
CHANGED
|
@@ -5,13 +5,21 @@ import { ZenBuilder } from './builder';
|
|
|
5
5
|
import { ZenConfig } from './types';
|
|
6
6
|
import * as path from 'path';
|
|
7
7
|
import * as fs from 'fs/promises';
|
|
8
|
+
import * as fsSync from 'fs';
|
|
9
|
+
import * as url from 'url';
|
|
10
|
+
|
|
11
|
+
// 获取版本号 - 从 package.json 读取
|
|
12
|
+
// 注意:在构建时,版本号会被替换为当前 package.json 中的版本
|
|
13
|
+
function getVersion(): string {
|
|
14
|
+
return '0.1.2'; // 这个值会在构建时被替换
|
|
15
|
+
}
|
|
8
16
|
|
|
9
17
|
const program = new Command();
|
|
10
18
|
|
|
11
19
|
program
|
|
12
20
|
.name('zengen')
|
|
13
21
|
.description('ZEN - A minimalist Markdown documentation site builder')
|
|
14
|
-
.version(
|
|
22
|
+
.version(getVersion());
|
|
15
23
|
|
|
16
24
|
// 构建命令
|
|
17
25
|
program
|