@weotro/dx 0.1.0
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/LICENSE +21 -0
- package/README.md +755 -0
- package/bin/dx-with-version-env.js +8 -0
- package/bin/dx.js +187 -0
- package/lib/artifact-deploy/artifact-builder.js +144 -0
- package/lib/artifact-deploy/config.js +180 -0
- package/lib/artifact-deploy/remote-script.js +301 -0
- package/lib/artifact-deploy/remote-transport.js +86 -0
- package/lib/artifact-deploy.js +70 -0
- package/lib/backend-artifact-deploy/artifact-builder.js +267 -0
- package/lib/backend-artifact-deploy/config.js +218 -0
- package/lib/backend-artifact-deploy/path-utils.js +18 -0
- package/lib/backend-artifact-deploy/remote-phases.js +14 -0
- package/lib/backend-artifact-deploy/remote-result.js +44 -0
- package/lib/backend-artifact-deploy/remote-script.js +507 -0
- package/lib/backend-artifact-deploy/remote-transport.js +123 -0
- package/lib/backend-artifact-deploy/rollback.js +5 -0
- package/lib/backend-artifact-deploy/runtime-package.js +46 -0
- package/lib/backend-artifact-deploy.js +91 -0
- package/lib/backend-package.js +674 -0
- package/lib/cli/args.js +38 -0
- package/lib/cli/command-result.js +1 -0
- package/lib/cli/commands/contracts.js +60 -0
- package/lib/cli/commands/core.js +533 -0
- package/lib/cli/commands/db.js +231 -0
- package/lib/cli/commands/deploy.js +175 -0
- package/lib/cli/commands/env.js +120 -0
- package/lib/cli/commands/export.js +39 -0
- package/lib/cli/commands/package.js +22 -0
- package/lib/cli/commands/release.js +55 -0
- package/lib/cli/commands/stack.js +427 -0
- package/lib/cli/commands/start.js +58 -0
- package/lib/cli/commands/worktree.js +145 -0
- package/lib/cli/dx-cli.js +1072 -0
- package/lib/cli/flags.js +123 -0
- package/lib/cli/help-model.js +222 -0
- package/lib/cli/help-renderer.js +137 -0
- package/lib/cli/help-schema.js +552 -0
- package/lib/cli/help.js +141 -0
- package/lib/cli/index.js +4 -0
- package/lib/cli/nx-command.js +13 -0
- package/lib/codex-initial.js +271 -0
- package/lib/confirm.js +213 -0
- package/lib/env-policy.js +134 -0
- package/lib/env-profile.js +435 -0
- package/lib/env.js +261 -0
- package/lib/exec.js +692 -0
- package/lib/logger.js +239 -0
- package/lib/nx-ignore.js +45 -0
- package/lib/run-with-version-env.js +163 -0
- package/lib/sdk-build.js +424 -0
- package/lib/start-dev.js +401 -0
- package/lib/telegram-webhook.js +431 -0
- package/lib/validate-env.js +317 -0
- package/lib/vercel-deploy.js +549 -0
- package/lib/version.js +14 -0
- package/lib/worktree.js +1052 -0
- package/package.json +45 -0
- package/skills/create-issue/SKILL.md +90 -0
- package/skills/delivering-design-handoff/SKILL.md +290 -0
- package/skills/doctor/SKILL.md +76 -0
- package/skills/gh-dependabot-cleanup/SKILL.md +54 -0
- package/skills/gh-dependabot-cleanup/agents/openai.yaml +7 -0
- package/skills/git-release/SKILL.md +194 -0
- package/skills/git-release/agents/openai.yaml +7 -0
- package/skills/online-debug-guard/SKILL.md +111 -0
- package/skills/ship-issue-pr/SKILL.md +676 -0
- package/skills/stagewise-ui-debugging/SKILL.md +48 -0
|
@@ -0,0 +1,194 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: git-release
|
|
3
|
+
description: 仅在用户显式调用 $git-release 或明确要求使用 git-release 技能时使用;不要通过关键词、任务类型或上下文自动触发。
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Git Release
|
|
7
|
+
|
|
8
|
+
## 目标
|
|
9
|
+
|
|
10
|
+
在 `release/vX.Y.Z` 或 `release/vX.Y.Z-<prerelease>.N` 分支上,完成从发布前检查到 GitHub Release 创建的全流程;若当前不在 release 分支,则先从最新 `main` 自动创建目标 release 分支。
|
|
11
|
+
|
|
12
|
+
## 执行原则
|
|
13
|
+
|
|
14
|
+
- 全程使用中文输出。
|
|
15
|
+
- 严格执行前置校验,任何硬性条件不满足时立即终止。
|
|
16
|
+
- 发行说明必须结构化、可读、可追溯。
|
|
17
|
+
- 命令默认在仓库根目录执行。
|
|
18
|
+
- 若能从当前 release 分支或自动建分支流程唯一推断出合法版本号,直接使用该版本继续发布,不要询问用户确认。
|
|
19
|
+
|
|
20
|
+
## 流程
|
|
21
|
+
|
|
22
|
+
### 一、发布前检查
|
|
23
|
+
|
|
24
|
+
1. 检查工作区是否干净:`git status --porcelain`。
|
|
25
|
+
2. 若存在未提交变更,列出文件并终止流程。
|
|
26
|
+
3. 检查当前分支:`git branch --show-current`。
|
|
27
|
+
4. 若当前分支不匹配 `^release/v\d+\.\d+\.\d+(-(alpha|beta|rc)\.\d+)?$`,执行以下自动建分支流程(仅此场景执行):
|
|
28
|
+
- 同步远程与本地 `main`:`git fetch origin main --tags && git checkout main && git pull --ff-only origin main`。
|
|
29
|
+
- 获取上一个已发布版本(优先):`gh release list --limit 1 --json tagName,publishedAt --jq '.[0].tagName'`;若为空则回退 `git describe --tags --abbrev=0`。
|
|
30
|
+
- 解析版本号并将最后一位加一(例如 `v1.2.3 -> v1.2.4`),得到新分支版本 `<NEXT_VERSION>`。
|
|
31
|
+
- 创建并切换分支:`git checkout -b release/v<NEXT_VERSION>`。
|
|
32
|
+
5. 再次检查当前分支,必须匹配:`^release/v\d+\.\d+\.\d+(-(alpha|beta|rc)\.\d+)?$`。
|
|
33
|
+
6. 从分支名提取版本号,例如:
|
|
34
|
+
- `release/v1.2.3` -> `v1.2.3` -> `1.2.3`
|
|
35
|
+
- `release/v1.2.3-beta.2` -> `v1.2.3-beta.2` -> `1.2.3-beta.2`
|
|
36
|
+
7. 检查目标 tag 是否已存在:`git tag -l "v<VERSION>"`。
|
|
37
|
+
8. 输出推断出的版本号和推断来源,直接使用该版本号继续执行;不要向用户请求确认。
|
|
38
|
+
9. 仅当无法从分支名或自动建分支流程唯一推断出合法版本号时,终止并要求用户显式指定目标版本。
|
|
39
|
+
|
|
40
|
+
### 二、更新版本号
|
|
41
|
+
|
|
42
|
+
1. 更新以下文件的 `version` 字段为纯版本号(不带 `v` 前缀):
|
|
43
|
+
- `package.json`
|
|
44
|
+
- `apps/backend/package.json`
|
|
45
|
+
- `apps/front/package.json`
|
|
46
|
+
- `apps/admin-front/package.json`
|
|
47
|
+
2. 仅修改 `version` 字段,不变更其他内容。
|
|
48
|
+
3. 执行提交:
|
|
49
|
+
|
|
50
|
+
```bash
|
|
51
|
+
git add package.json apps/*/package.json
|
|
52
|
+
git commit -F - <<'MSG'
|
|
53
|
+
chore: bump version to <VERSION>
|
|
54
|
+
|
|
55
|
+
更新所有 package.json 版本号为 <VERSION>
|
|
56
|
+
|
|
57
|
+
发布准备提交
|
|
58
|
+
MSG
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
### 三、收集与分析变更
|
|
62
|
+
|
|
63
|
+
1. 优先获取最近已发布版本:
|
|
64
|
+
|
|
65
|
+
```bash
|
|
66
|
+
gh release list --limit 1 --json tagName,publishedAt --jq '.[0].tagName'
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
2. 若无 GitHub Release,回退:`git describe --tags --abbrev=0`。
|
|
70
|
+
3. 采集范围:`<last-release-tag>..HEAD`。
|
|
71
|
+
4. 收集数据:
|
|
72
|
+
- `git log <last-release-tag>..HEAD --oneline`
|
|
73
|
+
- `git log <last-release-tag>..HEAD --pretty=format:"%H|%s|%b"`
|
|
74
|
+
- `git diff <last-release-tag>..HEAD --shortstat`
|
|
75
|
+
5. 从提交中提取 PR 编号(合并提交、Refs、Closes 等),并用 `gh pr view` 获取标题与标签。
|
|
76
|
+
6. 去重同一 PR。
|
|
77
|
+
7. 分类变更:
|
|
78
|
+
- 新增:`feat` 或 feature 标签
|
|
79
|
+
- 优化:`refactor`、`perf`、`chore`
|
|
80
|
+
- 修复:`fix` 或 bug 标签
|
|
81
|
+
- 技术改进:`docs`、`test`、`build`、`ci`
|
|
82
|
+
8. 过滤噪音:忽略无意义合并记录与 `chore: bump version`。
|
|
83
|
+
9. 识别运维提醒:环境变量、数据库迁移、依赖更新、配置与部署变更。
|
|
84
|
+
|
|
85
|
+
### 四、生成发行说明
|
|
86
|
+
|
|
87
|
+
1. 生成 3-5 条发布摘要,按业务影响排序。
|
|
88
|
+
2. 输出分类变更清单,关联 PR 或 Issue。
|
|
89
|
+
3. 使用以下结构:
|
|
90
|
+
|
|
91
|
+
```markdown
|
|
92
|
+
# v<VERSION> 发行说明
|
|
93
|
+
|
|
94
|
+
## 发布摘要
|
|
95
|
+
|
|
96
|
+
- <核心变更1> (#PR)
|
|
97
|
+
- <核心变更2> (#PR)
|
|
98
|
+
- <核心变更3> (#PR)
|
|
99
|
+
|
|
100
|
+
发布日期:<YYYY-MM-DD>
|
|
101
|
+
对比分支:`<last-tag>...v<VERSION>`
|
|
102
|
+
|
|
103
|
+
## 新增
|
|
104
|
+
|
|
105
|
+
- <新增项> (#PR)
|
|
106
|
+
|
|
107
|
+
## 优化
|
|
108
|
+
|
|
109
|
+
- <优化项> (#PR)
|
|
110
|
+
|
|
111
|
+
## 修复
|
|
112
|
+
|
|
113
|
+
- <修复项> (#PR)
|
|
114
|
+
|
|
115
|
+
## 技术改进
|
|
116
|
+
|
|
117
|
+
- <技术改进项> (#PR)
|
|
118
|
+
|
|
119
|
+
## 运维提醒
|
|
120
|
+
|
|
121
|
+
- <提醒项>
|
|
122
|
+
|
|
123
|
+
## 引用
|
|
124
|
+
|
|
125
|
+
- PRs:#1, #2
|
|
126
|
+
- Issues:#10
|
|
127
|
+
- 共计 <X> 个提交
|
|
128
|
+
|
|
129
|
+
## 升级指南
|
|
130
|
+
|
|
131
|
+
1. <步骤1>
|
|
132
|
+
2. <步骤2>
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
### 五、创建发布
|
|
136
|
+
|
|
137
|
+
1. 创建 annotated tag:
|
|
138
|
+
|
|
139
|
+
```bash
|
|
140
|
+
git tag -a v<VERSION> -m "Release v<VERSION>"
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
2. 推送 tag:
|
|
144
|
+
|
|
145
|
+
```bash
|
|
146
|
+
git push origin v<VERSION>
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
3. 创建 GitHub Release:
|
|
150
|
+
|
|
151
|
+
```bash
|
|
152
|
+
gh release create v<VERSION> \
|
|
153
|
+
--title "v<VERSION>" \
|
|
154
|
+
--notes-file - <<'EOF'
|
|
155
|
+
<完整发行说明>
|
|
156
|
+
EOF
|
|
157
|
+
```
|
|
158
|
+
|
|
159
|
+
4. 输出发布 URL 与发布后检查清单。
|
|
160
|
+
|
|
161
|
+
## 终止条件
|
|
162
|
+
|
|
163
|
+
以下任一情况出现时终止流程并给出明确原因:
|
|
164
|
+
|
|
165
|
+
- 工作区存在未提交修改。
|
|
166
|
+
- 当前分支不符合 release 分支命名规则,且无法从 `main` 自动创建 release 分支。
|
|
167
|
+
- 版本号格式非法或与现有 tag 冲突。
|
|
168
|
+
- 自上次发布以来无新提交。
|
|
169
|
+
|
|
170
|
+
## 输出模板
|
|
171
|
+
|
|
172
|
+
### 发布前状态
|
|
173
|
+
|
|
174
|
+
- 工作目录状态
|
|
175
|
+
- 当前分支
|
|
176
|
+
- 解析出的版本号
|
|
177
|
+
- 版本格式校验结果
|
|
178
|
+
- tag 冲突校验结果
|
|
179
|
+
|
|
180
|
+
### 变更分析
|
|
181
|
+
|
|
182
|
+
- 基准版本
|
|
183
|
+
- 提交范围
|
|
184
|
+
- 提交数与 PR 数
|
|
185
|
+
- 代码变更统计
|
|
186
|
+
- 分类统计
|
|
187
|
+
|
|
188
|
+
### 发布结果
|
|
189
|
+
|
|
190
|
+
- 版本号
|
|
191
|
+
- 分支名
|
|
192
|
+
- tag 推送状态
|
|
193
|
+
- Release URL
|
|
194
|
+
- 发布后清单
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: online-debug-guard
|
|
3
|
+
description: 仅在用户显式调用 $online-debug-guard 或明确要求使用 online-debug-guard 技能时使用;不要通过关键词、任务类型或上下文自动触发。
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# 在线调试安全护栏
|
|
7
|
+
|
|
8
|
+
## 概览
|
|
9
|
+
|
|
10
|
+
在线调试先确认环境,再按环境选择门禁。只有 `production` 需要检查当前是否为 Plan 模式;其他环境不做 Plan 模式门禁。
|
|
11
|
+
|
|
12
|
+
调试默认只读取证。需要改变远程状态、数据状态或进程状态时,先停下并取得用户明确授权。
|
|
13
|
+
|
|
14
|
+
## 执行流程
|
|
15
|
+
|
|
16
|
+
1. 识别目标环境。
|
|
17
|
+
2. 如果目标环境是 `production`,校验当前会话是否为 Plan 模式。
|
|
18
|
+
3. 使用 SSH config 连接远程机器。
|
|
19
|
+
4. 通过远程运行时、pm2、shared 环境变量目录和当前代码目录取证。
|
|
20
|
+
5. 汇总目标环境、门禁结果、关键证据和下一步建议。
|
|
21
|
+
|
|
22
|
+
## 1. 识别目标环境
|
|
23
|
+
|
|
24
|
+
只接受 `development`、`staging`、`production` 三种值。
|
|
25
|
+
|
|
26
|
+
如果用户未显式给出环境:
|
|
27
|
+
- 先询问用户当前环境。
|
|
28
|
+
- 若无法确认,则默认 `development`,并明确告知本次按 `development` 执行。
|
|
29
|
+
|
|
30
|
+
如果用户给了其他环境名,例如 `prod1`、`test`:
|
|
31
|
+
- 立即终止。
|
|
32
|
+
- 提示:`环境无效,仅支持 development/staging/production。`
|
|
33
|
+
|
|
34
|
+
## 2. Production 门禁
|
|
35
|
+
|
|
36
|
+
当且仅当目标环境是 `production` 时,必须确认当前处于 Plan 模式。
|
|
37
|
+
|
|
38
|
+
如果不是 Plan 模式,立即终止并提示:
|
|
39
|
+
|
|
40
|
+
```text
|
|
41
|
+
已终止:当前为 production 环境,但会话不在 Plan 模式。
|
|
42
|
+
请切换到 Plan 模式后再继续在线调试。
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
`development` 和 `staging` 不需要检查 Plan 模式,也不需要检查本地 `.env.*` 文件是否存在。
|
|
46
|
+
|
|
47
|
+
## 3. 远程连接规范
|
|
48
|
+
|
|
49
|
+
调试或查找问题时,通过本机 SSH config 中已有的 Host 配置连接远程机器。
|
|
50
|
+
|
|
51
|
+
远程连接参数固定来自以下 SSH config Host:
|
|
52
|
+
- `production` 环境:`ai-prod`
|
|
53
|
+
- `staging` 环境:`ai-staging`
|
|
54
|
+
|
|
55
|
+
```bash
|
|
56
|
+
ssh ai-prod
|
|
57
|
+
ssh ai-staging
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
连接后如果需要 root 权限,运行:
|
|
61
|
+
|
|
62
|
+
```bash
|
|
63
|
+
sudo -s
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
不要手写散落的 IP、用户名、私钥路径或临时 SSH 参数;优先复用 SSH config,避免连错机器。
|
|
67
|
+
|
|
68
|
+
## 4. 远程取证规范
|
|
69
|
+
|
|
70
|
+
远程服务通常由 pm2 管理。优先使用 pm2 的只读命令获取信息,例如:
|
|
71
|
+
|
|
72
|
+
```bash
|
|
73
|
+
pm2 list
|
|
74
|
+
pm2 describe <app>
|
|
75
|
+
pm2 logs <app> --lines 200
|
|
76
|
+
pm2 env <id>
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
远程环境变量通常在:
|
|
80
|
+
|
|
81
|
+
```text
|
|
82
|
+
/home/ubuntu/work/{$project_name}/shared
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
需要数据库、Redis、第三方服务等连接参数时,到该目录读取对应环境文件或配置。读取机密时只用于定位问题,不在最终回复中暴露完整密钥、密码或 token。
|
|
86
|
+
|
|
87
|
+
## 5. 代码与产物边界
|
|
88
|
+
|
|
89
|
+
本地运行代码一般在当前目录下执行。
|
|
90
|
+
|
|
91
|
+
远程机器上运行的是编译后的产物。排查时区分:
|
|
92
|
+
- 本地源码:用于阅读、复现、运行测试和定位实现逻辑。
|
|
93
|
+
- 远程产物:用于确认线上实际运行版本、pm2 进程、日志、环境变量和部署状态。
|
|
94
|
+
|
|
95
|
+
不要假设远程源码与本地源码完全一致;需要时用版本号、提交 SHA、构建时间、pm2 环境或部署目录内容交叉确认。
|
|
96
|
+
|
|
97
|
+
## 安全规则
|
|
98
|
+
|
|
99
|
+
- 默认只读:优先查询、检查、对比、日志分析。
|
|
100
|
+
- 未获用户明确授权前,禁止写库、删键、迁移、重启、reload、发布、修改远程文件或改环境变量。
|
|
101
|
+
- 需要执行写操作时,先说明操作对象、影响范围、回滚方式和为什么必须这么做。
|
|
102
|
+
- 输出结论必须包含:目标环境、Plan 门禁是否适用与结果、关键证据、下一步建议。
|
|
103
|
+
|
|
104
|
+
## 标准开场模板
|
|
105
|
+
|
|
106
|
+
```text
|
|
107
|
+
开始在线调试前先执行安全门禁:
|
|
108
|
+
1) 确认环境(development/staging/production)
|
|
109
|
+
2) 只有 production 需要校验当前是否为 Plan 模式
|
|
110
|
+
3) 门禁通过后,通过 SSH config 连接远程机器,并优先用 pm2、shared 环境目录和日志只读取证
|
|
111
|
+
```
|