# gitea-shunt-rules 一个最小可用的规则生成器: - 数据源来自 **Gitea** 仓库 - 输入按目录分类(默认读取 `rule/Surge//.list`) - 输出仅包含你要的两种格式: - `dist/surge/.list` - `dist/clash/.yaml` - 当前策略:**只使用 Surge 作为上游源,Clash 由 Surge 规则转换生成** ## 为什么这个方案适合你 `ShuntRules` 公开仓库基本只留了发布索引,生成器不在仓库中。这个项目按它的输出思路重建了可控版本,并把数据源切到 Gitea,便于你自己托管。 ## 运行环境 - Python 3.11+(可直接使用 TOML 配置) - Python 3.10 也可用,但建议改用 JSON 配置(`config.example.json`) ## 快速开始 仓库已内置可直接跑的默认配置文件 `config.json`(指向 `yuanzhen869/ios-rule-script-full` 全量源)。 1. 复制配置: ```bash cd /Users/yuan/Desktop/workspaces/docker/pve/gitea-shunt-rules cp config.example.toml config.toml ``` 2. 填写 `config.toml`: - `gitea.base_url`:你的 Gitea 地址,例如 `https://git.xxx.com` - `gitea.owner` / `gitea.repo`:规则仓库 - `source.root`:源规则根目录,默认 `rule/Surge` 3. 设置 token(如果仓库私有): ```bash export GITEA_TOKEN='your-token' ``` 如果数据源仓库是公开的(当前默认就是公开源),可以不设置 token。 默认配置会生成约 600+ 分类(当前为 667 个可直接生成的分类)。 4. 生成全部分类: ```bash python3 main.py --config config.toml ``` 5. 只生成部分分类: ```bash python3 main.py --config config.toml --names YouTube,Netflix ``` 如果你是 Python 3.10,可用 JSON 配置: ```bash cp config.example.json config.json python3 main.py --config config.json --names YouTube,Netflix ``` ## 目录规范(推荐) 建议你的 Gitea 仓库中按以下结构维护源数据: ```text rule/Surge/ YouTube/ YouTube.list Netflix/ Netflix.list ``` 每个 `.list` 文件示例: ```text # 注释会被忽略 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` 做定时任务: 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.toml` 或 `config.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`,也支持手动触发。