@@ -10,15 +10,18 @@ Apache HugeGraph (Incubating) 发布包的自动化验证脚本。
1010
1111- ✅ ** 自动依赖检查** - 验证所有必需工具(svn、gpg、java、maven 等)
1212- ✅ ** SHA512 和 GPG 签名验证** - 确保包的完整性和真实性
13- - ✅ ** 许可证合规性验证** - 检查禁止的 ASF Category X 和 B 类许可证
13+ - ✅ ** 许可证合规性验证** - 检查禁止的 ASF Category X 和需要文档化的 Category B 许可证
14+ - ✅ ** 详细的许可证错误报告** - 对 Category X 违规显示文件路径、许可证名称和上下文
1415- ✅ ** 包内容验证** - 验证必需文件(LICENSE、NOTICE、DISCLAIMER)
15- - ✅ ** ASF 许可证头检查** - 验证所有源文件中的许可证头(Java、Python、Go、Shell 等)
16- - ✅ ** 版本一致性验证** - 确保 pom.xml 版本与预期发布版本匹配
16+ - ✅ ** ASF 许可证头检查** - 验证所有源文件中的许可证头,支持第三方代码文档化
17+ - ✅ ** 版本一致性验证** - 验证 Maven ` <revision> ` 属性与预期发布版本匹配
18+ - ✅ ** 多语言项目支持** - 自动跳过 Python 项目(hugegraph-ai)的 Maven 版本检查
1719- ✅ ** 源码包编译** - 编译源码包以验证构建正确性
1820- ✅ ** 运行时测试** - 测试服务器和工具链(loader、tool、hubble)功能
19- - ✅ ** 进度跟踪** - 显示实时进度和分步指示器
21+ - ✅ ** 智能进度跟踪** - 显示实时进度、步骤指示器和执行时间
22+ - ✅ ** 上下文化错误报告** - 错误和警告包含步骤、包名和索引编号
2023- ✅ ** 详细日志记录** - 将所有输出保存到带时间戳的日志文件
21- - ✅ ** 全面的错误报告 ** - 收集所有错误并在最后显示摘要
24+ - ✅ ** 全面的错误摘要 ** - 收集所有错误并在最后显示格式化摘要
2225
2326## 环境要求
2427
@@ -27,7 +30,7 @@ Apache HugeGraph (Incubating) 发布包的自动化验证脚本。
2730- svn(Subversion 客户端)
2831- gpg(用于签名验证的 GnuPG)
2932- wget 或 curl
30- - 标准 Unix 工具(bash、find、grep、awk 等)
33+ - 标准 Unix 工具(bash、find、grep、awk、perl 等)
3134
3235脚本会自动检查所有依赖项,如果缺少任何内容会提供安装说明。
3336
@@ -78,25 +81,26 @@ Apache HugeGraph (Incubating) 发布包的自动化验证脚本。
7881
7982脚本执行以下 9 个验证步骤:
8083
81- 1 . ** 检查依赖项** - 验证所有必需工具已安装
84+ 1 . ** 检查依赖项** - 验证所有必需工具已安装并显示版本信息
82852 . ** 准备发布文件** - 从 Apache SVN 下载或使用本地目录
83- 3 . ** 导入并信任 GPG 密钥** - 导入 KEYS 文件并信任发布管理员的 GPG 密钥
86+ 3 . ** 导入并信任 GPG 密钥** - 导入 KEYS 文件并信任所有公钥
84874 . ** 验证 SHA512 和 GPG 签名** - 验证所有包的校验和和签名
85885 . ** 验证源码包** - 对源码包进行全面检查:
8689 - 包命名(包含 "incubating")
8790 - 必需文件(LICENSE、NOTICE、DISCLAIMER)
88- - 许可证合规性(无 Category X,已记录 Category B)
91+ - 许可证合规性(禁止 Category X,记录 Category B)
92+ - 详细的许可证违规报告(文件路径、许可证名称、上下文)
8993 - 无空文件或目录
9094 - 文件大小限制(无文件 > 800KB)
91- - 二进制文件文档
92- - 所有源文件中的许可证头
93- - pom.xml 文件之间的版本一致性
95+ - 二进制文件文档化(在 LICENSE 中声明)
96+ - 所有源文件的许可证头(支持第三方代码文档化)
97+ - Maven ` <revision> ` 属性版本一致性(跳过 Python 项目)
9498 - NOTICE 文件版权年份
95- - 源码编译
96- 6 . ** 测试编译的服务器** - 启动并测试编译的 HugeGraph 服务器
99+ - 源码编译测试
100+ 6 . ** 测试编译的服务器** - 初始化并启动编译的 HugeGraph 服务器
971017 . ** 测试编译的工具链** - 从编译包测试 loader、tool 和 hubble
98- 8 . ** 验证二进制包** - 检查二进制包的必需文件和结构
99- 9 . ** 测试二进制包** - 从二进制包测试服务器和工具链
102+ 8 . ** 验证二进制包** - 检查二进制包的必需文件、licenses 目录和许可证合规性
103+ 9 . ** 测试二进制包** - 从二进制包测试服务器和工具链功能
100104
101105## 输出结果
102106
@@ -109,20 +113,21 @@ Apache HugeGraph (Incubating) 发布包的自动化验证脚本。
109113 Apache HugeGraph Release Validation v2.0.0
110114━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
111115
112- 版本: 1.7.0
113- 用户 : pengjunzhi
116+ Version: 1.7.0
117+ User : pengjunzhi
114118 Java: 11
115- 模式 : SVN 下载
116- 日志: logs/validate-1.7.0-20251115-021742.log
119+ Mode : SVN Download
120+ Log: logs/validate-1.7.0-20251115-021742.log
117121
118122━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
119123
120124━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
121- 步骤 [1/9]: 检查依赖项
125+ Step [1/9]: Check Dependencies
122126━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
123127✓ svn: version 1.14.1
124128✓ gpg: gpg (GnuPG) 2.2.41
125129✓ java: 11.0.21
130+ ✓ mvn: Apache Maven 3.9.5
126131...
127132```
128133
@@ -139,42 +144,127 @@ Apache HugeGraph (Incubating) 发布包的自动化验证脚本。
139144
140145### 最终摘要
141146
142- 验证结束时,会显示一个全面的摘要:
147+ 验证结束时,会显示一个全面的摘要,包含执行时间和详细的错误/警告信息 :
143148
144149```
145150━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
146- 验证摘要
151+ VALIDATION SUMMARY
147152━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
148153
149- 总检查数: 127
150- 通过: 125
151- 失败: 2
152- 警告: 3
154+ Execution Time: 6m 34s
155+ Total Checks: 139
156+ Passed: 134
157+ Failed: 3
158+ Warnings: 2
153159
154- ━━━ 错误 ━━━
155- ✗ 包 'xyz' 缺少 LICENSE 文件
156- ✗ 二进制文件 'logo.png' 未在 LICENSE 中记录
160+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ━━━
161+ ERRORS
162+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
157163
158- ━━━ 警告 ━━━
159- ⚠ NOTICE 文件可能不包含当前年份 (2025)
164+ [E1] [Step 8: Validate Binary Packages] [xxxx] contains 1 prohibited ASF Category X license(s):
165+ xxxxx
160166
161167━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
168+ WARNINGS
169+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
170+ xxxx
171+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
172+
173+ VALIDATION FAILED
174+ Log file: logs/validate-1.7.0-20251115-021742.log
175+ ```
162176
163- 验证失败
164- 日志文件: logs/validate-1.7.0-20251115-021742.log
177+ ## 许可证检查说明
178+
179+ ### Category X 许可证(禁止使用)
180+
181+ 脚本会严格检查以下 ASF Category X 许可证,发现后会报错并提供详细信息:
182+
183+ - GPL, LGPL 系列
184+ - Sleepycat License
185+ - BSD-4-Clause
186+ - BCL (Binary Code License)
187+ - JSR-275
188+ - Amazon Software License
189+ - RSAL (Reciprocal Public License)
190+ - QPL (Q Public License)
191+ - SSPL (Server Side Public License)
192+ - CPOL (Code Project Open License)
193+ - NPL1 (Netscape Public License)
194+ - Creative Commons Non-Commercial
195+ - ** JSON.org** (JSON License)
196+
197+ ** 错误报告格式:**
198+ ```
199+ Package 'xxx.tar.gz' contains 1 prohibited ASF Category X license(s):
200+ - File: licenses/LICENSE-json.txt
201+ License: JSON.org
202+ Context: Copyright (c) 2002 JSON.org
165203```
166204
205+ ### Category B 许可证(需要文档化)
206+
207+ 以下许可证会触发警告,提醒检查是否在 LICENSE 文件中正确记录:
208+
209+ - CDDL1, CPL, EPL, IPL, MPL, SPL
210+ - OSL-3.0
211+ - UnRAR License
212+ - Erlang Public License
213+ - OFL (SIL Open Font License)
214+ - Ubuntu Font License Version 1.0
215+ - IPA Font License Agreement v1.0
216+ - EPL2.0
217+ - CC-BY (Creative Commons Attribution)
218+
219+ ** 警告报告格式(简洁):**
220+ ```
221+ Package 'xxx.tar.gz' contains 2 ASF Category B license(s) - please verify documentation
222+ ```
223+
224+ ### 许可证头检查
225+
226+ 脚本会检查所有源代码文件(Java、Shell、Python、Go、JavaScript、TypeScript、C/C++、Scala、Groovy、Rust、Kotlin、Proto 等)是否包含 ASF 许可证头。
227+
228+ ** 第三方代码处理:**
229+ - 如果源文件没有 ASF 许可证头,脚本会检查该文件是否在 LICENSE 文件中被文档化
230+ - 支持通过文件名或相对路径匹配
231+ - 已文档化的第三方代码会被标记为合法并单独统计
232+ - 只有未文档化且缺少 ASF 头的文件才会报错
233+
167234## 错误处理
168235
169236脚本使用** "继续并报告"** 方式:
170237
171238- 不会在第一个错误时退出
172- - 收集所有验证错误
173- - 在最后显示全面摘要
239+ - 收集所有验证错误和警告
240+ - 在最后显示全面摘要,包含:
241+ - 执行总时间
242+ - 检查统计(总数、通过、失败、警告)
243+ - 带编号和上下文的错误列表
244+ - 带编号和上下文的警告列表
174245- 退出码 0 = 所有检查通过
175246- 退出码 1 = 一个或多个检查失败
176247
177- 这允许你一次看到所有问题,而不是逐个修复。
248+ 每个错误和警告都包含:
249+ - 编号索引([ E1] , [ E2] , [ W1] , [ W2] 等)
250+ - 步骤上下文(哪个验证步骤)
251+ - 包名上下文(哪个包)
252+ - 详细的错误描述
253+
254+ 这允许你一次看到所有问题,并能快速定位到具体的失败点。
255+
256+ ## 特殊处理
257+
258+ ### Python 项目(hugegraph-ai)
259+
260+ - 自动跳过编译步骤
261+ - 自动跳过 Maven ` <revision> ` 版本检查
262+ - 仍然执行其他所有验证(许可证、文件结构等)
263+
264+ ### Computer 模块
265+
266+ - 在特殊目录结构下编译(` cd computer && mvn package ` )
267+ - 支持 Java 8 和 Java 11
178268
179269## 故障排除
180270
@@ -189,9 +279,6 @@ java -version
189279# 使用 JAVA_HOME 指定 Java 11
190280export JAVA_HOME=/path/to/java11
191281export PATH=$JAVA_HOME /bin:$PATH
192-
193- # 或使用 jenv 切换 Java 版本
194- jenv global 11
195282```
196283
197284### GPG 密钥问题
@@ -206,6 +293,11 @@ gpg --import KEYS
206293# 信任特定密钥
207294gpg --edit-key < user-email>
208295# 在 GPG 提示符中,输入: trust, 然后 5, 然后 y, 然后 quit
296+
297+ # 或者信任所有导入的密钥
298+ for key in $( gpg --no-tty --list-keys --with-colons | awk -F: ' /^pub/ {print $5}' ) ; do
299+ echo -e " 5\ny\n" | gpg --batch --command-fd 0 --edit-key " $key " trust
300+ done
209301```
210302
211303### 权限被拒绝
@@ -216,10 +308,41 @@ gpg --edit-key <user-email>
216308chmod +x validate-release.sh
217309```
218310
311+ ### 许可证检查误报
312+
313+ 如果合法的第三方代码被标记为缺少许可证头:
314+
315+ 1 . 确保在根目录的 ` LICENSE ` 文件中记录了该文件
316+ 2 . 记录格式可以是文件名或相对路径
317+ 3 . 重新运行验证脚本
318+
319+ 示例 LICENSE 文件条目:
320+ ```
321+ This product bundles ThirdParty.java from XYZ project,
322+ which is available under a "MIT License".
323+ For details, see licenses/LICENSE-mit.txt
324+ ```
325+
326+ ### 查看详细日志
327+
328+ 如果需要更多调试信息:
329+
330+ ``` bash
331+ # 查看完整日志
332+ cat logs/validate-< version> -< timestamp> .log
333+
334+ # 搜索特定错误
335+ grep " ERROR" logs/validate-* .log
336+
337+ # 查看特定步骤
338+ grep " Step \[5/9\]" logs/validate-* .log
339+ ```
340+
219341## 参考文档
220342
221343- [ Apache 发布政策] ( https://www.apache.org/legal/release-policy.html )
222344- [ 孵化器发布检查清单] ( https://cwiki.apache.org/confluence/display/INCUBATOR/Incubator+Release+Checklist )
345+ - [ Apache 许可证分类] ( https://www.apache.org/legal/resolved.html )
223346- [ HugeGraph 验证发布指南] ( ../content/cn/docs/contribution-guidelines/validate-release.md )
224347
225348## 贡献
@@ -228,4 +351,3 @@ chmod +x validate-release.sh
228351
2293521 . 查看现有问题:https://github.com/apache/incubator-hugegraph-doc/issues
2303532 . 提交新问题或 pull request
231-
0 commit comments