Files
shunt-rules/README.md
T

143 lines
3.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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-subset`)。
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。
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`,也支持手动触发。