diff --git a/.gitea/workflows/update-rules.yml b/.gitea/workflows/update-rules.yml index c0e4873..8eafd7c 100644 --- a/.gitea/workflows/update-rules.yml +++ b/.gitea/workflows/update-rules.yml @@ -1,4 +1,4 @@ -name: Download and Publish Clash Rules +name: Update Clash Rules on: schedule: - cron: '0 23 * * *' # 每天北京时间早上7点执行 @@ -7,24 +7,20 @@ on: branches: [ main, master ] jobs: - download-and-publish: + update-rules: runs-on: ubuntu-latest steps: - name: Checkout repository uses: actions/checkout@v4 - with: - token: ${{ secrets.GITHUB_TOKEN }} - - - name: 创建规则目录 + + - name: 创建目录结构 run: | mkdir -p ruleset/txt mkdir -p ruleset/yaml - - name: 下载规则文件 + - name: 下载并转换规则文件 run: | - echo "开始下载规则文件..." - # 定义规则文件列表 rules=( "reject" @@ -44,97 +40,58 @@ jobs: # 下载所有规则文件 for rule in "${rules[@]}"; do - echo "下载 $rule.txt..." + echo "Processing $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 + --fail --silent --show-error - # 生成 YAML 格式(Clash 需要) + # 转换为 yaml 格式 echo "payload:" > "ruleset/yaml/${rule}.yaml" sed 's/^/ - /' "ruleset/txt/${rule}.txt" >> "ruleset/yaml/${rule}.yaml" done - - name: 生成 README(根目录) + - name: 生成 README run: | cat > README.md << 'EOF' - # Clash Rules 规则仓库 + # 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) 规则文件。 - 自动同步 [Loyalsoldier/clash-rules](https://github.com/Loyalsoldier/clash-rules) 规则,每日更新。 + ## 文件说明 - ## 📁 文件结构 + | 规则 | 说明 | TXT | YAML | + |------|------|-----|------| + | reject | 广告拦截 | [链接](./ruleset/txt/reject.txt) | [链接](./ruleset/yaml/reject.yaml) | + | apple | 苹果服务 | [链接](./ruleset/txt/apple.txt) | [链接](./ruleset/yaml/apple.yaml) | + | google | 谷歌服务 | [链接](./ruleset/txt/google.txt) | [链接](./ruleset/yaml/google.yaml) | + | proxy | 代理列表 | [链接](./ruleset/txt/proxy.txt) | [链接](./ruleset/yaml/proxy.yaml) | + | direct | 直连列表 | [链接](./ruleset/txt/direct.txt) | [链接](./ruleset/yaml/direct.yaml) | + | gfw | GFW列表 | [链接](./ruleset/txt/gfw.txt) | [链接](./ruleset/yaml/gfw.yaml) | + | cncidr | 中国IP段 | [链接](./ruleset/txt/cncidr.txt) | [链接](./ruleset/yaml/cncidr.yaml) | + | telegramcidr | Telegram IP | [链接](./ruleset/txt/telegramcidr.txt) | [链接](./ruleset/yaml/telegramcidr.yaml) | - ``` - . - ├── 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 + ```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 @@ -145,215 +102,18 @@ jobs: 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! + 最后更新: $(date +'%Y-%m-%d %H:%M UTC') 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 "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" \ No newline at end of file + git config --local user.email "github-actions[bot]@users.noreply.github.com" + git config --local user.name "github-actions[bot]" + git add . + git diff --cached --quiet || git commit -m "Update rules: $(date +'%Y-%m-%d')" + git push \ No newline at end of file