4.0 KiB
4.0 KiB
gitea-shunt-rules
一个最小可用的规则生成器:
- 数据源来自 Gitea 仓库
- 输入按目录分类(默认读取
rule/Surge/<Name>/<Name>.list) - 输出仅包含你要的两种格式:
dist/surge/<Name>.listdist/clash/<Name>.yaml
为什么这个方案适合你
ShuntRules 公开仓库基本只留了发布索引,生成器不在仓库中。这个项目按它的输出思路重建了可控版本,并把数据源切到 Gitea,便于你自己托管。
运行环境
- Python 3.11+(可直接使用 TOML 配置)
- Python 3.10 也可用,但建议改用 JSON 配置(
config.example.json)
快速开始
仓库已内置可直接跑的默认配置文件 config.json(指向 yuanzhen869/ios-rule-script-full 全量源)。
- 复制配置:
cd /Users/yuan/Desktop/workspaces/docker/pve/gitea-shunt-rules
cp config.example.toml config.toml
- 填写
config.toml:
gitea.base_url:你的 Gitea 地址,例如https://git.xxx.comgitea.owner/gitea.repo:规则仓库source.root:源规则根目录,默认rule/Surge
- 设置 token(如果仓库私有):
export GITEA_TOKEN='your-token'
如果数据源仓库是公开的(当前默认就是公开源),可以不设置 token。 默认配置会生成约 600+ 分类(当前为 667 个可直接生成的分类)。
- 生成全部分类:
python3 main.py --config config.toml
- 只生成部分分类:
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-AGENT、URL-REGEX默认跳过(并在头部记录SKIPPED-*)IP-CIDR/IP-CIDR6可通过clash_no_resolve控制是否追加no-resolve
定时更新建议
你可以在 Gitea Actions 或系统 cron 做定时任务:
- 拉取源仓库
- 执行
python3 main.py --config config.toml - 提交
dist/目录到发布仓库或对象存储
Gitea Actions(已内置)
项目已包含工作流文件:
/Users/yuan/Desktop/workspaces/docker/pve/gitea-shunt-rules/.gitea/workflows/generate-rules.yml
你只需要做这几步:
- 在仓库根目录放好
config.toml或config.json - 在 Gitea 仓库 Secrets 中添加
GITEA_TOKEN(私有源仓库建议必须配置) - 推送到
main后会自动执行;也可在 Actions 页面手动触发
当前定时表达式是 0 3 * * *(UTC),对应北京时间(UTC+8)每天 11:00。
发布到独立仓库/分支(已内置)
如果你希望“生成仓库”和“发布仓库”分离,使用:
/Users/yuan/Desktop/workspaces/docker/pve/gitea-shunt-rules/.gitea/workflows/publish-rules.yml
这个工作流会:
- 从你指定的源仓库读取规则并生成
dist/ - 把
dist/内容同步到目标仓库的目标分支(可单独设为rules/gh-pages)
需要在 Gitea 仓库中配置:
- Secrets:
GITEA_BASE_URL:例如https://gitea.example.comGITEA_TOKEN:需要有读取源仓库 + 推送目标仓库权限SOURCE_OWNERSOURCE_REPOTARGET_OWNERTARGET_REPO
- Variables(可选):
SOURCE_REF(默认main)SOURCE_ROOT(默认rule/Surge)TARGET_BRANCH(默认main)CLASH_NO_RESOLVE(默认false)
该工作流当前定时为 15 3 * * *(UTC),对应北京时间每天 11:15,也支持手动触发。