Files
clash-rules/.gitea/workflows/update-rules.yml
adminroot 7a185866f5
All checks were successful
Download and Publish Clash Rules / download-and-publish (push) Successful in 19s
更新 .gitea/workflows/update-rules.yml
2025-09-12 00:04:01 -07:00

222 lines
8.2 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
- 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/${rule}.txt" \
--fail \
--silent \
--show-error \
--retry 3 \
--retry-delay 5
# 同时生成 YAML 格式Clash 需要)
echo "payload:" > "ruleset/${rule}.yaml"
sed 's/^/ - /' "ruleset/${rule}.txt" >> "ruleset/${rule}.yaml"
done
- name: 生成索引文件
run: |
cat > ruleset/README.md << 'EOF'
# Clash 规则文件
最后更新时间: $(date +'%Y-%m-%d %H:%M:%S UTC')
## 规则文件列表
| 规则名称 | 文本格式 | YAML格式 | 描述 |
|---------|---------|----------|------|
| 广告拦截 | [reject.txt](./reject.txt) | [reject.yaml](./reject.yaml) | 广告和跟踪域名 |
| iCloud | [icloud.txt](./icloud.txt) | [icloud.yaml](./icloud.yaml) | iCloud 域名 |
| 苹果服务 | [apple.txt](./apple.txt) | [apple.yaml](./apple.yaml) | Apple 服务域名 |
| 谷歌服务 | [google.txt](./google.txt) | [google.yaml](./google.yaml) | Google 服务域名 |
| 代理列表 | [proxy.txt](./proxy.txt) | [proxy.yaml](./proxy.yaml) | 需要代理的域名 |
| 直连列表 | [direct.txt](./direct.txt) | [direct.yaml](./direct.yaml) | 直连域名 |
| 私有网络 | [private.txt](./private.txt) | [private.yaml](./private.yaml) | 私有网络域名 |
| GFW列表 | [gfw.txt](./gfw.txt) | [gfw.yaml](./gfw.yaml) | GFW 域名列表 |
| 非中国顶级域名 | [tld-not-cn.txt](./tld-not-cn.txt) | [tld-not-cn.yaml](./tld-not-cn.yaml) | 非中国顶级域名 |
| Telegram CIDR | [telegramcidr.txt](./telegramcidr.txt) | [telegramcidr.yaml](./telegramcidr.yaml) | Telegram IP 段 |
| 中国 CIDR | [cncidr.txt](./cncidr.txt) | [cncidr.yaml](./cncidr.yaml) | 中国 IP 段 |
| 局域网 CIDR | [lancidr.txt](./lancidr.txt) | [lancidr.yaml](./lancidr.yaml) | 局域网 IP 段 |
| 应用规则 | [applications.txt](./applications.txt) | [applications.yaml](./applications.yaml) | 应用程序规则 |
## 使用方法
### 在 Clash 配置中使用(远程规则)
\`\`\`yaml
rule-providers:
reject:
type: http
behavior: domain
url: "https://raw.githubusercontent.com/[你的用户名]/[你的仓库名]/main/ruleset/reject.yaml"
path: ./ruleset/reject.yaml
interval: 86400
\`\`\`
### 在 Clash 配置中使用(本地规则)
1. 下载规则文件到本地 Clash 配置目录
2. 在配置文件中引用:
\`\`\`yaml
rule-providers:
reject:
type: file
behavior: domain
path: ./ruleset/reject.yaml
\`\`\`
## 数据来源
规则文件来源于 [Loyalsoldier/clash-rules](https://github.com/Loyalsoldier/clash-rules)
## 更新频率
每天自动更新一次UTC 23:00 / 北京时间 07:00
EOF
- name: 生成更新日志
run: |
cat > ruleset/UPDATE_LOG.md << EOF
# 更新日志
## $(date +'%Y-%m-%d')
### 文件统计
EOF
echo '```' >> ruleset/UPDATE_LOG.md
ls -lh ruleset/*.txt | awk '{print $9 ": " $5}' >> ruleset/UPDATE_LOG.md
echo '```' >> ruleset/UPDATE_LOG.md
echo "" >> ruleset/UPDATE_LOG.md
echo "### 规则数量统计" >> ruleset/UPDATE_LOG.md
echo '```' >> ruleset/UPDATE_LOG.md
for file in ruleset/*.txt; do
name=$(basename "$file" .txt)
count=$(wc -l < "$file")
echo "$name: $count 条规则" >> ruleset/UPDATE_LOG.md
done
echo '```' >> ruleset/UPDATE_LOG.md
- 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 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' && contains('1', github.run_number)
uses: softprops/action-gh-release@v1
with:
tag_name: v${{ github.run_number }}
name: Clash Rules ${{ github.run_number }}
body: |
## 📦 Clash 规则文件更新
**更新时间**: ${{ env.DATE }}
### 📥 下载链接
您可以通过以下方式获取规则文件:
1. **直接引用**(推荐)
```
https://raw.githubusercontent.com/${{ github.repository }}/main/ruleset/[规则名].yaml
```
2. **下载压缩包**
点击下方的 `clash-rules.zip` 下载所有规则文件
### 📊 本次更新统计
查看 [UPDATE_LOG.md](https://github.com/${{ github.repository }}/blob/main/ruleset/UPDATE_LOG.md)
### 🔗 相关链接
- [规则使用说明](https://github.com/${{ github.repository }}/blob/main/ruleset/README.md)
- [数据来源](https://github.com/Loyalsoldier/clash-rules)
files: |
ruleset/*.txt
ruleset/*.yaml
draft: false
prerelease: false
- name: 创建规则压缩包
if: github.event_name == 'workflow_dispatch'
run: |
cd ruleset
zip -r ../clash-rules.zip *.txt *.yaml README.md UPDATE_LOG.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.zip
retention-days: 7
- name: 输出访问地址
run: |
echo "✅ 规则文件已成功发布!"
echo ""
echo "📁 文件访问地址:"
echo "https://github.com/${{ github.repository }}/tree/main/ruleset"
echo ""
echo "🔗 Raw 文件地址示例:"
echo "https://raw.githubusercontent.com/${{ github.repository }}/main/ruleset/reject.yaml"
echo ""
echo "📦 CDN 加速地址(中国可访问):"
echo "https://cdn.jsdelivr.net/gh/${{ github.repository }}@main/ruleset/reject.yaml"
echo "https://fastly.jsdelivr.net/gh/${{ github.repository }}@main/ruleset/reject.yaml"