Skip to content
This repository was archived by the owner on Dec 28, 2025. It is now read-only.

Commit af87f8a

Browse files
committed
fix: add JSON to CATEGORY_X license validation
The JSON license was added to the CATEGORY_X regex in the binary package validation step to ensure packages with this license are properly flagged during release validation.
1 parent ba74766 commit af87f8a

File tree

2 files changed

+164
-42
lines changed

2 files changed

+164
-42
lines changed

.github/workflows/validate-release.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -244,7 +244,7 @@ jobs:
244244
- name: 7. Validate Binary Packages
245245
run: |
246246
cd dist/${{ inputs.release_version }} || exit
247-
CATEGORY_X="\bGPL|\bLGPL|Sleepycat License|BSD-4-Clause|\bBCL\b|JSR-275|Amazon Software License|\bRSAL\b|\bQPL\b|\bSSPL|\bCPOL|\bNPL1|Creative Commons Non-Commercial"
247+
CATEGORY_X="\bGPL|\bLGPL|Sleepycat License|BSD-4-Clause|\bBCL\b|JSR-275|Amazon Software License|\bRSAL\b|\bQPL\b|\bSSPL|\bCPOL|\bNPL1|Creative Commons Non-Commercial|JSON"
248248
for i in *.tar.gz; do
249249
if [[ "$i" == *-src.tar.gz ]]; then
250250
# skip source packages

dist/README.md

Lines changed: 163 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -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. **检查依赖项** - 验证所有必需工具已安装并显示版本信息
8285
2. **准备发布文件** - 从 Apache SVN 下载或使用本地目录
83-
3. **导入并信任 GPG 密钥** - 导入 KEYS 文件并信任发布管理员的 GPG 密钥
86+
3. **导入并信任 GPG 密钥** - 导入 KEYS 文件并信任所有公钥
8487
4. **验证 SHA512 和 GPG 签名** - 验证所有包的校验和和签名
8588
5. **验证源码包** - 对源码包进行全面检查:
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 服务器
97101
7. **测试编译的工具链** - 从编译包测试 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
190280
export JAVA_HOME=/path/to/java11
191281
export 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
# 信任特定密钥
207294
gpg --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>
216308
chmod +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

229352
1. 查看现有问题:https://github.com/apache/incubator-hugegraph-doc/issues
230353
2. 提交新问题或 pull request
231-

0 commit comments

Comments
 (0)