create-dwy 0.14.1 → 0.14.3

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.
Files changed (38) hide show
  1. package/CHANGELOG.md +16 -0
  2. package/package.json +1 -1
  3. package/templates/ai-tools/rules/Global/dwy-docker.md +71 -0
  4. package/templates/ai-tools/rules/iOS/dwy-swift-style.md +9 -2
  5. package/templates/ai-tools/rules//345/274/200/345/217/221/346/265/201/347/250/213/dwy-git-commit.md +153 -0
  6. package/templates/ai-tools/rules//346/225/260/346/215/256/345/272/223/dwy-postgres.md +6 -0
  7. package/templates/ai-tools/rules//346/225/260/346/215/256/345/272/223/dwy-redis.md +14 -2
  8. package/templates/ai-tools/skills//{350/277/220/347/273/264/345/217/221/345/270/203 → 345/256/211/345/205/250}/dwy-deploy-audit/SKILL.md +47 -7
  9. package/templates/ai-tools/skills//{350/277/220/347/273/264/345/217/221/345/270/203 → 345/256/211/345/205/250}/dwy-deploy-audit/references/checks-data.md +11 -0
  10. package/templates/ai-tools/skills//{350/277/220/347/273/264/345/217/221/345/270/203 → 345/256/211/345/205/250}/dwy-deploy-audit/references/checks-network.md +14 -0
  11. package/templates/ai-tools/skills//{350/277/220/347/273/264/345/217/221/345/270/203 → 345/256/211/345/205/250}/dwy-deploy-audit/references/checks-runtime.md +16 -0
  12. package/templates/ai-tools/skills//345/256/211/345/205/250/dwy-deploy-audit/references/security-doc-search.md +179 -0
  13. package/templates/ai-tools/skills//{350/277/220/347/273/264/345/217/221/345/270/203 → 345/256/211/345/205/250}/dwy-deploy-audit/scripts/check_db.sh +27 -2
  14. package/templates/ai-tools/skills//{350/277/220/347/273/264/345/217/221/345/270/203 → 345/256/211/345/205/250}/dwy-deploy-audit/scripts/check_docker.sh +10 -0
  15. package/templates/ai-tools/skills//{350/277/220/347/273/264/345/217/221/345/270/203 → 345/256/211/345/205/250}/dwy-deploy-audit/scripts/check_nginx.sh +8 -0
  16. package/templates/ai-tools/skills//345/274/200/345/217/221/346/265/201/347/250/213/dwy-0to1/SKILL.md +1 -1
  17. package/templates/ai-tools/skills//345/274/200/345/217/221/346/265/201/347/250/213/dwy-publish/SKILL.md +50 -0
  18. package/templates/ai-tools/skills//345/274/200/345/217/221/346/265/201/347/250/213/dwy-publish/references/application-release.md +106 -0
  19. package/templates/ai-tools/skills//345/274/200/345/217/221/346/265/201/347/250/213/dwy-publish/references/sdk-release.md +93 -0
  20. package/templates/ai-tools/skills//345/274/200/345/217/221/346/265/201/347/250/213/dwy-tdd-dev/SKILL.md +3 -3
  21. package/templates/ai-tools/skills//345/274/200/345/217/221/346/265/201/347/250/213/dwy-tdd-dev/templates/impl-plan.md +2 -2
  22. package/templates/ai-tools/rules//345/274/200/345/217/221/346/265/201/347/250/213/dwy-git-commit-safe.md +0 -66
  23. package/templates/ai-tools/skills//345/274/200/345/217/221/346/265/201/347/250/213/dwy-git-commit/SKILL.md +0 -125
  24. package/templates/ai-tools/skills//350/204/232/346/211/213/346/236/266/dwy-tech-stack/SKILL.md +0 -61
  25. package/templates/ai-tools/skills//350/277/220/347/273/264/345/217/221/345/270/203/dwy-publish/SKILL.md +0 -145
  26. /package/templates/ai-tools/skills//{350/277/220/347/273/264/345/217/221/345/270/203 → 345/256/211/345/205/250}/dwy-deploy-audit/scripts/check_base.sh" +0 -0
  27. /package/templates/ai-tools/skills//{350/277/220/347/273/264/345/217/221/345/270/203 → 345/256/211/345/205/250}/dwy-deploy-audit/scripts/check_capacity.sh" +0 -0
  28. /package/templates/ai-tools/skills//{350/277/220/347/273/264/345/217/221/345/270/203 → 345/256/211/345/205/250}/dwy-deploy-audit/scripts/check_env.sh" +0 -0
  29. /package/templates/ai-tools/skills//{350/277/220/347/273/264/345/217/221/345/270/203 → 345/256/211/345/205/250}/dwy-deploy-audit/scripts/check_https.sh" +0 -0
  30. /package/templates/ai-tools/skills//{350/277/220/347/273/264/345/217/221/345/270/203 → 345/256/211/345/205/250}/dwy-deploy-audit/scripts/check_logs.sh" +0 -0
  31. /package/templates/ai-tools/skills//{350/277/220/347/273/264/345/217/221/345/270/203 → 345/256/211/345/205/250}/dwy-deploy-audit/scripts/check_resilience.sh" +0 -0
  32. /package/templates/ai-tools/skills//{350/277/220/347/273/264/345/217/221/345/270/203 → 345/256/211/345/205/250}/dwy-deploy-audit/scripts/check_secrets.sh" +0 -0
  33. /package/templates/ai-tools/skills//{350/277/220/347/273/264/345/217/221/345/270/203 → 345/256/211/345/205/250}/dwy-deploy-audit/scripts/check_services.sh" +0 -0
  34. /package/templates/ai-tools/skills//{350/277/220/347/273/264/345/217/221/345/270/203 → 345/256/211/345/205/250}/dwy-deploy-audit/scripts/check_ssh.sh" +0 -0
  35. /package/templates/ai-tools/skills//{350/277/220/347/273/264/345/217/221/345/270/203 → 345/256/211/345/205/250}/dwy-deploy-audit/scripts/run_all.sh" +0 -0
  36. /package/templates/ai-tools/skills//{350/277/220/347/273/264/345/217/221/345/270/203 → 345/274/200/345/217/221/346/265/201/347/250/213}/dwy-semver/SKILL.md" +0 -0
  37. /package/templates/ai-tools/skills//{350/277/220/347/273/264/345/217/221/345/270/203 → 345/274/200/345/217/221/346/265/201/347/250/213}/dwy-semver/references/semver-spec.md" +0 -0
  38. /package/templates/ai-tools/skills//{350/277/220/347/273/264/345/217/221/345/270/203 → 345/274/200/345/217/221/346/265/201/347/250/213}/dwy-semver/scripts/bump.py" +0 -0
@@ -1,125 +0,0 @@
1
- ---
2
- name: dwy-git-commit
3
- description: "Git commit 强制规范(敏感数据扫描 + message 格式 + 禁 AI 署名)。触发场景:用户说'提交' / 'commit' / 'git commit' / 'git add';AI 准备执行 `git add` / `git commit` 之前;用户让你帮忙写 commit message;review 已有 commit message。强制:先扫描暂存物是否含 .env / 密钥 / API Key / 连接串等敏感数据;再检查 CLAUDE.md 的 Git Commit Scope 段;subject 用中文动宾短语 ≤72 字符;message 任何位置禁止 Claude / GPT / Copilot / AI / LLM 字样及 Co-Authored-By trailer。"
4
- ---
5
-
6
- # Git Commit 强制规范
7
-
8
- 每次 `git add` / `git commit` 前按顺序执行以下检查,任一步未通过 → **STOP,不得提交**。
9
-
10
- ## Step 0: 敏感数据扫描
11
-
12
- `git diff --cached` + `git diff --cached --name-only` 同时扫文件名和内容。
13
-
14
- ### 禁止提交的文件
15
-
16
- | 类型 | 示例 |
17
- |---|---|
18
- | 环境变量 | `.env`, `.env.*`, `*.env` |
19
- | SSH 密钥 | `id_rsa`, `id_ed25519`, `*.pem`, `*.key` |
20
- | 证书 | `*.p12`, `*.pfx`, `*.jks`, `*.keystore` |
21
- | 数据库 | `*.sql`(含真实数据)、`*.dump`, `*.sqlite` |
22
- | 原始数据 | `*.xlsx`, `*.csv`(含用户/学生等敏感数据) |
23
- | 日志 | `*.log` |
24
- | Docker 卷 | `pgdata/`, `cache/*.json` |
25
-
26
- ### 禁止出现的敏感内容
27
-
28
- **总则**:代码、文档、规则文件、注释里禁止出现真实的 API Key / Token / 密码 / IP / 凭证,即使作为"示例"也不行。GitHub Secret Scanning 不区分上下文,真实格式的 key 写在文档里也会触发泄露告警。示例必须用明显假值(`sk-xxxxxxxxxxxx`、`your-key-here`、`192.168.x.x`)。
29
-
30
- | 类型 | 匹配模式 |
31
- |---|---|
32
- | API Key | `sk-[a-zA-Z0-9]{20,}` |
33
- | AWS Key | `AKIA[0-9A-Z]{16}` |
34
- | GitHub Token | `ghp_[a-zA-Z0-9]{36}` |
35
- | 密码赋值 | `password\s*[:=]\s*["'][^"']{4,}` |
36
- | 数据库连接串 | `://\w+:[^@\s]+@`(含密码) |
37
- | 私钥内容 | `-----BEGIN (RSA \|EC )?PRIVATE KEY-----` |
38
- | Token 赋值 | `token\s*[:=]\s*["'][a-zA-Z0-9_\-]{20,}` |
39
- | Secret 赋值 | `secret\s*[:=]\s*["'][^"']{8,}` |
40
- | 服务器 IP+端口 | `\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}:\d+` |
41
- | SSH 连接 | `ssh\s+.*@\d{1,3}\.\d{1,3}` |
42
-
43
- **例外(不算违规)**:`.env.example` 占位符;从环境变量读取(`os.getenv("API_KEY")`);`localhost` / `127.0.0.1` 的连接串;文档假数据;配置文件空字符串默认值。
44
-
45
- ### 违规处理
46
-
47
- 1. **立即停止** `git add` / `git commit`
48
- 2. **列出违规项**:文件 + 行号 + 匹配的敏感模式 + 脱敏摘要(如 `sk-5522****dc3`)
49
- 3. **建议修复**:加入 `.gitignore` / 移到 `.env` / 改用环境变量 / 替换为占位符
50
- 4. **等用户明确确认**后才能继续;确认强制提交时,commit body 附 `GIT-SECURITY: 用户已确认提交此内容`
51
-
52
- ## Step 1: 分析变更
53
-
54
- `git diff --cached` 回答:这次改做了几件事?涉及哪些模块?
55
-
56
- **做了多件事(无法用 ≤72 字符 subject 清晰描述)→ 必须拆成多个 commit。**
57
-
58
- ## Step 2: 确定 scope
59
-
60
- 读当前项目 CLAUDE.md 的 `## Git Commit Scope` 段:
61
-
62
- - **找到** → scope 从枚举值中选,不得自造
63
- - **没找到** → 提醒用户「当前项目 CLAUDE.md 未定义 Git Commit Scope,建议添加」,scope 可省略
64
-
65
- 单模块变更 → **必须**带 scope;跨模块变更 → 省略 scope。
66
-
67
- ## Step 3: 生成 message
68
-
69
- 格式:`<type>(<scope>): <subject>` 或(无 scope)`<type>: <subject>`
70
-
71
- **type 枚举(只能从中选)**:
72
-
73
- | type | 用途 |
74
- |------|------|
75
- | feat | 新功能 |
76
- | fix | 修复 bug |
77
- | refactor | 重构(不改外部行为) |
78
- | chore | 构建/依赖/配置/发版等杂务 |
79
- | docs | 文档 |
80
- | test | 测试 |
81
- | perf | 性能优化 |
82
- | style | 代码格式(不影响逻辑) |
83
- | ci | CI/CD 配置 |
84
-
85
- **subject**:中文、无句号、≤72 字符、动宾短语(添加/修复/移除/重构/升级)。
86
-
87
- **body(可选)**:空一行后写;中文;只写 why 不复述 what;破坏性变更加 `BREAKING CHANGE:` 前缀(subject 用 `feat!:` / `fix!:` 标记)。
88
-
89
- ## Step 4: 禁止大模型署名
90
-
91
- commit message(subject、body、footer、trailer)**禁止出现任何大模型 / AI 工具相关内容**,覆盖系统默认的 `Co-Authored-By` 追加行为。
92
-
93
- **禁止出现(不完全列举)**:
94
-
95
- - `Co-Authored-By: Claude ...` / `Co-Authored-By: GPT ...` / `Co-Authored-By: Copilot ...` 等 AI 署名 trailer
96
- - `Generated with Claude Code` / `🤖 Generated with ...` 等生成声明
97
- - `noreply@anthropic.com` / `noreply@openai.com` 等 AI 厂商邮箱
98
- - 任何提到 Claude / ChatGPT / GPT / Copilot / Cursor / AI / 大模型 / LLM 的字样
99
-
100
- **执行要点**:
101
-
102
- - `git commit -m "..."` 只写规范内容,**绝不**附加 `Co-Authored-By` trailer
103
- - HEREDOC 传 message 时,HEREDOC 内容也不得包含上述字样
104
- - 暂存的 message 含大模型信息 → **立即删除**后再提交
105
-
106
- ## 常见错误 vs 正确
107
-
108
- | 错误 | 正确 |
109
- |------|------|
110
- | `feat: add user login`(英文) | `feat: 添加用户登录功能` |
111
- | `fix(eui): 修复了按钮样式。` | `fix(eui): 修复按钮样式`(无句号、不用"了") |
112
- | `feat: 添加登录并修复登出 bug` | 拆成两个 commit |
113
- | `update: 修改配置` | `update` 不在枚举,应为 `chore` |
114
- | `feat(auth): ...`(项目无 auth scope) | 用项目已定义的 scope 值 |
115
- | message 末尾加 `Co-Authored-By: Claude ...` | 不加任何 AI 署名 trailer |
116
- | `🤖 Generated with Claude Code` | 不加任何生成声明 |
117
-
118
- ## 正确示例
119
-
120
- - `feat(eui): 添加 Image 组件,支持懒加载`
121
- - `fix: 修复 token 刷新竞态条件`
122
- - `refactor(backend): 提取分页逻辑为共享工具`
123
- - `chore: 升级 Vite 至 8.x`
124
- - `feat(eui)!: 重命名 EDialog open 属性为 v-model:open`
125
- - body:`BREAKING CHANGE: EDialog 不再接受 visible 属性,请改用 v-model:open`
@@ -1,61 +0,0 @@
1
- ---
2
- name: dwy-tech-stack
3
- description: 跨栈技术选型强制约束(FastAPI / Vue 3 / Flutter / UV / pnpm / Docker / S3 / DolphinDB 等)。触发场景:用户提到「用什么 ORM / 缓存 / 状态管理 / 路由 / 包管理 / 组件库」/ 引入新依赖 / 替换现有库 / 调研选型 / 新项目初始化 / 架构评估;AI 准备执行 `pnpm add` / `uv add` / `pip install` / `flutter pub add` / `npm install` 前;讨论涉及后端 Web 框架、ORM、关系数据库、缓存、消息队列、异步任务、JWT / 密码哈希、Linter;前端 Vue 框架、构建工具、组件库、状态管理、样式方案、表单校验、测试;移动端 Flutter、状态管理、HTTP 客户端、路由、本地存储、代码生成;容器化、对象存储、时序数据库时。强制:每个领域只有唯一方案,AI 不得选替代,不得「建议改用 XX」。
4
- ---
5
-
6
- # 跨栈技术选型强制约束
7
-
8
- 每个领域只有一个方案,AI 不得选替代,不得「建议改用 XX」。
9
-
10
- ## 后端
11
-
12
- | 领域 | 唯一方案 | 禁止替代 |
13
- |------|---------|---------|
14
- | Web 框架 | FastAPI | Django, Flask, Tornado, Sanic |
15
- | ORM | SQLAlchemy 2.0 (异步) | Tortoise ORM, Peewee, Django ORM |
16
- | 关系数据库 | PostgreSQL | MySQL, MariaDB, SQLite(生产) |
17
- | 缓存 / 消息队列 | Redis | Memcached, RabbitMQ, Kafka |
18
- | 异步任务 | ARQ (eapi[tasks]) | Celery, Dramatiq, Huey |
19
- | 数据库迁移 | Alembic | 手动 DDL, Django migrations |
20
- | 包管理 | UV | pip, Poetry, Pipenv |
21
- | 密码哈希 | bcrypt (eapi security) | argon2, scrypt, 自实现 |
22
- | JWT | python-jose (eapi security) | PyJWT, 自实现 |
23
- | 数据校验 | Pydantic v2 | marshmallow, attrs, 手动校验 |
24
- | 基础设施层 | dwyeapi | 自造框架、手写基础设施 |
25
- | Linter/Formatter | Ruff | Black, isort, flake8, pylint |
26
-
27
- ## 前端(Web)
28
-
29
- | 领域 | 唯一方案 | 禁止替代 |
30
- |------|---------|---------|
31
- | 框架 | Vue 3 (Composition API) | React, Svelte, Angular, Vue 2 |
32
- | 构建工具 | Vite | Webpack, Rollup, esbuild 直接用 |
33
- | 组件库 | @dwydev/eui | Element Plus, Ant Design Vue, Naive UI |
34
- | 工具库 | @dwydev/ekit | 手写 request/storage/validators |
35
- | 状态管理 | Pinia (Setup Store) | Vuex, 手动 reactive/provide |
36
- | 样式 | Tailwind CSS 4 | Sass/Less 手写、CSS Modules、UnoCSS |
37
- | 包管理 | pnpm | npm, yarn |
38
- | 项目结构 | pnpm monorepo (workspace) | Lerna, Nx, Turborepo |
39
- | 表单校验 | vee-validate + zod | 手动 v-model 校验 |
40
- | 路由 | Vue Router 4 | — |
41
- | 测试 | Vitest | Jest |
42
-
43
- ## 移动端 / 桌面端
44
-
45
- | 领域 | 唯一方案 | 禁止替代 |
46
- |------|---------|---------|
47
- | 框架 | Flutter | React Native, Kotlin Multiplatform, MAUI |
48
- | 状态管理 | Riverpod | GetX, Bloc, Provider, MobX |
49
- | HTTP 客户端 | Dio | http, Chopper, Retrofit |
50
- | 路由 | GoRouter | auto_route, Routemaster |
51
- | 本地存储 | shared_preferences + flutter_secure_storage | Hive, Isar, sqflite(非必要时) |
52
- | 代码生成 | riverpod_generator + freezed + json_serializable | 手写 fromJson/toJson |
53
-
54
- ## 基础设施
55
-
56
- | 领域 | 唯一方案 |
57
- |------|---------|
58
- | 容器化 | Docker + Docker Compose |
59
- | 对象存储(开发) | MinIO (S3 协议) |
60
- | 对象存储(生产) | 任何 S3 兼容云服务 |
61
- | 时序数据库(量化金融) | DolphinDB |
@@ -1,145 +0,0 @@
1
- ---
2
- name: dwy-publish
3
- description: "发布版本:测试 → bump → changelog → build → publish → tag。触发条件:用户说'发版'、'发布'、'release'、'bump version' 时。"
4
- ---
5
-
6
- # 发布版本流程
7
-
8
- 通用的发版流程框架,项目特定的包名、路径、命令由 CLAUDE.md 的 `## Release` 段落定义。
9
-
10
- ## 触发条件
11
-
12
- 用户要求发布包时("发版"、"发布"、"release"、"bump version")。
13
-
14
- ## 第 0 步:检查项目 Release 配置
15
-
16
- **在执行任何操作前**,检查当前项目的 CLAUDE.md 是否包含 `## Release` 段落:
17
-
18
- - **有** → 读取其中的包列表、版本文件路径、测试命令、构建命令、发布命令、依赖顺序等配置,按配置执行
19
- - **没有** → **停止发版流程**,提醒用户:
20
-
21
- > 「当前项目 CLAUDE.md 未定义 `## Release` 段落,无法执行发版流程。需要我帮你加吗?」
22
-
23
- 参考格式(提供给用户):
24
-
25
- ```markdown
26
- ## Release
27
-
28
- ### 包列表
29
-
30
- | 包名 | scope | 版本文件 | 测试命令 | 构建命令 | 发布命令 | 验证命令 |
31
- |------|-------|---------|---------|---------|---------|---------|
32
- | @scope/pkg-a | pkg-a | packages/a/package.json | cd packages/a && pnpm vitest run | pnpm build:a | pnpm publish:a | npm view @scope/pkg-a version |
33
-
34
- ### 依赖顺序
35
-
36
- 多包发版时按此顺序执行:pkg-a → pkg-b → pkg-c
37
-
38
- ### Tag 命名
39
-
40
- - 单包:`@scope/pkg-a@1.0.0`
41
- - 仅一个包时可简化为:`v1.0.0`
42
-
43
- ### CHANGELOG
44
-
45
- - 命令:`pnpm changelog`(可选,无则手写)
46
- - 工具:changelogen
47
- ```
48
-
49
- ## 发版前置检查(按项目类型)
50
-
51
- 正式发版前,先按项目类型过对应的前置 skill:
52
-
53
- - **SDK 类项目(对外发布的库 / SDK,不限 PyPI / npm / 私有源)** → 先用 `dwy-sdk-spec` 做发布安全检查(接口注释脱敏、商业版源码保护、发布产物审计),通过后再发版。
54
- - **含 C 扩展 / Cython / .so、需跨平台 wheel** → 用 `dwy-cibuildwheel` 配 GitHub Actions + cibuildwheel 打跨平台 wheel 发 PyPI(此时下方第 4、6 步的 build / publish 由 CI workflow 承担)。
55
- - **版本号该升哪一位拿不准** → 用 `dwy-semver` 决策(见下方第 2 步)。
56
-
57
- ## 发版前确认
58
-
59
- 询问用户:
60
-
61
- 1. **发哪个包?**(从 Release 配置的包列表中选,可多选)
62
- 2. **版本号?** patch / minor / major,或指定具体版本号
63
-
64
- ## 发版流程
65
-
66
- ### 1. 运行测试
67
-
68
- 执行 Release 配置中对应包的测试命令。**测试必须全部通过才能继续。**
69
-
70
- **有失败 → 停止发版,修复后重新开始。**
71
-
72
- ### 2. Bump Version
73
-
74
- **版本级别(major/minor/patch)该怎么定** —— 不确定时用 `dwy-semver` skill 决策,它给出该升哪一位 + 具体新版本号(含 0.x 阶段、预发布、归零规则)。
75
-
76
- 根据 Release 配置中的版本文件路径,直接编辑 version 字段。新版本号用 `dwy-semver` 的 `scripts/bump.py` 算,避免手算归零出错:
77
-
78
- ```bash
79
- python3 <dwy-semver>/scripts/bump.py <当前版本> <major|minor|patch>
80
- # 如 1.2.3 minor -> 1.3.0
81
- ```
82
-
83
- 不使用 `npm version`(避免自动 commit)。Python 项目编辑 `pyproject.toml` 中的 `version` 字段。
84
-
85
- ### 3. 编写 CHANGELOG
86
-
87
- **如果项目有 changelog 自动生成工具**(如 changelogen),执行配置的命令。
88
-
89
- **如果没有**,手动编写 CHANGELOG 条目:
90
-
91
- 1. 查看上个版本 tag 以来的 git log:`git log <last-tag>..HEAD --oneline`
92
- 2. 按变更类型分组(feat / fix / refactor / chore)
93
- 3. 写入项目的 CHANGELOG.md,格式:
94
-
95
- ```markdown
96
- ## x.y.z
97
-
98
- ### Minor Changes / Patch Changes
99
-
100
- - 变更描述 1
101
- - 变更描述 2
102
- ```
103
-
104
- **CHANGELOG 未写不发版。**
105
-
106
- ### 4. Build
107
-
108
- 执行 Release 配置中对应包的构建命令。**构建必须成功才能继续。**
109
-
110
- ### 5. Commit + Tag
111
-
112
- ```bash
113
- # 暂存变更(version + changelog)
114
- git add <changed-files>
115
-
116
- # 提交(遵循 dwy-git-commit)
117
- git commit -m "chore(<scope>): release v<version>"
118
-
119
- # 打 tag(按 Release 配置的命名规则)
120
- git tag <tag-name>
121
-
122
- # 推送
123
- git push origin <branch> --tags
124
- ```
125
-
126
- ### 6. Publish
127
-
128
- 执行 Release 配置中对应包的发布命令。
129
-
130
- ### 7. 发版后验证
131
-
132
- 执行 Release 配置中对应包的验证命令,确认新版本已发布。
133
-
134
- ## 多包同时发版
135
-
136
- 按 Release 配置中定义的依赖顺序,每个包独立走完 测试 → bump → changelog → build → publish,最后统一 commit + tag + push。
137
-
138
- ## 禁止事项
139
-
140
- - **禁止**跳过测试直接发版
141
- - **禁止**跳过 build 直接 publish
142
- - **禁止**忘记打 tag
143
- - **禁止**publish 失败后不回滚 version 变更
144
- - **禁止**在 CHANGELOG 未编写时发版
145
- - **禁止**在无 Release 配置的情况下猜测发版命令