Files
shunt-rules/README.md
T

3.4 KiB
Raw Blame History

shunt-rules

基于 Surge 单源 的规则生成器,统一输出 Surge / Loon / Clash / Mihomo 四种格式。

目标

  • 上游仅使用 ios_rule_scriptrule/Surge
  • 本地先合并与去重,再做多端格式转换
  • 输出规则可直接用于常见代理客户端

目录结构

shunt-rules/
├── src/
│   └── rulegen.py                  # 主程序入口
├── tools/
│   └── sync_surge_full.sh          # 同步上游 Surge 源到本地缓存
├── configs/
│   ├── config.json                 # 默认配置(本地缓存模式)
│   └── examples/
│       ├── config.example.json
│       └── config.example.toml
├── data/
│   └── upstream/                   # 本地上游缓存(自动生成,默认忽略)
├── dist/
│   ├── surge/
│   ├── loon/
│   ├── clash/
│   └── mihomo/
└── .gitea/workflows/
    ├── repo-manage-daily.yml
    └── generate-rules.yml

运行环境

  • Python 3.11+(推荐,支持 TOML 配置)
  • Python 3.10(可用 JSON 配置)

快速开始

在仓库根目录执行:

  1. 同步上游 Surge 源到本地缓存
bash tools/sync_surge_full.sh
  1. 生成全部分类规则
python3 src/rulegen.py --config configs/config.json
  1. 只生成指定分类
python3 src/rulegen.py --config configs/config.json --names Apple,YouTube

输出路径

  • dist/surge/<Name>.list
  • dist/loon/<Name>.list
  • dist/clash/<Name>.yaml
  • dist/mihomo/<Name>.yaml

快捷方式

  • 规则分类索引(参考上游 rule/Surge/README.md):dist/README.md
  • Surge 目录:dist/surge/
  • Loon 目录:dist/loon/
  • Clash 目录:dist/clash/
  • Mihomo 目录:dist/mihomo/

配置说明

默认配置:configs/config.json

source 关键字段:

  • mode:数据源模式,支持 local(本地缓存,推荐)和 gitea(通过 Gitea API
  • local_root:本地缓存根目录(默认 data/upstream
  • root:规则目录(默认 rule/Surge
  • filename_pattern:分类主文件模板(默认 {name}.list
  • include_categories:仅生成白名单分类
  • exclude_categories:排除分类

output 关键字段:

  • dir:输出目录(默认 dist
  • clash_no_resolveClash 的 IP-CIDR/IP-CIDR6 是否追加 no-resolve
  • mihomo_no_resolveMihomo 的 IP-CIDR/IP-CIDR6 是否追加 no-resolve

本地合并规则

每个分类优先按以下顺序合并去重:

  1. <Name>.list
  2. <Name>_Domain.list
  3. <Name>_Resolve.list

若上述文件不存在,会自动回退到:

  1. <Name>_All.list
  2. <Name>_Domain.list
  3. <Name>_Resolve.list
  4. <Name>.list

另外,*_Domain.list 中的裸域名会自动规范化为 DOMAIN-SUFFIX,<domain>

多端转换策略

  • surge:保留合并后的 Surge 规则
  • loon:与 Surge 规则兼容输出
  • clashYAML provider 输出(跳过 USER-AGENTURL-REGEX,并将 DEST-PORT 转为 DST-PORT
  • mihomoYAML provider 输出,转换策略与 Clash 一致

自动化工作流

repo-manage-daily.yml

  • 每天自动执行(UTC 5 2 * * *)或手动触发
  • 执行同步、生成规则、自动提交推送

generate-rules.yml

  • 手动触发
  • 执行同步与生成,不自动发布

可选变量:

  • vars.UPSTREAM_REF(默认 master