Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
22 commits
Select commit Hold shift + click to select a range
2f813fa
添加GitHub集成功能: 支持自动提交mods_data.json到仓库
ZHwash Apr 29, 2026
7cb310f
完善Mod分类功能:添加mod_name支持、Modrinth API集成、三层优先级判断、GitHub Issue报告(移除git co…
ZHwash Apr 30, 2026
fb3b34a
feat: 完善Modrinth API分类逻辑并添加工具脚本
ZHwash Apr 30, 2026
1cb9c9b
调整优先级逻辑:JAR配置优先,添加验证机制,清空reason字段
ZHwash Apr 30, 2026
011115b
完善规则数据库同步和贡献流程,支持更新字段和生成补丁
ZHwash Apr 30, 2026
9cfcc06
清理临时文件和工具脚本,完善README文档,清空reason字段
ZHwash Apr 30, 2026
1c4cf6d
恢复增量补丁系统:生成与自动合并工具
ZHwash Apr 30, 2026
b9361df
feat: 添加增量补丁生成机制和reason字段支持
ZHwash Apr 30, 2026
505661d
Update mod classification rules based on online data and manual adjus…
ZHwash Apr 30, 2026
240b347
Clean up test files and update documentation
ZHwash Apr 30, 2026
1f25b87
Update version to v0.1.6 for release
ZHwash Apr 30, 2026
f61cdce
Build v0.1.6 release for Windows
ZHwash Apr 30, 2026
d43f4bc
Optimize documentation: remove redundant docs and simplify guides
ZHwash Apr 30, 2026
4390d7b
Fix GitHub Actions build configuration and update documentation
ZHwash Apr 30, 2026
af2a8df
Update mod classification rules
ZHwash Apr 30, 2026
460873a
Fix confirmed rule priority and update GitHub Actions build configura…
ZHwash Apr 30, 2026
e82429a
fix: 修复unknown类型mod被保存到配置的漏洞
ZHwash Apr 30, 2026
56dada6
fix: 修复分类逻辑多个漏洞
ZHwash Apr 30, 2026
6933e3d
chore: 清理临时补丁文件
ZHwash Apr 30, 2026
85dfa3c
fix: GitHub Issue报告只包含真正新增的Mod
ZHwash Apr 30, 2026
26b5166
fix: GitHub Issue报告直接读取增量补丁文件
ZHwash Apr 30, 2026
462f661
feat: 批量更新规则配置,添加confirmed标记并统一reason字段
ZHwash Apr 30, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
26 changes: 22 additions & 4 deletions .github/workflows/python-build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -48,18 +48,36 @@ jobs:
run: |
mkdir -p config
echo '[]' > config/mods_data.json
# Copy mod_rules.json if exists
if [ -f "config/mod_rules.json" ]; then
cp config/mod_rules.json config/mod_rules.json.bak
fi
shell: bash

- name: Build executable (Windows)
if: matrix.os == 'windows'
run: |
pyinstaller --clean Minecraft-mod-classifier.spec
pyinstaller --clean --noconfirm `
--name "Minecraft-mod-classifier" `
--onedir `
--console `
--paths src/python `
--add-data "config/mods_data.json;config" `
--add-data "config/mod_rules.json;config" `
src/python/main.py
shell: pwsh

- name: Build executable (Linux)
if: matrix.os == 'linux'
run: |
pyinstaller --clean Minecraft-mod-classifier.spec
pyinstaller --clean --noconfirm \
--name "Minecraft-mod-classifier" \
--onedir \
--console \
--paths src/python \
--add-data "config/mods_data.json:config" \
--add-data "config/mod_rules.json:config" \
src/python/main.py

- name: Prepare release package (Windows)
if: matrix.os == 'windows'
Expand All @@ -69,8 +87,8 @@ jobs:
Copy-Item "README.md" "release\Minecraft-mod-classifier\"
Copy-Item "LICENSE" "release\Minecraft-mod-classifier\"
Copy-Item "docs\QUICKSTART.md" "release\Minecraft-mod-classifier\"
Copy-Item "docs\USAGE.md" "release\Minecraft-mod-classifier\"
Copy-Item "docs\BUILD_GUIDE.md" "release\Minecraft-mod-classifier\"
Copy-Item "GITHUB_INTEGRATION.md" "release\Minecraft-mod-classifier\"
Remove-Item "release\Minecraft-mod-classifier\Input\*" -Recurse -ErrorAction SilentlyContinue
Remove-Item "release\Minecraft-mod-classifier\Output\*" -Recurse -ErrorAction SilentlyContinue
shell: pwsh
Expand All @@ -83,8 +101,8 @@ jobs:
cp README.md release/Minecraft-mod-classifier/
cp LICENSE release/Minecraft-mod-classifier/
cp docs/QUICKSTART.md release/Minecraft-mod-classifier/
cp docs/USAGE.md release/Minecraft-mod-classifier/
cp docs/BUILD_GUIDE.md release/Minecraft-mod-classifier/
cp GITHUB_INTEGRATION.md release/Minecraft-mod-classifier/
rm -rf release/Minecraft-mod-classifier/Input/*
rm -rf release/Minecraft-mod-classifier/Output/*
chmod +x release/Minecraft-mod-classifier/Minecraft-mod-classifier
Expand Down
1 change: 0 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -97,7 +97,6 @@ mod_classifier.log

# 配置文件(包含用户数据,不应版本控制)
config/mods_data.json
config/mods_data.json.backup
config/settings.json

# 输入输出目录(用户数据)
Expand Down
314 changes: 314 additions & 0 deletions GITHUB_INTEGRATION.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,314 @@
# GitHub集成功能使用说明

## 功能概述

Minecraft Mod Classifier 现在支持智能规则更新和自动生成补丁文件,帮助社区共享Mod分类数据。

**主要功能:**
- 🔄 **批量规则更新** - 基于在线数据源批量更新分类规则
- 📊 **差异分级处理** - 自动识别重大差异和轻微差异,分别处理
- 🔒 **智能锁死机制** - 重大差异自动添加确认锁,轻微差异保持可修改
- 📝 **增量补丁生成** - 自动生成规则更新补丁,便于审查和合并

## 使用流程

### 1. 批量规则更新(新增)

基于在线数据源批量更新分类规则:

```bash
# 运行批量更新脚本
python scripts/apply_online_rules.py

# 程序会自动:
# - 比对本地配置与在线数据
# - 识别重大差异(如 client_only vs server_only)
# - 识别轻微差异(四个可选类型之间)
# - 应用在线数据的分类
# - 重大差异添加锁死,轻微差异保持可修改
```

**差异分级:**
- **重大差异**:完全不同的类型 → 自动添加 `confirmed: true` 锁死
- **轻微差异**:四个可选类型之间 → 不锁死,仅更新 reason

### 2. 自动生成补丁

当分类完成并检测到新 Mod 时,程序会自动生成规则更新补丁:

```
[2026-04-30 17:52:23] INFO: 正在生成规则更新补丁...
✓ 成功生成增量补丁: rule_update_patch_20260430_175223.json
新增规则: 0 条
更新规则: 72 条
总计变更: 72 条

📤 如何提交更新:
方法1(推荐 - 使用合并工具):
python src/python/apply_patch.py rule_update_patch_20260430_175223.json

方法2(手动 - 通过GitHub Issue):
1. 打开 GitHub Issues
2. 创建新Issue,标题:规则数据库更新 - 2026-04-30
3. 将此JSON文件内容粘贴到Issue中
4. 维护者会使用工具自动合并
```

### 3. 补丁文件结构

生成的补丁文件包含以下信息:

```json
{
"version": "2.0",
"generated_at": "2026-04-30T17:52:23.xxx",
"description": "Minecraft Mod Classifier 规则数据库增量更新补丁",
"summary": {
"total_changes": 72,
"new_rules": 0,
"updated_rules": 72
},
"new_rules": [],
"updated_rules": [
{
"mod_id": "sodium",
"changes": {
"reason": {
"old": "",
"new": ""
}
}
}
],
"merge_instructions": [...]
}
```

### 4. 工作流程

1. **分类完成** → 保存 mods_data.json(包含 reason 字段)
2. **生成补丁** → 比较 mods_data.json 和 mod_rules.json
3. **检测差异** → 生成增量补丁文件
4. **同步规则** → 将配置更新至 mod_rules.json

**关键点:**
- 补丁在规则同步**之前**生成,确保能检测到所有变更
- mods_data.json 和 mod_rules.json 都包含 reason 字段(默认为空字符串)
- 只有当检测到新 Mod 时才会生成补丁

## 前提条件

### 必须满足的条件

1. **Python 环境**
```bash
python --version # 需要 Python 3.7+
```

2. **配置文件存在**
- `config/mods_data.json` - Mod 配置数据库
- `config/mod_rules.json` - 规则数据库

### 推荐的准备工作

1. **安装依赖**(如需使用 apply_patch.py)
```bash
pip install -r requirements.txt
```

2. **了解 Git 基本操作**(可选,用于提交补丁)

## 手动提交流程

如果需要使用补丁文件,可以手动执行:

```bash
# 1. 查看补丁内容
cat rule_update_patch_20260430_175223.json

# 2. 使用合并工具应用补丁
python src/python/apply_patch.py rule_update_patch_20260430_175223.json

# 3. 检查合并结果
git diff config/mod_rules.json

# 4. 提交更改
git add config/mod_rules.json
git commit -m "Update mod rules from patch"
git push
```

## 常见问题

### Q1: 没有生成补丁文件

**解决方案:**
- 确认是否有新 Mod 被检测到(`auto_detected > 0`)
- 检查 `config/mods_data.json` 是否为空
- 查看日志中是否有“正在生成规则更新补丁...”的信息

### Q2: 补丁显示 0 条变更

**解决方案:**
- 这是正常情况,说明 mods_data.json 和 mod_rules.json 完全一致
- 可能原因:所有 Mod 都已存在于规则数据库中
- 或者 reason 字段已经同步

### Q3: 如何应用补丁

**解决方案:**
```bash
# 使用提供的合并工具
python src/python/apply_patch.py <补丁文件名>

# 或手动合并
# 1. 打开补丁文件,复制 new_rules 和 updated_rules
# 2. 手动添加到 config/mod_rules.json
```

### Q4: 不想每次生成都提示

目前补丁生成是自动进行的(无需用户交互)。如需禁用,可以:

1. 修改 `src/python/mod_classifier.py`,注释掉 `_generate_patch_before_sync()` 调用
2. 或者在 `classify_mods()` 方法中移除相关代码

## 贡献指南

如果你希望为社区贡献规则更新:

1. **运行分类程序**
- 将新的 Mod 放入 Input 目录
- 运行程序进行分类

2. **获取补丁文件**
- 程序会自动生成 `rule_update_patch_*.json`
- 检查补丁内容是否正确

3. **提交到 GitHub**
- 方式1:使用 `apply_patch.py` 合并后提交 PR
- 方式2:将补丁文件内容粘贴到 GitHub Issue

4. **等待审核**
- 维护者会审核补丁内容
- 合并到主分支

## 技术实现

### 核心模块

- `src/python/generate_patch.py` - 补丁生成器
- `src/python/apply_patch.py` - 补丁合并工具
- `src/python/config_manager.py` - 配置管理器(含 reason 字段)
- `src/python/mod_classifier.py` - 分类器(在同步前生成补丁)

### 关键方法

```python
# generate_patch.py
def generate_incremental_patch(
source_config: str = "config/mods_data.json",
target_rules: str = "config/mod_rules.json",
output_patch: str = None
) -> str:
"""生成增量补丁文件"""
# 比较两个文件,找出差异
# 返回补丁文件路径

# mod_classifier.py
def _generate_patch_before_sync(self):
"""在同步规则之前生成增量补丁"""
# 此时 mods_data.json 已更新,但 mod_rules.json 还未同步
# 可以正确检测到所有变更
```

### 数据结构

**mods_data.json:**
```json
[
{
"mod_id": "sodium",
"mod_name": "Sodium",
"type": "client_only",
"reason": "" // 新增字段,默认为空字符串
}
]
```

**mod_rules.json:**
```json
{
"rules": [
{
"mod_id": "sodium",
"mod_name": "Sodium",
"type": "client_only",
"reason": "" // 已清理为空字符串
}
]
}
```

## 注意事项

⚠️ **重要提醒:**

1. **数据一致性**: reason 字段在所有配置中都应存在(即使为空),确保比较时不会遗漏
2. **补丁时机**: 补丁必须在规则同步之前生成,否则无法检测到变更
3. **数据质量**: 请确保分类准确后再提交补丁,避免污染社区数据
4. **频率限制**: 不要频繁生成大量补丁,建议批量处理后一次性提交
5. **备份重要**: 在应用补丁前,建议备份 `config/mod_rules.json`

## 示例输出

### 成功生成补丁

```
[2026-04-30 17:52:23] INFO: 正在生成规则更新补丁...

✓ 成功生成增量补丁: rule_update_patch_20260430_175223.json
新增规则: 0 条
更新规则: 72 条
总计变更: 72 条

📤 如何提交更新:
方法1(推荐 - 使用合并工具):
python src/python/apply_patch.py rule_update_patch_20260430_175223.json

方法2(手动 - 通过GitHub Issue):
1. 打开 GitHub Issues
2. 创建新Issue,标题:规则数据库更新 - 2026-04-30
3. 将此JSON文件内容粘贴到Issue中
4. 维护者会使用工具自动合并
[2026-04-30 17:52:23] INFO: ✓ 增量补丁文件已生成: rule_update_patch_20260430_175223.json
```

### 无需生成补丁

```
[2026-04-30 17:44:45] INFO: 规则数据库已是最新,无需生成补丁
```

### 应用补丁

```
$ python src/python/apply_patch.py rule_update_patch_20260430_175223.json
正在加载补丁文件: rule_update_patch_20260430_175223.json
✓ 补丁文件加载成功
新增规则: 0 条
更新规则: 72 条
正在合并补丁...
✓ 成功合并 72 条规则更新
✓ 规则数据库已更新
```

---

**版本**: v0.1.6
**最后更新**: 2026-04-30
**主要变更**:
- 改为自动生成补丁(无需用户交互)
- 在规则同步之前生成补丁
- 添加 reason 字段到所有配置
- 清理 mod_rules.json 中的 reason 内容为空字符串
Loading
Loading