|
| 1 | +[English](A1-bug-fix-tracing.md) | 中文 |
| 2 | + |
| 3 | +# 标题 |
| 4 | + |
| 5 | +* 作者:liucf3995 |
| 6 | +* 批准者: |
| 7 | +* 状态:草案 |
| 8 | +* 已实现的语言: |
| 9 | +* 上次更新时间:2023-10-26 |
| 10 | +* 讨论链接: |
| 11 | + |
| 12 | +## 目录 |
| 13 | + |
| 14 | +* [概要](#概要) |
| 15 | +* [背景](#背景) |
| 16 | + * [相关提案](#相关提案) |
| 17 | +* [设计细节](#设计细节) |
| 18 | +* [实现细节](#实现细节) |
| 19 | +* [业界实现](#业界实现) |
| 20 | +* [其他问题](#其他问题) |
| 21 | + |
| 22 | +## 概要 |
| 23 | + |
| 24 | +在 tRPC 代码仓库版本发布时,为 Bug 修复情况提供跟踪策略。 |
| 25 | + |
| 26 | +## 背景 |
| 27 | + |
| 28 | +tRPC 当前的 ChangeLog 会提示每个版本新增的 Features 以及修复的 Bugs,但是未提供 Bug 跟踪信息。 |
| 29 | +即,用户在选择 tRPC 版本时,可以得知所选版本已经解决了哪些 Bugs,但是无法得知还有哪些 Bugs 未解决。 |
| 30 | + |
| 31 | +目标:定义框架发布版本时 ChangeLog 中 BugFix 的规范格式,然后通过自动化的工具提取数据后,用户可以在 tRPC 官网上通过选择 tRPC |
| 32 | +的某个具体版本后,除了看到这个版本修复了哪些 Bugs,还可以看到这个版本存在哪些 Bugs。 |
| 33 | + |
| 34 | +例如:选择 `trpc-cpp/v1.4.2`,页面提示如下内容: |
| 35 | + |
| 36 | + ```text |
| 37 | + 已修复 Bugs: |
| 38 | + Bug-01(#PR): Bug 描述。从 v1.1.0 引入,在 v1.4.2 修复。 |
| 39 | + Bug-02(#PR): Bug 描述。从 v1.1.1 引入,在 v1.4.2 修复。 |
| 40 | + ... |
| 41 | + |
| 42 | + 未修复 Bugs: |
| 43 | + Bug-01(#PR): Bug 描述。从 v1.1.0 引入。 |
| 44 | + Bug-02(#PR): Bug 描述,从 v2.1.0 发现,引入版本号未知。 |
| 45 | + ... |
| 46 | + ``` |
| 47 | + |
| 48 | +在报告 Bug 时,如果知道引入 Bug 的准确版本号,则提示 Bug 引入版本号。如果无法得知 Bug 引入的准确版本号,则标记 “Bug |
| 49 | +发现版本号,引入版本号未知”。 |
| 50 | + |
| 51 | +### 相关提案 |
| 52 | + |
| 53 | +暂无其他相关提案。 |
| 54 | + |
| 55 | +## 设计细节 |
| 56 | + |
| 57 | +主要借助 Issue 和 ChangeLog 两部分信息记录 Bug 修复信息。 |
| 58 | + |
| 59 | +* 所有的 Bug 信息通过 Issue 来跟踪,通过 Issue 关闭和打开的状态区分未修复 Bug 清单(未关闭的 Bug Issue)。 |
| 60 | +* ChangeLog 记录 Bug 引入版本号、修复版本号(一般是当前版本号)、关联的 #PR。同时,PR 中也记录已被修复 Bug 的 #Issue 和引入版本号。 |
| 61 | + |
| 62 | +## 实现细节 |
| 63 | + |
| 64 | +### 如何跟踪 Bug 信息 |
| 65 | + |
| 66 | +所有的 Bugs 均通过 Issues 来跟踪。 |
| 67 | + |
| 68 | +* 开发者在修复 Bug 时,及时关闭对应的 Issue。 |
| 69 | +* 管理员在发布版本时,在 ChangeLog 准确记录被修复的 Bugs 信息。 |
| 70 | + |
| 71 | +推荐(可选):提交 Issue 时,Issue 正文包含 Bug 引入版本号或者发现版本号。 |
| 72 | + |
| 73 | +### 如何确认 Bug 引入版本号和修复版本号 |
| 74 | + |
| 75 | +用户在报告 Bug 时,一般会提供自己所使用的版本号,但这个版本号可能并非 Bug 最早引入的版本号。所以,单从 Issue 信息可能无法得知 |
| 76 | +Bug 引入时机。可将 Issue 报告的版本号作为默认的版本号,等后续修复时,可以更新 Bug 引入的具体版本号。 |
| 77 | + |
| 78 | +Bug 修复版本号由 ChangeLog 发版记录标识。 |
| 79 | + |
| 80 | +### 如何编辑 ChangeLog#BugFix 条目 |
| 81 | + |
| 82 | +已修复 Bug 基本格式:Bug 影响范围 + Bug描述 + (!#PR) + (Bug 引入版本范围)。 |
| 83 | + |
| 84 | +Bug 引入版本范围: |
| 85 | + |
| 86 | +* v1.2.0:由 v1.2.0 引入。 |
| 87 | +* v1.2.0~v1.4.0:v1.2.0 ~ v1.4.0 某个版本引入,具体版本号未知。 |
| 88 | +* v1.1.0~:1.1.0 ~ 修复版本之间的某个版本引入,具体版本号未知。 |
| 89 | +* ~v2.2.0:起始版本 ~ v1.2.0 之间某个版本引入,具体版本号未知。 |
| 90 | + |
| 91 | +```markdown |
| 92 | +... |
| 93 | + |
| 94 | +## [$current_version](url)($release_date) |
| 95 | + |
| 96 | +... |
| 97 | + |
| 98 | +### Bug Fixes |
| 99 | +- **$scope:** $prompt (!#PR) ($version) |
| 100 | +- **$scope:** $prompt (!#PR) ($version_begin~$version_end) |
| 101 | +- **$scope:** $prompt (!#PR) (~$version_end) |
| 102 | +- **$scope:** $prompt (!#PR) ($version_begin~) |
| 103 | + |
| 104 | +... |
| 105 | +``` |
| 106 | + |
| 107 | +### 如何计算 Bugs 修复结果 |
| 108 | + |
| 109 | +解析 ChangeLog#BugFixes 记录,得到如下数据: |
| 110 | +* 已修复 Bug 的引入版本号范围、修复版本号、#PR 。 |
| 111 | + |
| 112 | +计算某个具体版本下 Bugs 修复情况。 |
| 113 | +* 当前版本已修复 Bugs:过滤 Bug 修复版本号为当前版本号的已修复 Bugs。 |
| 114 | +* 当前版本未修复 Bugs:从已修复的所有 Bugs 中过滤,条件:当前版本号在 Bug 引入版本号(或者发现版本号)范围内。 |
| 115 | + |
| 116 | + |
| 117 | +### 举例说明 |
| 118 | + |
| 119 | +管理员依据 Bug Issue + PR 列表记录 ChangeLog。 |
| 120 | + |
| 121 | +* Bug Issue 列表(Closed): |
| 122 | + |
| 123 | + ```text |
| 124 | + [#1] xx |
| 125 | + |
| 126 | + version: v1.1.0 |
| 127 | + |
| 128 | + /////////////////////////////////////// |
| 129 | + |
| 130 | + [#2] yy |
| 131 | + |
| 132 | + version: v1.2.0 |
| 133 | + |
| 134 | + /////////////////////////////////////// |
| 135 | + |
| 136 | + [#3] zz |
| 137 | + |
| 138 | + version: v1.3.0 |
| 139 | + ``` |
| 140 | + |
| 141 | +* Bug Issue 列表(Open): |
| 142 | + |
| 143 | + ```text |
| 144 | + [#4] xx |
| 145 | + |
| 146 | + version: v1.1.1 |
| 147 | + |
| 148 | + /////////////////////////////////////// |
| 149 | + |
| 150 | + [#5] yy |
| 151 | + |
| 152 | + version: v1.2.1 |
| 153 | + |
| 154 | + /////////////////////////////////////// |
| 155 | + |
| 156 | + [#6] zz |
| 157 | + |
| 158 | + version: v1.3.1 |
| 159 | + ``` |
| 160 | + |
| 161 | +* PR 列表(Merged): |
| 162 | + |
| 163 | + ```text |
| 164 | + [#7] xx |
| 165 | + |
| 166 | + close #1 |
| 167 | + |
| 168 | + /////////////////////////////////////// |
| 169 | + |
| 170 | + [#8] yy |
| 171 | + |
| 172 | + close #2 |
| 173 | + |
| 174 | + /////////////////////////////////////// |
| 175 | + |
| 176 | + [#9] zz |
| 177 | + |
| 178 | + close #3 |
| 179 | + ``` |
| 180 | + |
| 181 | +* ChangeLog: |
| 182 | + |
| 183 | + ```markdown |
| 184 | + |
| 185 | + ## [v1.3.1](https://github.com/xx/yy)(2023-10-19) |
| 186 | + ... |
| 187 | + ### Bug Fixes |
| 188 | + - **stream:** yy (!8) (v1.2.0) |
| 189 | + - **client:** zz (!9) (v1.3.0) |
| 190 | + |
| 191 | + ... |
| 192 | + |
| 193 | + ## [v1.2.1](https://github.com/xx/yy)(2023-09-19) |
| 194 | + ... |
| 195 | + ### Bug Fixes |
| 196 | + - **transport:** yy (!7) (1.2.0) |
| 197 | + |
| 198 | + ... |
| 199 | + ``` |
| 200 | + |
| 201 | +选择某个具体版本后,提示已修复 Bugs 信息和未修复 Bugs 信息。 |
| 202 | + |
| 203 | +提示:Issue 列表中还未被修复的 Bugs 不会展示出来。 |
| 204 | + |
| 205 | +* 选择 v1.3.1 时,提示: |
| 206 | + |
| 207 | + ```text |
| 208 | + 已修复 Bugs: |
| 209 | + Bug-02(#8): yy。从 v1.2.0 引入,在 v1.3.1 修复。 |
| 210 | + Bug-03(#9): zz。从 v1.3.0 引入, 在 v1.3.1 修复。 |
| 211 | + |
| 212 | + ``` |
| 213 | + |
| 214 | +* 选择 v1.2.1 时,提示: |
| 215 | + |
| 216 | + ```text |
| 217 | + 已修复 Bugs: |
| 218 | + Bug-01(#7): xx。从 v1.1.0 发现,在 v1.2.1 修复。 |
| 219 | + |
| 220 | + 未修复 Bugs: |
| 221 | + Bug-02(#8): yy。从 v1.2.0 引入,在 v1.3.1 修复。 |
| 222 | + ``` |
| 223 | + |
| 224 | +## 业界实现 |
| 225 | + |
| 226 | +暂无 |
| 227 | + |
| 228 | +## 其他问题 |
| 229 | + |
| 230 | +可以跟踪 Bug 从某个一个版本引入,另外一个版本修复时的情况。无法跟踪一个 Bug 从多个版本引入和修复信息。 |
| 231 | +比如,Bug-A 从 v1.1.0 引入,然后在 v1.1.3 修复。后来相同的 Bug 又在 v1.2.0 引入,在 v1.2.1 修复。 |
| 232 | +这种情况下需要创建两个 Bug 来标识。 |
| 233 | + |
| 234 | +页面展示的 Bugs 信息中只包含已修复的 Bugs,Issue 列表中当前还未被修复的 Bugs 不会展示出来。 |
| 235 | + |
| 236 | +对历史已经存在 ChangeLog 和 Issue 记录可能无法解析,需要解析工具做兼容。 |
0 commit comments