Files
shunt-rules/README.md
T

4.0 KiB
Raw Blame History

gitea-shunt-rules

一个最小可用的规则生成器:

  • 数据源来自 Gitea 仓库
  • 输入按目录分类(默认读取 rule/Surge/<Name>/<Name>.list
  • 输出仅包含你要的两种格式:
    • dist/surge/<Name>.list
    • dist/clash/<Name>.yaml

为什么这个方案适合你

ShuntRules 公开仓库基本只留了发布索引,生成器不在仓库中。这个项目按它的输出思路重建了可控版本,并把数据源切到 Gitea,便于你自己托管。

运行环境

  • Python 3.11+(可直接使用 TOML 配置)
  • Python 3.10 也可用,但建议改用 JSON 配置(config.example.json

快速开始

仓库已内置可直接跑的默认配置文件 config.json(指向 yuanzhen869/ios-rule-script-full 全量源)。

  1. 复制配置:
cd /Users/yuan/Desktop/workspaces/docker/pve/gitea-shunt-rules
cp config.example.toml config.toml
  1. 填写 config.toml
  • gitea.base_url:你的 Gitea 地址,例如 https://git.xxx.com
  • gitea.owner / gitea.repo:规则仓库
  • source.root:源规则根目录,默认 rule/Surge
  1. 设置 token(如果仓库私有):
export GITEA_TOKEN='your-token'

如果数据源仓库是公开的(当前默认就是公开源),可以不设置 token。 默认配置会生成约 600+ 分类(当前为 667 个可直接生成的分类)。

  1. 生成全部分类:
python3 main.py --config config.toml
  1. 只生成部分分类:
python3 main.py --config config.toml --names YouTube,Netflix

如果你是 Python 3.10,可用 JSON 配置:

cp config.example.json config.json
python3 main.py --config config.json --names YouTube,Netflix

目录规范(推荐)

建议你的 Gitea 仓库中按以下结构维护源数据:

rule/Surge/
  YouTube/
    YouTube.list
  Netflix/
    Netflix.list

每个 .list 文件示例:

# 注释会被忽略
DOMAIN-SUFFIX,youtube.com
DOMAIN-KEYWORD,youtube
IP-CIDR,172.110.32.0/21,no-resolve
USER-AGENT,*youtube*

转换规则说明

  • Surge 输出:保留源规则(去重、清理空白)
  • Clash 输出:
    • 自动移除注释/空行
    • USER-AGENTURL-REGEX 默认跳过(并在头部记录 SKIPPED-*
    • IP-CIDR/IP-CIDR6 可通过 clash_no_resolve 控制是否追加 no-resolve

定时更新建议

你可以在 Gitea Actions 或系统 cron 做定时任务:

  1. 拉取源仓库
  2. 执行 python3 main.py --config config.toml
  3. 提交 dist/ 目录到发布仓库或对象存储

Gitea Actions(已内置)

项目已包含工作流文件:

  • /Users/yuan/Desktop/workspaces/docker/pve/gitea-shunt-rules/.gitea/workflows/generate-rules.yml

你只需要做这几步:

  1. 在仓库根目录放好 config.tomlconfig.json
  2. 在 Gitea 仓库 Secrets 中添加 GITEA_TOKEN(私有源仓库建议必须配置)
  3. 推送到 main 后会自动执行;也可在 Actions 页面手动触发

当前定时表达式是 0 3 * * *(UTC),对应北京时间(UTC+8)每天 11:00

发布到独立仓库/分支(已内置)

如果你希望“生成仓库”和“发布仓库”分离,使用:

  • /Users/yuan/Desktop/workspaces/docker/pve/gitea-shunt-rules/.gitea/workflows/publish-rules.yml

这个工作流会:

  1. 从你指定的源仓库读取规则并生成 dist/
  2. dist/ 内容同步到目标仓库的目标分支(可单独设为 rules / gh-pages

需要在 Gitea 仓库中配置:

  • Secrets
    • GITEA_BASE_URL:例如 https://gitea.example.com
    • GITEA_TOKEN:需要有读取源仓库 + 推送目标仓库权限
    • SOURCE_OWNER
    • SOURCE_REPO
    • TARGET_OWNER
    • TARGET_REPO
  • Variables(可选):
    • SOURCE_REF(默认 main
    • SOURCE_ROOT(默认 rule/Surge
    • TARGET_BRANCH(默认 main
    • CLASH_NO_RESOLVE(默认 false

该工作流当前定时为 15 3 * * *UTC),对应北京时间每天 11:15,也支持手动触发。