Files
clash-rules/.gitea/workflows/update-rules.yml
adminroot 77fcfa4b2d
Some checks failed
Download and Publish Clash Rules / download-and-publish (push) Failing after 8s
更新 .gitea/workflows/update-rules.yml
2025-09-12 00:09:53 -07:00

359 lines
14 KiB
YAML
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.
name: Download and Publish Clash Rules
on:
schedule:
- cron: '0 23 * * *' # 每天北京时间早上7点执行
workflow_dispatch: # 允许手动触发
push:
branches: [ main, master ]
jobs:
download-and-publish:
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v4
with:
token: ${{ secrets.GITHUB_TOKEN }}
- name: 创建规则目录
run: |
mkdir -p ruleset/txt
mkdir -p ruleset/yaml
- name: 下载规则文件
run: |
echo "开始下载规则文件..."
# 定义规则文件列表
rules=(
"reject"
"icloud"
"apple"
"google"
"proxy"
"direct"
"private"
"gfw"
"tld-not-cn"
"telegramcidr"
"cncidr"
"lancidr"
"applications"
)
# 下载所有规则文件
for rule in "${rules[@]}"; do
echo "下载 $rule.txt..."
curl -L "https://cdn.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/${rule}.txt" \
-o "ruleset/txt/${rule}.txt" \
--fail \
--silent \
--show-error \
--retry 3 \
--retry-delay 5
# 生成 YAML 格式Clash 需要)
echo "payload:" > "ruleset/yaml/${rule}.yaml"
sed 's/^/ - /' "ruleset/txt/${rule}.txt" >> "ruleset/yaml/${rule}.yaml"
done
- name: 生成 README根目录
run: |
cat > README.md << 'EOF'
# Clash Rules 规则仓库
[![Update Rules](https://github.com/${{ github.repository }}/actions/workflows/clash-rules.yml/badge.svg)](https://github.com/${{ github.repository }}/actions/workflows/clash-rules.yml)
[![Last Update](https://img.shields.io/badge/Last%20Update-$(date +'%Y--%m--%d')-blue)](https://github.com/${{ github.repository }}/tree/main/ruleset)
自动同步 [Loyalsoldier/clash-rules](https://github.com/Loyalsoldier/clash-rules) 规则,每日更新。
## 📁 文件结构
```
.
├── README.md # 本文档
└── ruleset/
├── txt/ # 原始文本格式规则
│ ├── reject.txt
│ ├── proxy.txt
│ └── ...
└── yaml/ # Clash YAML 格式规则
├── reject.yaml
├── proxy.yaml
└── ...
```
## 📊 规则文件说明
| 规则名称 | 类型 | 描述 | 文本格式 | YAML格式 |
|---------|------|------|---------|----------|
| reject | 域名 | 广告和跟踪域名 | [txt](./ruleset/txt/reject.txt) | [yaml](./ruleset/yaml/reject.yaml) |
| icloud | 域名 | iCloud 域名 | [txt](./ruleset/txt/icloud.txt) | [yaml](./ruleset/yaml/icloud.yaml) |
| apple | 域名 | Apple 服务域名 | [txt](./ruleset/txt/apple.txt) | [yaml](./ruleset/yaml/apple.yaml) |
| google | 域名 | Google 服务域名 | [txt](./ruleset/txt/google.txt) | [yaml](./ruleset/yaml/google.yaml) |
| proxy | 域名 | 需要代理的域名 | [txt](./ruleset/txt/proxy.txt) | [yaml](./ruleset/yaml/proxy.yaml) |
| direct | 域名 | 直连域名 | [txt](./ruleset/txt/direct.txt) | [yaml](./ruleset/yaml/direct.yaml) |
| private | 域名 | 私有网络域名 | [txt](./ruleset/txt/private.txt) | [yaml](./ruleset/yaml/private.yaml) |
| gfw | 域名 | GFW 域名列表 | [txt](./ruleset/txt/gfw.txt) | [yaml](./ruleset/yaml/gfw.yaml) |
| tld-not-cn | 域名 | 非中国顶级域名 | [txt](./ruleset/txt/tld-not-cn.txt) | [yaml](./ruleset/yaml/tld-not-cn.yaml) |
| telegramcidr | IP段 | Telegram IP 段 | [txt](./ruleset/txt/telegramcidr.txt) | [yaml](./ruleset/yaml/telegramcidr.yaml) |
| cncidr | IP段 | 中国 IP 段 | [txt](./ruleset/txt/cncidr.txt) | [yaml](./ruleset/yaml/cncidr.yaml) |
| lancidr | IP段 | 局域网 IP 段 | [txt](./ruleset/txt/lancidr.txt) | [yaml](./ruleset/yaml/lancidr.yaml) |
| applications | 进程 | 应用程序规则 | [txt](./ruleset/txt/applications.txt) | [yaml](./ruleset/yaml/applications.yaml) |
## 🚀 使用方法
### 方式一:远程规则订阅(推荐)
在 Clash 配置文件中添加:
\`\`\`yaml
rule-providers:
# 广告拦截
reject:
type: http
behavior: domain
url: "https://cdn.jsdelivr.net/gh/${{ github.repository }}@main/ruleset/yaml/reject.yaml"
path: ./ruleset/reject.yaml
interval: 86400
# 代理规则
proxy:
type: http
behavior: domain
url: "https://cdn.jsdelivr.net/gh/${{ github.repository }}@main/ruleset/yaml/proxy.yaml"
path: ./ruleset/proxy.yaml
interval: 86400
# 直连规则
direct:
type: http
behavior: domain
url: "https://cdn.jsdelivr.net/gh/${{ github.repository }}@main/ruleset/yaml/direct.yaml"
path: ./ruleset/direct.yaml
interval: 86400
# 中国IP段
cncidr:
type: http
behavior: ipcidr
url: "https://cdn.jsdelivr.net/gh/${{ github.repository }}@main/ruleset/yaml/cncidr.yaml"
path: ./ruleset/cncidr.yaml
interval: 86400
rules:
- RULE-SET,reject,REJECT
- RULE-SET,proxy,PROXY
- RULE-SET,direct,DIRECT
- RULE-SET,cncidr,DIRECT
- GEOIP,CN,DIRECT
- MATCH,PROXY
\`\`\`
### 方式二:本地规则文件
1. 下载所需的规则文件到本地
2. 在 Clash 配置中引用本地文件:
\`\`\`yaml
rule-providers:
reject:
type: file
behavior: domain
path: ./ruleset/reject.yaml
\`\`\`
## 🔗 CDN 加速地址
提供多个 CDN 地址,选择最适合你的:
### jsDelivr推荐国内可访问
\`\`\`
https://cdn.jsdelivr.net/gh/${{ github.repository }}@main/ruleset/yaml/[规则名].yaml
https://fastly.jsdelivr.net/gh/${{ github.repository }}@main/ruleset/yaml/[规则名].yaml
\`\`\`
### GitHub Raw
\`\`\`
https://raw.githubusercontent.com/${{ github.repository }}/main/ruleset/yaml/[规则名].yaml
\`\`\`
### Statically
\`\`\`
https://cdn.statically.io/gh/${{ github.repository }}/main/ruleset/yaml/[规则名].yaml
\`\`\`
## 📈 更新统计
最后更新时间: $(date +'%Y-%m-%d %H:%M:%S UTC')
查看详细更新日志: [UPDATE_LOG.md](./ruleset/UPDATE_LOG.md)
## ⚙️ 自动更新
- **更新频率**: 每日自动更新UTC 23:00 / 北京时间 07:00
- **手动更新**: 可在 [Actions](https://github.com/${{ github.repository }}/actions) 页面手动触发
- **数据来源**: [Loyalsoldier/clash-rules](https://github.com/Loyalsoldier/clash-rules)
## 📝 许可证
本项目规则文件来自上游项目,仅做格式转换和分发。
---
如果这个项目对你有帮助,请给个 ⭐ Star
EOF
- name: 生成更新日志
run: |
cat > ruleset/UPDATE_LOG.md << EOF
# 更新日志
## $(date +'%Y-%m-%d %H:%M:%S UTC')
### 📊 文件大小统计
#### TXT 文件
\`\`\`
$(ls -lh ruleset/txt/*.txt | awk '{print $NF ": " $5}' | sed 's|.*/||')
\`\`\`
#### YAML 文件
\`\`\`
$(ls -lh ruleset/yaml/*.yaml | awk '{print $NF ": " $5}' | sed 's|.*/||')
\`\`\`
### 📈 规则数量统计
\`\`\`
EOF
for file in ruleset/txt/*.txt; do
name=$(basename "$file" .txt)
count=$(wc -l < "$file")
printf "%-20s %6d 条规则\n" "$name:" "$count" >> ruleset/UPDATE_LOG.md
done
echo '```' >> ruleset/UPDATE_LOG.md
echo "" >> ruleset/UPDATE_LOG.md
echo "### 🔄 更新内容" >> ruleset/UPDATE_LOG.md
echo "- 同步上游最新规则" >> ruleset/UPDATE_LOG.md
echo "- 生成 YAML 格式文件" >> ruleset/UPDATE_LOG.md
echo "- 更新文档和统计信息" >> ruleset/UPDATE_LOG.md
- name: 生成规则集 README
run: |
cat > ruleset/README.md << EOF
# Clash 规则文件目录
## 目录结构
- \`txt/\` - 原始文本格式规则文件
- \`yaml/\` - Clash YAML 格式规则文件
## 快速链接
### YAML 格式Clash 直接使用)
- [reject.yaml](./yaml/reject.yaml) - 广告拦截
- [proxy.yaml](./yaml/proxy.yaml) - 代理列表
- [direct.yaml](./yaml/direct.yaml) - 直连列表
- [gfw.yaml](./yaml/gfw.yaml) - GFW 列表
- [cncidr.yaml](./yaml/cncidr.yaml) - 中国 IP 段
### TXT 格式(原始规则)
- [reject.txt](./txt/reject.txt) - 广告拦截
- [proxy.txt](./txt/proxy.txt) - 代理列表
- [direct.txt](./txt/direct.txt) - 直连列表
- [gfw.txt](./txt/gfw.txt) - GFW 列表
- [cncidr.txt](./txt/cncidr.txt) - 中国 IP 段
更多使用说明请查看 [项目主页](https://github.com/${{ github.repository }})
EOF
- name: 配置 Git
run: |
git config --local user.email "github-actions[bot]@users.noreply.github.com"
git config --local user.name "github-actions[bot]"
- name: 提交更改
run: |
git add README.md ruleset/
git diff --cached --quiet || git commit -m "🔄 Update clash rules - $(date +'%Y-%m-%d')"
- name: 推送到仓库
run: |
git push origin main || git push origin master
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: 创建 Release每周日
if: github.event_name == 'schedule' && $(date +%u) == 7
uses: softprops/action-gh-release@v1
with:
tag_name: v$(date +'%Y%m%d')
name: Clash Rules $(date +'%Y-%m-%d')
body: |
## 📦 Clash 规则文件更新
**更新时间**: $(date +'%Y-%m-%d %H:%M:%S UTC')
### 📥 下载方式
#### CDN 加速链接(推荐)
```
https://cdn.jsdelivr.net/gh/${{ github.repository }}@main/ruleset/yaml/[规则名].yaml
```
#### 直接下载
点击下方的 Assets 下载压缩包
### 📊 本次更新统计
查看 [UPDATE_LOG.md](https://github.com/${{ github.repository }}/blob/main/ruleset/UPDATE_LOG.md)
### 🔗 相关链接
- [使用说明](https://github.com/${{ github.repository }}#使用方法)
- [数据来源](https://github.com/Loyalsoldier/clash-rules)
draft: false
prerelease: false
- name: 创建规则压缩包
if: github.event_name == 'workflow_dispatch'
run: |
cd ruleset
zip -r ../clash-rules-txt.zip txt/*.txt
zip -r ../clash-rules-yaml.zip yaml/*.yaml
zip -r ../clash-rules-all.zip txt/ yaml/ *.md
cd ..
- name: 上传压缩包作为 Artifact
if: github.event_name == 'workflow_dispatch'
uses: actions/upload-artifact@v3
with:
name: clash-rules-${{ github.run_number }}
path: |
clash-rules-txt.zip
clash-rules-yaml.zip
clash-rules-all.zip
retention-days: 7
- name: 输出访问信息
run: |
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo "✅ 规则文件已成功发布!"
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo ""
echo "📁 文件结构:"
echo "├── README.md (根目录)"
echo "└── ruleset/"
echo " ├── txt/ (文本格式规则)"
echo " └── yaml/ (YAML格式规则)"
echo ""
echo "🔗 访问地址:"
echo "主页: https://github.com/${{ github.repository }}"
echo ""
echo "📦 CDN 加速示例:"
echo "https://cdn.jsdelivr.net/gh/${{ github.repository }}@main/ruleset/yaml/reject.yaml"
echo "https://cdn.jsdelivr.net/gh/${{ github.repository }}@main/ruleset/txt/reject.txt"
echo ""
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"