From 7a185866f5d9cfeb3121038ced30c2d98024c90b Mon Sep 17 00:00:00 2001 From: adminroot Date: Fri, 12 Sep 2025 00:04:01 -0700 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0=20.gitea/workflows/update-ru?= =?UTF-8?q?les.yml?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitea/workflows/update-rules.yml | 231 ++++++++++++++++++++++++++---- 1 file changed, 202 insertions(+), 29 deletions(-) diff --git a/.gitea/workflows/update-rules.yml b/.gitea/workflows/update-rules.yml index beef2ea..69294e4 100644 --- a/.gitea/workflows/update-rules.yml +++ b/.gitea/workflows/update-rules.yml @@ -1,49 +1,222 @@ -name: Download Clash Rules +name: Download and Publish Clash Rules on: schedule: - - cron: '0 23 * * *' - workflow_dispatch: + - cron: '0 23 * * *' # 每天北京时间早上7点执行 + workflow_dispatch: # 允许手动触发 push: branches: [ main, master ] jobs: - download-rules: + 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" + ) + # 下载所有规则文件 - curl -L "https://cdn.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/reject.txt" -o "ruleset/reject.txt" - curl -L "https://cdn.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/icloud.txt" -o "ruleset/icloud.txt" - curl -L "https://cdn.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/apple.txt" -o "ruleset/apple.txt" - curl -L "https://cdn.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/google.txt" -o "ruleset/google.txt" - curl -L "https://cdn.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/proxy.txt" -o "ruleset/proxy.txt" - curl -L "https://cdn.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/direct.txt" -o "ruleset/direct.txt" - curl -L "https://cdn.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/private.txt" -o "ruleset/private.txt" - curl -L "https://cdn.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/gfw.txt" -o "ruleset/gfw.txt" - curl -L "https://cdn.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/tld-not-cn.txt" -o "ruleset/tld-not-cn.txt" - curl -L "https://cdn.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/telegramcidr.txt" -o "ruleset/telegramcidr.txt" - curl -L "https://cdn.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/cncidr.txt" -o "ruleset/cncidr.txt" - curl -L "https://cdn.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/lancidr.txt" -o "ruleset/lancidr.txt" - curl -L "https://cdn.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/applications.txt" -o "ruleset/applications.txt" + 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: 检查下载结果 + - name: 生成索引文件 run: | - echo "=== 下载完成,文件列表 ===" - ls -la ruleset/ - echo "=== 文件大小统计 ===" - du -h ruleset/* + cat > ruleset/README.md << 'EOF' + # Clash 规则文件 - - name: 设置日期环境变量 - run: echo "DATE=$(date +'%Y%m%d')" >> $GITHUB_ENV - - - name: 上传规则文件 + 最后更新时间: $(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-${{ env.DATE }} - path: ruleset/ - retention-days: 30 \ No newline at end of file + 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" \ No newline at end of file