Generate RULE-SET for Premium Edition of Clash #460
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: Generate RULE-SET for Premium Edition of Clash | |
| on: | |
| workflow_dispatch: | |
| schedule: | |
| - cron: "30 22 * * *" | |
| push: | |
| branches: | |
| - master | |
| paths-ignore: | |
| - "**/README.md" | |
| permissions: | |
| contents: write | |
| jobs: | |
| build: | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Set variables | |
| run: | | |
| echo "RELEASE_NAME=Released on $(date +%Y%m%d%H%M)" >> $GITHUB_ENV | |
| echo "TAG_NAME=$(date +%Y%m%d%H%M)" >> $GITHUB_ENV | |
| echo "custom_icloud=https://raw.githubusercontent.com/Loyalsoldier/domain-list-custom/release/icloud.txt" >> $GITHUB_ENV | |
| echo "custom_tld_not_cn=https://raw.githubusercontent.com/Loyalsoldier/domain-list-custom/release/tld-!cn.txt" >> $GITHUB_ENV | |
| echo "custom_private=https://raw.githubusercontent.com/Loyalsoldier/domain-list-custom/release/private.txt" >> $GITHUB_ENV | |
| echo "Loyalsoldier_reject=https://raw.githubusercontent.com/Loyalsoldier/v2ray-rules-dat/release/reject-list.txt" >> $GITHUB_ENV | |
| echo "Loyalsoldier_proxy=https://raw.githubusercontent.com/Loyalsoldier/v2ray-rules-dat/release/proxy-list.txt" >> $GITHUB_ENV | |
| echo "Loyalsoldier_direct=https://raw.githubusercontent.com/Loyalsoldier/v2ray-rules-dat/release/direct-list.txt" >> $GITHUB_ENV | |
| echo "Loyalsoldier_gfw=https://raw.githubusercontent.com/Loyalsoldier/v2ray-rules-dat/release/gfw.txt" >> $GITHUB_ENV | |
| echo "Loyalsoldier_greatfire=https://raw.githubusercontent.com/Loyalsoldier/v2ray-rules-dat/release/greatfire.txt" >> $GITHUB_ENV | |
| echo "felixonmars_apple=https://raw.githubusercontent.com/felixonmars/dnsmasq-china-list/master/apple.china.conf" >> $GITHUB_ENV | |
| echo "felixonmars_google=https://raw.githubusercontent.com/felixonmars/dnsmasq-china-list/master/google.china.conf" >> $GITHUB_ENV | |
| echo "cn_cidr=https://raw.githubusercontent.com/Loyalsoldier/geoip/release/text/cn.txt" >> $GITHUB_ENV | |
| echo "lan_cidr=https://raw.githubusercontent.com/Loyalsoldier/geoip/release/text/private.txt" >> $GITHUB_ENV | |
| echo "telegram_cidr=https://raw.githubusercontent.com/Loyalsoldier/geoip/release/text/telegram.txt" >> $GITHUB_ENV | |
| shell: bash | |
| - name: Install mihomo | |
| run: | | |
| version=$(curl -sL https://github.com/MetaCubeX/mihomo/releases/download/Prerelease-Alpha/version.txt) | |
| curl -sL "https://github.com/MetaCubeX/mihomo/releases/download/Prerelease-Alpha/mihomo-linux-amd64-${version}.gz" | \ | |
| gunzip -c > /usr/local/bin/mihomo && chmod +x /usr/local/bin/mihomo | |
| - name: Checkout the "hidden" branch | |
| uses: actions/checkout@v5 | |
| with: | |
| repository: Loyalsoldier/clash-rules | |
| ref: hidden | |
| - name: Generate icloud.txt file | |
| run: | | |
| echo "payload:" > icloud.txt | |
| curl -sSL ${custom_icloud} | grep -E "^(full|domain):" | awk -F ':' '{printf " - |+.%s|\n", $2}' | sed "s/|/'/g" >> icloud.txt | |
| - name: Generate google.txt file | |
| run: | | |
| echo "payload:" > google.txt | |
| curl -sSL ${felixonmars_google} | perl -ne '/^server=\/([^\/]+)\// && print " - |+.$1|\n"' | sed "s/|/'/g" >> google.txt | |
| - name: Generate apple.txt file | |
| run: | | |
| echo "payload:" > apple.txt | |
| curl -sSL ${felixonmars_apple} | perl -ne '/^server=\/([^\/]+)\// && print " - |+.$1|\n"' | sed "s/|/'/g" >> apple.txt | |
| - name: Generate private.txt file | |
| run: | | |
| echo "payload:" > private.txt | |
| curl -sSL ${custom_private} | awk -F ':' '/^full:/ {printf " - |%s|\n", $2}' | sed "s/|/'/g" >> private.txt | |
| curl -sSL ${custom_private} | awk -F ':' '/^domain:/ {printf " - |+.%s|\n", $2}' | sed "s/|/'/g" >> private.txt | |
| - name: Generate direct.txt file | |
| run: | | |
| echo "payload:" > direct.txt | |
| curl -sSL ${Loyalsoldier_direct} | grep -Ev "^(regexp|keyword):" | perl -ne '/^(full:)([-_a-zA-Z0-9]+(\.[-_a-zA-Z0-9]+)*)/ && print " - |$2|\n"' | sed "s/|/'/g" >> direct.txt | |
| curl -sSL ${Loyalsoldier_direct} | grep -Ev "^(regexp|keyword|full):" | perl -ne '/^(domain:)?([-_a-zA-Z0-9]+(\.[-_a-zA-Z0-9]+)*)/ && print " - |+.$2|\n"' | sed "s/|/'/g" >> direct.txt | |
| - name: Generate proxy.txt file | |
| run: | | |
| echo "payload:" > proxy.txt | |
| curl -sSL ${Loyalsoldier_proxy} | grep -Ev "^(regexp|keyword):" | perl -ne '/^(full:)([-_a-zA-Z0-9]+(\.[-_a-zA-Z0-9]+)*)/ && print " - |$2|\n"' | sed "s/|/'/g" >> proxy.txt | |
| curl -sSL ${Loyalsoldier_proxy} | grep -Ev "^(regexp|keyword|full):" | perl -ne '/^(domain:)?([-_a-zA-Z0-9]+(\.[-_a-zA-Z0-9]+)*)/ && print " - |+.$2|\n"' | sed "s/|/'/g" >> proxy.txt | |
| - name: Generate reject.txt file | |
| run: | | |
| echo "payload:" > reject.txt | |
| curl -sSL ${Loyalsoldier_reject} | grep -Ev "^(regexp|keyword):" | perl -ne '/^(domain:|full:)?([-_a-zA-Z0-9]+(\.[-_a-zA-Z0-9]+)*)/ && print " - |+.$2|\n"' | sed "s/|/'/g" >> reject.txt | |
| - name: Generate gfw.txt file | |
| run: | | |
| echo "payload:" > gfw.txt | |
| curl -sSL ${Loyalsoldier_gfw} | grep -Ev "^(regexp|keyword):" | perl -ne '/^(domain:|full:)?([-_a-zA-Z0-9]+(\.[-_a-zA-Z0-9]+)*)/ && print " - |+.$2|\n"' | sed "s/|/'/g" >> gfw.txt | |
| - name: Generate greatfire.txt file | |
| run: | | |
| echo "payload:" > greatfire.txt | |
| curl -sSL ${Loyalsoldier_greatfire} | grep -Ev "^(regexp|keyword):" | perl -ne '/^(domain:|full:)?([-_a-zA-Z0-9]+(\.[-_a-zA-Z0-9]+)*)/ && print " - |+.$2|\n"' | sed "s/|/'/g" >> greatfire.txt | |
| - name: Generate tld-not-cn.txt file | |
| run: | | |
| echo "payload:" > tld-not-cn.txt | |
| curl -sSL "${custom_tld_not_cn}" | perl -ne '/^domain:([-_a-zA-Z0-9]+(\.[-_a-zA-Z0-9]+)*)/ && print " - |+.$1|\n"' | sed "s/|/'/g" >> tld-not-cn.txt | |
| - name: Generate cncidr.txt file | |
| run: | | |
| echo "payload:" > cncidr.txt | |
| curl -sSL ${cn_cidr} | perl -ne '/(.+\/\d+)/ && print " - |$1|\n"' | sed "s/|/'/g" >> cncidr.txt | |
| - name: Generate telegramcidr.txt file | |
| run: | | |
| echo "payload:" > telegramcidr.txt | |
| curl -sSL ${telegram_cidr} | perl -ne '/(.+\/\d+)/ && print " - |$1|\n"' | sed "s/|/'/g" >> telegramcidr.txt | |
| - name: Generate lancidr.txt file | |
| run: | | |
| echo "payload:" > lancidr.txt | |
| curl -sSL ${lan_cidr} | perl -ne '/(.+\/\d+)/ && print " - |$1|\n"' | sed "s/|/'/g" >> lancidr.txt | |
| - name: Move files to publish directory | |
| run: | | |
| mkdir -p publish | |
| cp *.txt ./publish/ | |
| - name: Rename .txt files to .yaml in the publish directory | |
| run: | | |
| # 指定目录 | |
| SOURCE_DIR="./publish" | |
| # 遍历指定目录下的所有 .txt 文件并将它们重命名为 .yaml | |
| find "$SOURCE_DIR" -type f -name "*.txt" | while read txt_file; do | |
| yaml_file="${txt_file%.txt}.yaml" # 替换扩展名为 .yaml | |
| mv "$txt_file" "$yaml_file" # 重命名文件 | |
| echo "Renamed $txt_file to $yaml_file" | |
| done | |
| - name: Convert YAML to MRS | |
| run: | | |
| mihomo convert-ruleset domain yaml publish/apple.yaml publish/apple.mrs | |
| mihomo convert-ruleset ipcidr yaml publish/cncidr.yaml publish/cncidr.mrs | |
| mihomo convert-ruleset domain yaml publish/direct.yaml publish/direct.mrs | |
| mihomo convert-ruleset domain yaml publish/gfw.yaml publish/gfw.mrs | |
| mihomo convert-ruleset domain yaml publish/google.yaml publish/google.mrs | |
| mihomo convert-ruleset domain yaml publish/greatfire.yaml publish/greatfire.mrs | |
| mihomo convert-ruleset domain yaml publish/icloud.yaml publish/icloud.mrs | |
| mihomo convert-ruleset ipcidr yaml publish/lancidr.yaml publish/lancidr.mrs | |
| mihomo convert-ruleset domain yaml publish/private.yaml publish/private.mrs | |
| mihomo convert-ruleset domain yaml publish/proxy.yaml publish/proxy.mrs | |
| mihomo convert-ruleset domain yaml publish/reject.yaml publish/reject.mrs | |
| mihomo convert-ruleset ipcidr yaml publish/telegramcidr.yaml publish/telegramcidr.mrs | |
| mihomo convert-ruleset domain yaml publish/tld-not-cn.yaml publish/tld-not-cn.mrs | |
| - name: Release and upload assets | |
| uses: softprops/action-gh-release@v2 | |
| with: | |
| name: ${{ env.RELEASE_NAME }} | |
| tag_name: ${{ env.TAG_NAME }} | |
| draft: false | |
| prerelease: false | |
| files: | | |
| ./publish/* | |
| env: | |
| GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
| - name: Git push assets to "release" branch | |
| run: | | |
| cd publish || exit 1 | |
| git init | |
| git config --local user.name "github-actions[bot]" | |
| git config --local user.email "41898282+github-actions[bot]@users.noreply.github.com" | |
| git checkout -b release | |
| git add . | |
| git commit -m "${{ env.RELEASE_NAME }}" | |
| git remote add origin "https://${{ github.actor }}:${{ secrets.GITHUB_TOKEN }}@github.com/${{ github.repository }}" | |
| git push -f origin release | |
| - name: Purge jsdelivr CDN | |
| run: | | |
| cd publish || exit 1 | |
| for file in $(ls); do | |
| curl -i "https://purge.jsdelivr.net/gh/${{ github.repository }}@release/${file}" | |
| done |