139 lines
3.7 KiB
Markdown
139 lines
3.7 KiB
Markdown
# 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`)
|
||
|
||
## 快速开始
|
||
|
||
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'
|
||
```
|
||
|
||
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`,也支持手动触发。
|