name: Update Clash Rules on: schedule: - cron: '0 23 * * *' # 每天北京时间早上7点执行 workflow_dispatch: # 允许手动触发 push: branches: [ main, master ] jobs: update-rules: runs-on: ubuntu-latest steps: - name: Checkout repository uses: actions/checkout@v4 - name: 创建目录结构 run: | mkdir -p ruleset/txt mkdir -p ruleset/yaml - name: 下载并转换规则文件 run: | # 定义规则文件列表 rules=( "reject" "icloud" "apple" "google" "proxy" "direct" "private" "gfw" "tld-not-cn" "telegramcidr" "cncidr" "lancidr" "applications" ) # 下载所有规则文件 for rule in "${rules[@]}"; do 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 # 转换为 yaml 格式 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 自动同步 [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) | ## 使用方法 在 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 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,cncidr,DIRECT - GEOIP,CN,DIRECT - MATCH,PROXY ``` 最后更新: $(date +'%Y-%m-%d %H:%M UTC') EOF - name: 提交更改 run: | 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