From 920b47510979b592352467641d7206899da8ba69 Mon Sep 17 00:00:00 2001 From: adminroot Date: Thu, 11 Sep 2025 22:40:30 -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 | 469 ++++++------------------------ 1 file changed, 92 insertions(+), 377 deletions(-) diff --git a/.gitea/workflows/update-rules.yml b/.gitea/workflows/update-rules.yml index 15fc313..fe5e999 100644 --- a/.gitea/workflows/update-rules.yml +++ b/.gitea/workflows/update-rules.yml @@ -1,384 +1,99 @@ -name: Auto Update Clash Rules +name: Test Act Runner + +# 触发条件 on: - workflow_dispatch: # 手动触发 - schedule: - - cron: "0 2 * * *" # 每天凌晨2点执行 push: - branches: - - main - paths: - - '.gitea/workflows/**' + branches: [ main, master ] + pull_request: + branches: [ main, master ] + # 支持手动触发 + workflow_dispatch: jobs: - update-rules: + test-basic: + name: 基础功能测试 runs-on: ubuntu-latest + steps: - - name: Checkout repository - uses: actions/checkout@v4 + # 1. 检出代码 + - name: 检出代码 + uses: actions/checkout@v3 + + # 2. 系统信息 + - name: 显示系统信息 + run: | + echo "=== 系统信息 ===" + uname -a + echo "=== 工作目录 ===" + pwd + ls -la + echo "=== 环境变量 ===" + env | sort + + # 3. 测试基本命令 + - name: 测试基本命令 + run: | + echo "Hello from Gitea Act Runner!" + date + whoami + + # 4. 创建测试文件 + - name: 创建测试文件 + run: | + echo "Act Runner 测试成功!" > test-file.txt + echo "当前时间: $(date)" >> test-file.txt + cat test-file.txt + + # 5. 测试多行脚本 + - name: 多行脚本测试 + run: | + for i in {1..5}; do + echo "第 $i 次循环" + done + + test-matrix: + name: 矩阵构建测试 + runs-on: ubuntu-latest + strategy: + matrix: + version: ['1.0', '2.0', '3.0'] + + steps: + - name: 矩阵测试 - 版本 ${{ matrix.version }} + run: | + echo "正在测试版本: ${{ matrix.version }}" + echo "构建完成" + + test-conditions: + name: 条件执行测试 + runs-on: ubuntu-latest + + steps: + - name: 检出代码 + uses: actions/checkout@v3 + + - name: 条件执行 - 总是执行 + if: always() + run: echo "这个步骤总是会执行" + + - name: 条件执行 - 成功时执行 + if: success() + run: echo "前面的步骤都成功了" + + test-artifacts: + name: 文件传输测试 + runs-on: ubuntu-latest + + steps: + - name: 创建测试文件 + run: | + mkdir -p test-output + echo "测试内容" > test-output/result.txt + echo "构建时间: $(date)" > test-output/build-info.txt + + - name: 上传构建产物 + uses: actions/upload-artifact@v3 with: - # 对于 Gitea,可能需要使用不同的 token 配置 - token: ${{ secrets.GITEA_TOKEN || github.token }} - fetch-depth: 0 # 获取完整历史,有助于避免一些同步问题 - - - name: Set environment variables - run: | - echo "RELEASE_NAME=Clash Rules $(date +%Y%m%d-%H%M)" >> $GITHUB_ENV - echo "TAG_NAME=$(date +%Y%m%d%H%M)" >> $GITHUB_ENV - echo "UPDATE_TIME=$(date '+%Y-%m-%d %H:%M:%S UTC')" >> $GITHUB_ENV - # 设置 Gitea 相关环境变量 - echo "GITEA_SERVER_URL=${GITHUB_SERVER_URL:-$GITEA_SERVER_URL}" >> $GITHUB_ENV - echo "GITEA_REPOSITORY=${GITHUB_REPOSITORY:-$GITEA_REPOSITORY}" >> $GITHUB_ENV - - - name: Create rules directory - run: | - mkdir -p rules - cd rules - - - name: Download reject rules - run: | - echo "正在下载广告拦截规则..." - curl -fsSL "https://cdn.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/reject.txt" -o rules/reject.txt - echo "✅ reject.txt 下载完成" - - - name: Download iCloud rules - run: | - echo "正在下载 iCloud 规则..." - curl -fsSL "https://cdn.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/icloud.txt" -o rules/icloud.txt - echo "✅ icloud.txt 下载完成" - - - name: Download Apple rules - run: | - echo "正在下载 Apple 规则..." - curl -fsSL "https://cdn.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/apple.txt" -o rules/apple.txt - echo "✅ apple.txt 下载完成" - - - name: Download Google rules - run: | - echo "正在下载 Google 规则..." - curl -fsSL "https://cdn.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/google.txt" -o rules/google.txt - echo "✅ google.txt 下载完成" - - - name: Download proxy rules - run: | - echo "正在下载代理规则..." - curl -fsSL "https://cdn.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/proxy.txt" -o rules/proxy.txt - echo "✅ proxy.txt 下载完成" - - - name: Download direct rules - run: | - echo "正在下载直连规则..." - curl -fsSL "https://cdn.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/direct.txt" -o rules/direct.txt - echo "✅ direct.txt 下载完成" - - - name: Download private rules - run: | - echo "正在下载私有地址规则..." - curl -fsSL "https://cdn.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/private.txt" -o rules/private.txt - echo "✅ private.txt 下载完成" - - - name: Download GFW rules - run: | - echo "正在下载 GFW 规则..." - curl -fsSL "https://cdn.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/gfw.txt" -o rules/gfw.txt - echo "✅ gfw.txt 下载完成" - - - name: Download TLD-not-CN rules - run: | - echo "正在下载非中国顶级域名规则..." - curl -fsSL "https://cdn.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/tld-not-cn.txt" -o rules/tld-not-cn.txt - echo "✅ tld-not-cn.txt 下载完成" - - - name: Download Telegram CIDR - run: | - echo "正在下载 Telegram IP 段..." - curl -fsSL "https://cdn.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/telegramcidr.txt" -o rules/telegramcidr.txt - echo "✅ telegramcidr.txt 下载完成" - - - name: Download CN CIDR - run: | - echo "正在下载中国 IP 段..." - curl -fsSL "https://cdn.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/cncidr.txt" -o rules/cncidr.txt - echo "✅ cncidr.txt 下载完成" - - - name: Download LAN CIDR - run: | - echo "正在下载局域网 IP 段..." - curl -fsSL "https://cdn.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/lancidr.txt" -o rules/lancidr.txt - echo "✅ lancidr.txt 下载完成" - - - name: Download applications rules - run: | - echo "正在下载应用程序规则..." - curl -fsSL "https://cdn.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/applications.txt" -o rules/applications.txt - echo "✅ applications.txt 下载完成" - - - name: Generate README - run: | - cat > rules/README.md << 'EOF' - # Clash Rules Mirror - - 本仓库镜像了 [Loyalsoldier/clash-rules](https://github.com/Loyalsoldier/clash-rules) 的规则文件。 - - ## 📋 规则列表 - - | 文件名 | 描述 | 类型 | - |--------|------|------| - | reject.txt | 广告拦截规则 | domain | - | icloud.txt | iCloud 服务规则 | domain | - | apple.txt | Apple 服务规则 | domain | - | google.txt | Google 服务规则 | domain | - | proxy.txt | 代理规则 | domain | - | direct.txt | 直连规则 | domain | - | private.txt | 私有地址规则 | domain | - | gfw.txt | GFW 规则 | domain | - | tld-not-cn.txt | 非中国顶级域名 | domain | - | telegramcidr.txt | Telegram IP段 | ipcidr | - | cncidr.txt | 中国大陆 IP段 | ipcidr | - | lancidr.txt | 局域网 IP段 | ipcidr | - | applications.txt | 应用程序规则 | classical | - - ## 🔗 使用方法 - - 将以下配置添加到你的 Clash 配置文件中: - - ```yaml - rule-providers: - reject: - type: http - behavior: domain - url: "https://your-gitea-domain/username/clash-rules/raw/branch/release/reject.txt" - path: ./ruleset/reject.yaml - interval: 86400 - - # 其他规则类似配置... - ``` - - ## ⏰ 更新时间 - - 最后更新时间: ${{ env.UPDATE_TIME }} - - ## 📊 统计信息 - - EOF - - # 添加文件统计 - echo "| 文件 | 大小 | 行数 |" >> rules/README.md - echo "|------|------|------|" >> rules/README.md - - for file in rules/*.txt; do - filename=$(basename "$file") - filesize=$(du -h "$file" | cut -f1) - linecount=$(wc -l < "$file") - echo "| $filename | $filesize | $linecount |" >> rules/README.md - done - - - name: Generate usage example - run: | - cat > rules/clash-config-example.yaml << 'EOF' - # Clash 配置示例 - # 使用本仓库的规则文件 - - rule-providers: - reject: - type: http - behavior: domain - url: "https://your-gitea-domain/username/clash-rules/raw/branch/release/reject.txt" - path: ./ruleset/reject.yaml - interval: 86400 - - icloud: - type: http - behavior: domain - url: "https://your-gitea-domain/username/clash-rules/raw/branch/release/icloud.txt" - path: ./ruleset/icloud.yaml - interval: 86400 - - apple: - type: http - behavior: domain - url: "https://your-gitea-domain/username/clash-rules/raw/branch/release/apple.txt" - path: ./ruleset/apple.yaml - interval: 86400 - - google: - type: http - behavior: domain - url: "https://your-gitea-domain/username/clash-rules/raw/branch/release/google.txt" - path: ./ruleset/google.yaml - interval: 86400 - - proxy: - type: http - behavior: domain - url: "https://your-gitea-domain/username/clash-rules/raw/branch/release/proxy.txt" - path: ./ruleset/proxy.yaml - interval: 86400 - - direct: - type: http - behavior: domain - url: "https://your-gitea-domain/username/clash-rules/raw/branch/release/direct.txt" - path: ./ruleset/direct.yaml - interval: 86400 - - private: - type: http - behavior: domain - url: "https://your-gitea-domain/username/clash-rules/raw/branch/release/private.txt" - path: ./ruleset/private.yaml - interval: 86400 - - gfw: - type: http - behavior: domain - url: "https://your-gitea-domain/username/clash-rules/raw/branch/release/gfw.txt" - path: ./ruleset/gfw.yaml - interval: 86400 - - tld-not-cn: - type: http - behavior: domain - url: "https://your-gitea-domain/username/clash-rules/raw/branch/release/tld-not-cn.txt" - path: ./ruleset/tld-not-cn.yaml - interval: 86400 - - telegramcidr: - type: http - behavior: ipcidr - url: "https://your-gitea-domain/username/clash-rules/raw/branch/release/telegramcidr.txt" - path: ./ruleset/telegramcidr.yaml - interval: 86400 - - cncidr: - type: http - behavior: ipcidr - url: "https://your-gitea-domain/username/clash-rules/raw/branch/release/cncidr.txt" - path: ./ruleset/cncidr.yaml - interval: 86400 - - lancidr: - type: http - behavior: ipcidr - url: "https://your-gitea-domain/username/clash-rules/raw/branch/release/lancidr.txt" - path: ./ruleset/lancidr.yaml - interval: 86400 - - applications: - type: http - behavior: classical - url: "https://your-gitea-domain/username/clash-rules/raw/branch/release/applications.txt" - path: ./ruleset/applications.yaml - interval: 86400 - - rules: - - RULE-SET,applications,DIRECT - - RULE-SET,private,DIRECT - - RULE-SET,reject,REJECT - - RULE-SET,icloud,DIRECT - - RULE-SET,apple,DIRECT - - RULE-SET,google,🚀 代理 - - RULE-SET,proxy,🚀 代理 - - RULE-SET,gfw,🚀 代理 - - RULE-SET,tld-not-cn,🚀 代理 - - RULE-SET,telegramcidr,📲 Telegram - - RULE-SET,direct,DIRECT - - RULE-SET,lancidr,DIRECT - - RULE-SET,cncidr,DIRECT - - GEOIP,LAN,DIRECT - - GEOIP,CN,DIRECT - - MATCH,🚀 代理 - EOF - - - name: Check for changes - id: check_changes - run: | - git add rules/ - if git diff --staged --quiet; then - echo "changes=false" >> $GITHUB_OUTPUT - echo "📄 没有检测到规则文件变化" - else - echo "changes=true" >> $GITHUB_OUTPUT - echo "🔄 检测到规则文件有更新" - fi - - - name: Commit and push changes - if: steps.check_changes.outputs.changes == 'true' - run: | - git config --local user.email "action@gitea.local" - git config --local user.name "Gitea Actions Bot" - git commit -m "🤖 自动更新 Clash 规则文件 - ${{ env.UPDATE_TIME }}" - git push origin main - - - name: Create release branch - if: steps.check_changes.outputs.changes == 'true' - run: | - # 创建或更新 release 分支 - git checkout -B release - git push -f origin release - - - name: Create release (Gitea API) - if: steps.check_changes.outputs.changes == 'true' - run: | - # 生成更新日志 - cat > release_notes.md << 'EOF' - ## 📋 本次更新内容 - - 🤖 自动同步最新的 Clash 规则文件 - - ### 📊 文件统计 - EOF - - echo "| 文件名 | 大小 | 行数 |" >> release_notes.md - echo "|--------|------|------|" >> release_notes.md - - for file in rules/*.txt; do - filename=$(basename "$file") - filesize=$(du -h "$file" | cut -f1) - linecount=$(wc -l < "$file") - echo "| $filename | $filesize | $linecount |" >> release_notes.md - done - - echo "" >> release_notes.md - echo "### 🔗 使用方法" >> release_notes.md - echo "参考仓库中的 \`clash-config-example.yaml\` 文件配置你的 Clash 客户端。" >> release_notes.md - echo "" >> release_notes.md - echo "### ⏰ 更新时间" >> release_notes.md - echo "${{ env.UPDATE_TIME }}" >> release_notes.md - - # 准备 API 请求数据 - RELEASE_BODY=$(cat release_notes.md | jq -sR .) - - # 使用 Gitea API 创建 Release - RESPONSE=$(curl -s -w "%{http_code}" -X POST \ - -H "Authorization: token ${{ secrets.GITEA_TOKEN || secrets.WORKFLOW_TOKEN }}" \ - -H "Content-Type: application/json" \ - -d "{ - \"tag_name\": \"${{ env.TAG_NAME }}\", - \"target_commitish\": \"release\", - \"name\": \"${{ env.RELEASE_NAME }}\", - \"body\": $RELEASE_BODY, - \"draft\": false, - \"prerelease\": false - }" \ - "${{ env.GITEA_SERVER_URL }}/api/v1/repos/${{ env.GITEA_REPOSITORY }}/releases") - - HTTP_CODE="${RESPONSE: -3}" - if [[ "$HTTP_CODE" -ge 200 && "$HTTP_CODE" -lt 300 ]]; then - echo "✅ Release 创建成功" - else - echo "⚠️ Release 创建可能失败 (HTTP $HTTP_CODE),但文件已成功更新" - echo "响应: ${RESPONSE%???}" - fi - - - name: Summary - if: steps.check_changes.outputs.changes == 'true' - run: | - echo "✅ Clash 规则文件更新完成!" - echo "🔗 访问地址: ${{ env.GITEA_SERVER_URL }}/${{ env.GITEA_REPOSITORY }}" - echo "📁 文件位置: rules/ 目录" - echo "🏷️ 发布标签: ${{ env.TAG_NAME }}" - - - name: No changes - if: steps.check_changes.outputs.changes == 'false' - run: | - echo "📄 规则文件没有变化,跳过发布步骤" \ No newline at end of file + name: test-artifacts + path: test-output/ + retention-days: 1 \ No newline at end of file