feat: initial gitea shunt rules generator
This commit is contained in:
@@ -0,0 +1,138 @@
|
||||
# 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`,也支持手动触发。
|
||||
Reference in New Issue
Block a user