feat: update release
This commit is contained in:
@@ -17,7 +17,8 @@ description: >-
|
|||||||
## 按需读取参考资料
|
## 按需读取参考资料
|
||||||
|
|
||||||
- 开始任何流程时读取 [project-policy.md](references/project-policy.md),确定策略来源和默认值。
|
- 开始任何流程时读取 [project-policy.md](references/project-policy.md),确定策略来源和默认值。
|
||||||
- 需要选择、更新或核对版本号时读取 [versioning.md](references/versioning.md)。
|
- 需要选择、更新或核对版本号,或生成 tag 更新说明时读取
|
||||||
|
[versioning.md](references/versioning.md)。
|
||||||
- 需要 push、创建或合并 PR/MR、创建 Forge Release 时读取
|
- 需要 push、创建或合并 PR/MR、创建 Forge Release 时读取
|
||||||
[forge-adapters.md](references/forge-adapters.md)。
|
[forge-adapters.md](references/forge-adapters.md)。
|
||||||
- 遇到重复资源、并发冲突、部分成功或清理请求时读取
|
- 遇到重复资源、并发冲突、部分成功或清理请求时读取
|
||||||
@@ -172,16 +173,17 @@ PR/MR 时,停在这里并返回 URL、head/base、当前检查状态和阻塞
|
|||||||
中锁定且重新验证过的远端目标 commit。两者统一记为 release commit。核对目标版本后,
|
中锁定且重新验证过的远端目标 commit。两者统一记为 release commit。核对目标版本后,
|
||||||
再查询一次远端同名 tag。
|
再查询一次远端同名 tag。
|
||||||
|
|
||||||
创建 tag 前,根据上一个稳定 tag 到 release commit 的实际差异生成更新说明;首次发布则
|
创建 tag 前,按 [versioning.md](references/versioning.md) 生成并检查 tag message:根据
|
||||||
使用项目声明的发布基线,没有声明时核对完整可达历史并明确标记首次发布。说明概括实际
|
上一个稳定 tag 到 release commit 的实际差异填写 `Summary`、`Changes`、`Validation`
|
||||||
存在的新增、变更、修复、维护或文档变化;存在破坏性变化、迁移步骤或已知限制时必须明确
|
和 `Base commit`;首次发布则使用项目声明的发布基线,没有声明时核对完整可达历史并明确
|
||||||
列出。每项内容都应能追溯到本次提交、PR/MR 或项目 CHANGELOG。空说明、只重复版本号、
|
标记首次发布。空说明、只重复版本号或提交标题、缺少规定字段、模板占位文字、伪造变更
|
||||||
模板占位文字或无法由实际变化支持的内容都不能发布。
|
或无法由实际变化支持的内容都不能发布。
|
||||||
|
|
||||||
tag 不存在时,使用完整更新说明创建 annotated tag;项目要求签名时,必须先确认签名
|
tag 不存在时,把检查通过的完整 message 写入文件,再用
|
||||||
工具和密钥可用,创建 signed annotated tag,并在本地验证签名成功后才允许 push。使用
|
`git tag -a <tag> <release-commit> -F <release-notes-file>` 创建 annotated tag;项目
|
||||||
文件输入完整的多行说明,显式指定 release commit,并只推送这个 tag。禁止创建 lightweight
|
要求签名时,必须先确认签名工具和密钥可用,创建 signed annotated tag,并在本地验证签名
|
||||||
release tag。签名不可用或验证失败时停止,不得降级为 unsigned tag。
|
成功后才允许 push。显式指定 release commit,并只推送这个 tag。禁止使用简短 `-m` 或
|
||||||
|
创建 lightweight release tag。签名不可用或验证失败时停止,不得降级为 unsigned tag。
|
||||||
|
|
||||||
同名远端 tag 已存在且指向其他 commit 时立即停止。不要覆盖、删除或移动已经发布的
|
同名远端 tag 已存在且指向其他 commit 时立即停止。不要覆盖、删除或移动已经发布的
|
||||||
tag。同名 tag 即使指向 release commit,只要它是 lightweight tag、缺少更新说明或说明与
|
tag。同名 tag 即使指向 release commit,只要它是 lightweight tag、缺少更新说明或说明与
|
||||||
@@ -217,8 +219,8 @@ Forge Release 正文复用 tag 中经过验证的更新说明,不维护第二
|
|||||||
- required checks、review 或冲突状态不满足合并规则。
|
- required checks、review 或冲突状态不满足合并规则。
|
||||||
- 合并结果的准确 commit 无法从平台确认,或无法从远端 base 到达。
|
- 合并结果的准确 commit 无法从平台确认,或无法从远端 base 到达。
|
||||||
- 远端 tag 已指向其他 commit。
|
- 远端 tag 已指向其他 commit。
|
||||||
- 更新说明为空、只有版本号、包含占位内容、无法追溯到实际变化,或远端 tag 不是包含
|
- 更新说明为空、只有版本号或提交标题、缺少规定字段、包含占位内容、无法追溯到实际
|
||||||
计划说明的 annotated tag。
|
变化,或远端 tag 不是包含计划说明的 annotated tag。
|
||||||
- 请求的 PR/MR、合并或 Forge Release 阶段所需的平台 CLI 缺失、未认证或无法读取状态。
|
- 请求的 PR/MR、合并或 Forge Release 阶段所需的平台 CLI 缺失、未认证或无法读取状态。
|
||||||
- 项目要求 tag 签名,但签名能力不可用或本地签名验证失败。
|
- 项目要求 tag 签名,但签名能力不可用或本地签名验证失败。
|
||||||
- 操作需要 force push、管理员绕过、移动已发布 tag 或覆盖用户工作。
|
- 操作需要 force push、管理员绕过、移动已发布 tag 或覆盖用户工作。
|
||||||
|
|||||||
@@ -72,13 +72,38 @@ tag 派生版本,且发布说明不要求写回仓库时,不产生仓库修
|
|||||||
|
|
||||||
以最近一个适用于当前发布线的稳定 tag 为起点,以 release commit 为终点,结合项目
|
以最近一个适用于当前发布线的稳定 tag 为起点,以 release commit 为终点,结合项目
|
||||||
CHANGELOG、已合并 PR/MR 和实际 diff 生成更新说明。首次发布使用项目声明的发布基线;
|
CHANGELOG、已合并 PR/MR 和实际 diff 生成更新说明。首次发布使用项目声明的发布基线;
|
||||||
没有声明时核对完整可达历史,并在说明中明确这是首次发布。说明覆盖实际存在的新增、
|
没有声明时核对完整可达历史,并在说明中明确这是首次发布。
|
||||||
变更、修复、维护或文档变化;破坏性变化、迁移步骤和已知限制存在时必须单独标明。没有
|
|
||||||
某一类别时可以省略该类别,不要生成空标题或模板占位。
|
正式版本的 tag message 使用以下固定格式;内容必须基于本次实际变更,并与 CHANGELOG
|
||||||
|
或 PR/MR 发布说明保持一致:
|
||||||
|
|
||||||
|
```text
|
||||||
|
<tag>
|
||||||
|
|
||||||
|
Summary:
|
||||||
|
- <一句话概括本版本>
|
||||||
|
|
||||||
|
Changes:
|
||||||
|
- <变更 1>
|
||||||
|
- <变更 2>
|
||||||
|
|
||||||
|
Validation:
|
||||||
|
- <验证命令及结果>
|
||||||
|
|
||||||
|
Base commit: <release commit>
|
||||||
|
```
|
||||||
|
|
||||||
|
`Summary`、`Changes`、`Validation` 和 `Base commit` 四个字段必须全部存在,不能只有
|
||||||
|
版本号、提交标题或空 message。没有仓库 CHANGELOG 时,也必须按此格式补齐字段。
|
||||||
|
`Changes` 只写入实际存在的新增、变更、修复、维护或文档变化;破坏性变化、迁移步骤和
|
||||||
|
已知限制存在时必须单独标明。没有实际功能变更时不得伪造条目,应明确说明这是文档、
|
||||||
|
打包或发布元数据修订。不要生成空标题或模板占位。`Validation` 写入本次实际执行或已经
|
||||||
|
确认通过的验证命令及结果,不要编造未执行的检查。`Base commit` 必须是本次 release
|
||||||
|
commit。
|
||||||
|
|
||||||
每条说明都要能追溯到范围内的提交、PR/MR 或项目 CHANGELOG。提交消息和 PR/MR 文本只
|
每条说明都要能追溯到范围内的提交、PR/MR 或项目 CHANGELOG。提交消息和 PR/MR 文本只
|
||||||
作为待核对素材,不能覆盖实际 diff,也不能把范围外变化写入本次说明。tag 创建前冻结
|
作为待核对素材,不能覆盖实际 diff,也不能把范围外变化写入本次说明。创建 tag 前先
|
||||||
完整多行说明;tag 已推送后不再修改。
|
生成并检查完整 message,再冻结;tag 已推送后不再修改。
|
||||||
|
|
||||||
## 验证 release commit
|
## 验证 release commit
|
||||||
|
|
||||||
@@ -90,9 +115,11 @@ commit 为准。获取远端 base 或允许的维护分支后,确认 release c
|
|||||||
正式 tag 必须满足:
|
正式 tag 必须满足:
|
||||||
|
|
||||||
- tag 名按项目格式由目标版本唯一生成。
|
- tag 名按项目格式由目标版本唯一生成。
|
||||||
|
- tag 必须是 annotated tag,message 必须是冻结后的完整更新说明,最少包括
|
||||||
|
`Summary`、`Changes`、`Validation` 和 `Base commit`;不能只有版本号、提交标题或空
|
||||||
|
message。禁止 lightweight release tag。
|
||||||
- 远端没有同名 tag,或同名 tag 已经准确指向本次 commit。
|
- 远端没有同名 tag,或同名 tag 已经准确指向本次 commit。
|
||||||
- annotated tag 显式指向 release commit,并包含冻结后的完整更新说明;禁止 lightweight
|
- annotated tag 显式指向 release commit。
|
||||||
release tag。
|
|
||||||
- 项目要求签名时,push 前已成功创建 signed tag,并在本地验证签名通过;不可用或失败
|
- 项目要求签名时,push 前已成功创建 signed tag,并在本地验证签名通过;不可用或失败
|
||||||
时停止,不得改用 unsigned tag。
|
时停止,不得改用 unsigned tag。
|
||||||
- 推送后从远端重新读取 tag object,核对对象类型和完整说明,再将 annotated tag 解引用
|
- 推送后从远端重新读取 tag object,核对对象类型和完整说明,再将 annotated tag 解引用
|
||||||
|
|||||||
Reference in New Issue
Block a user