Build ruleset and geodata #1572
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: Build ruleset and geodata | |
| on: | |
| workflow_dispatch: | |
| schedule: | |
| - cron: "0 19 * * *" | |
| push: | |
| branches: | |
| - master | |
| paths-ignore: | |
| - "**/README.md" | |
| - "**/*.ini" | |
| jobs: | |
| build: | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Set variables | |
| run: | | |
| echo "update_version=$(date -d '+8 hours' +%Y-%m-%d)" >> ${GITHUB_ENV} | |
| echo "singbox_core_release_version=$(curl -sSL https://api.github.com/repos/SagerNet/sing-box/releases/latest | jq -r '.tag_name' | sed -E -e 's/([0-9]+)$/0/' -e 's/^v//')" >> ${GITHUB_ENV} | |
| echo "singbox_core_latest_version=$(curl -sSL https://raw.githubusercontent.com/SagerNet/sing-box/docs/configuration/rule-set/source-format/index.html | awk '/<li>/ {last=$0} END {print last}' | sed -n 's/.*\([0-9]\+\.[0-9]\+\.[0-9]\+\).*/\1/p')" >> ${GITHUB_ENV} | |
| echo "singbox_core_compatible_version=$(curl -sSL https://raw.githubusercontent.com/SagerNet/sing-box/docs/configuration/rule-set/source-format/index.html | awk '/<li>/{lines[++count]=$0} END{print lines[count-1]}' | sed -n 's/.*\([0-9]\+\.[0-9]\+\.[0-9]\+\).*/\1/p')" >> ${GITHUB_ENV} | |
| echo "singbox_rules_latest_version=$(curl -sSL https://raw.githubusercontent.com/SagerNet/sing-box/docs/configuration/rule-set/source-format/index.html | awk '/<li>/ {last=$0} END {print last}' | sed -n 's/^<li>\([0-9]\+\).*/\1/p')" >> ${GITHUB_ENV} | |
| echo "singbox_rules_compatible_version=$(curl -sSL https://raw.githubusercontent.com/SagerNet/sing-box/docs/configuration/rule-set/source-format/index.html | awk '/<li>/{lines[++count]=$0} END{print lines[count-1]}' | sed -n 's/^<li>\([0-9]\+\).*/\1/p')" >> ${GITHUB_ENV} | |
| echo "domains_download_url=https://github.com/DustinWin/domain-list-custom/releases/download/domains" >> ${GITHUB_ENV} | |
| echo "ips_download_url=https://github.com/DustinWin/geoip/releases/download/ips" >> ${GITHUB_ENV} | |
| shell: bash | |
| - name: Clone Repository | |
| uses: actions/checkout@v6 | |
| - name: Checkout DustinWin/domain-list-custom | |
| uses: actions/checkout@v6 | |
| with: | |
| repository: DustinWin/domain-list-custom | |
| path: custom | |
| - name: Checkout v2fly/domain-list-community | |
| uses: actions/checkout@v6 | |
| with: | |
| repository: v2fly/domain-list-community | |
| path: community | |
| - name: Setup Go | |
| uses: actions/setup-go@v6 | |
| with: | |
| go-version-file: ./custom/go.mod | |
| cache-dependency-path: ./custom/go.sum | |
| - name: Generate `mihomo` geodata | |
| run: | | |
| mkdir -p ./community/mydata/ | |
| archs1=(private ads trackerslist microsoft-cn apple-cn google-cn games-cn media games ai networktest tld-proxy gfw proxy cn) | |
| archs2=(private ads trackerslist microsoft-cn apple-cn google-cn games-cn ai networktest tld-proxy gfw proxy cn) | |
| archs3=(private microsoft-cn apple-cn google-cn games-cn tld-proxy gfw cn-lite) | |
| # Generate `mihomo` geosite-all.dat | |
| cd ./community/ | |
| for arch1 in "${archs1[@]}"; do | |
| curl -sSL "${domains_download_url}/${arch1}.list" | sed -e 's/DOMAIN,/full:/' -e 's/DOMAIN-SUFFIX,//' -e 's/DOMAIN-KEYWORD,/keyword:/' -e 's/DOMAIN-REGEX,/regexp:/' > "./mydata/${arch1}" | |
| done | |
| curl -sSL "${domains_download_url}/fakeip-filter.list" | awk '!/(^DOMAIN-REGEX,|ntp|stun|time)/' | sed -e 's/DOMAIN,/full:/' -e 's/DOMAIN-SUFFIX,//' > ./mydata/fakeip-filter | |
| cat <<EOF >> ./mydata/fakeip-filter | |
| keyword:ntp | |
| keyword:stun | |
| keyword:time | |
| EOF | |
| curl -sSL "${domains_download_url}/fakeip-filter.list" | awk '/^DOMAIN-REGEX,/ && !/(ntp|stun|time)/' | sed 's/DOMAIN-REGEX,/regexp:/' >> ./mydata/fakeip-filter | |
| go run ./ --datapath=./mydata/ --outputname geosite-all.dat | |
| # Generate `mihomo` geosite-all-lite.dat | |
| rm -f ./mydata/ads ./mydata/fakeip-filter | |
| curl -sSL "${domains_download_url}/fakeip-filter-lite.list" | awk '!/(^DOMAIN-REGEX,|ntp|stun|time)/' | sed -e 's/DOMAIN,/full:/' -e 's/DOMAIN-SUFFIX,//' > ./mydata/fakeip-filter-lite | |
| cat <<EOF >> ./mydata/fakeip-filter-lite | |
| keyword:ntp | |
| keyword:stun | |
| keyword:time | |
| EOF | |
| go run ./ --datapath=./mydata/ --outputname geosite-all-lite.dat | |
| # Generate `mihomo` geosite.dat | |
| rm -f ./mydata/* | |
| for arch2 in "${archs2[@]}"; do | |
| curl -sSL "${domains_download_url}/${arch2}.list" | sed -e 's/DOMAIN,/full:/' -e 's/DOMAIN-SUFFIX,//' -e 's/DOMAIN-KEYWORD,/keyword:/' -e 's/DOMAIN-REGEX,/regexp:/' > "./mydata/${arch2}" | |
| done | |
| curl -sSL "${domains_download_url}/fakeip-filter.list" | awk '!/^DOMAIN-REGEX,/' | sed -e 's/DOMAIN,/full:/' -e 's/DOMAIN-SUFFIX,//' > ./mydata/fakeip-filter | |
| cat <<EOF >> ./mydata/fakeip-filter | |
| keyword:ntp | |
| keyword:stun | |
| keyword:time | |
| EOF | |
| curl -sSL "${domains_download_url}/fakeip-filter.list" | awk '/^DOMAIN-REGEX,/ && !/(ntp|stun|time)/' | sed 's/DOMAIN-REGEX,/regexp:/' >> ./mydata/fakeip-filter | |
| go run ./ --datapath=./mydata/ --outputname geosite.dat | |
| # Generate `mihomo` geosite-lite.dat | |
| rm -f ./mydata/ads ./mydata/fakeip-filter | |
| curl -sSL "${domains_download_url}/fakeip-filter-lite.list" | awk '!/^DOMAIN-REGEX,/' | sed -e 's/DOMAIN,/full:/' -e 's/DOMAIN-SUFFIX,//' > ./mydata/fakeip-filter-lite | |
| cat <<EOF >> ./mydata/fakeip-filter-lite | |
| keyword:ntp | |
| keyword:time | |
| keyword:stun | |
| EOF | |
| go run ./ --datapath=./mydata/ --outputname geosite-lite.dat | |
| # Generate `mihomo` geosite-mini.dat | |
| rm -f ./mydata/* | |
| for arch3 in "${archs3[@]}"; do | |
| curl -sSL "${domains_download_url}/${arch3}.list" | sed -e 's/DOMAIN,/full:/' -e 's/DOMAIN-SUFFIX,//' -e 's/DOMAIN-KEYWORD,/keyword:/' -e 's/DOMAIN-REGEX,/regexp:/' > "./mydata/${arch3}" | |
| done | |
| mv -f ./mydata/cn-lite ./mydata/cn | |
| go run ./ --datapath=./mydata/ --outputname geosite-mini.dat | |
| - name: Get geoip relative files | |
| run: | | |
| mkdir -p ./mihomo-geodata/ | |
| # Download mihomo geoip files (.mmdb) | |
| mihomo_mmdb=($(curl -sSL https://api.github.com/repos/DustinWin/geoip/releases | grep '"browser_download_url"' | grep '.mmdb' | awk -F '"' '{print $4}')) | |
| count_mihomo_mmdb=${#mihomo_mmdb[@]} | |
| for ((i = 0; i < count_mihomo_mmdb; i++)); do | |
| wget -P ./mihomo-geodata/ "${mihomo_mmdb[i]}" | |
| done | |
| # Download `mihomo` other geoip files (except .mmdb) | |
| mihomo_others=($(curl -sSL https://api.github.com/repos/DustinWin/geoip/releases | grep '"browser_download_url"' | grep '/mihomo-geodata/' | grep -v '.mmdb' | awk -F '"' '{print $4}')) | |
| count_mihomo_others=${#mihomo_others[@]} | |
| for ((i = 0; i < count_mihomo_others; i++)); do | |
| wget -P ./community/ "${mihomo_others[i]}" | |
| done | |
| - name: Move `mihomo` geodata files | |
| run: | | |
| cd ./community/ || exit 1 | |
| for file in $(ls *.dat *.metadb); do | |
| install -Dp "./${file}" ../mihomo-geodata/ | |
| done | |
| rm -rf ../custom* ../community* | |
| - name: Download `mihomo` rule-set files | |
| run: | | |
| mkdir -p ./mihomo-ruleset/ | |
| domains=(ads trackerslist microsoft-cn apple-cn google-cn games-cn netflix disney max primevideo appletv youtube tiktok bilibili spotify media games ai networktest tld-proxy gfw proxy cn cn-lite) | |
| ips=(netflixip mediaip gamesip privateip cnip telegramip) | |
| for domain in "${domains[@]}"; do | |
| mkdir -p "./tools/domains/${domain}/" | |
| curl -sSL "${domains_download_url}/${domain}.list" | sed -e 's/DOMAIN,//' -e 's/DOMAIN-SUFFIX,/\+\./' >> "./tools/domains/${domain}/${domain}.list" | |
| done | |
| mkdir -p ./tmp/ ./tools/domains/fakeip-filter/ | |
| curl -sSL "${domains_download_url}/fakeip-filter.list" | awk '!/^DOMAIN-REGEX,/' | sed -e 's/DOMAIN,//' -e 's/DOMAIN-SUFFIX,/\+\./' > ./tmp/temp-fakeip-filter-domains.txt | |
| curl -sSL "${domains_download_url}/fakeip-filter.list" | awk '/^DOMAIN-REGEX,/' | sed -e 's/\\s/ /' -e 's/\\./\./g' -e 's/\[\^.\]+/*/g' -e 's/\^\.\*/\^\+/' -e 's/.*\^//; s/\$//' >> ./tmp/temp-fakeip-filter-domains.txt | |
| sort --ignore-case ./tmp/temp-fakeip-filter-domains.txt >> ./tools/domains/fakeip-filter/fakeip-filter.list | |
| mkdir -p ./tools/domains/fakeip-filter-lite/ | |
| curl -sSL "${domains_download_url}/fakeip-filter-lite.list" | awk '!/^DOMAIN-REGEX,/' | sed -e 's/DOMAIN,//' -e 's/DOMAIN-SUFFIX,/\+\./' > ./tmp/temp-fakeip-filter-lite-domains.txt | |
| curl -sSL "${domains_download_url}/fakeip-filter-lite.list" | awk '/^DOMAIN-REGEX,/' | sed -e 's/\\./\./g' -e 's/\[\^.\]+/*/g' -e 's/\^\.\*/\^\+/' -e 's/.*\^//; s/\$//' >> ./tmp/temp-fakeip-filter-lite-domains.txt | |
| sort --ignore-case ./tmp/temp-fakeip-filter-lite-domains.txt >> ./tools/domains/fakeip-filter-lite/fakeip-filter-lite.list | |
| mkdir -p ./tools/domains/private/ | |
| curl -sSL "${domains_download_url}/private.list" | awk '!/^DOMAIN-REGEX,/' | sed -e 's/DOMAIN,//' -e 's/DOMAIN-SUFFIX,/\+\./' > ./tmp/temp-private-domains.txt | |
| curl -sSL "${domains_download_url}/private.list" | awk '/^DOMAIN-REGEX,/' | sed -e 's/\\./\./g' -e 's/\[\^.\]+/*/g' -e 's/\^\.\*/\^\+/' -e 's/.*\^//; s/\$//' >> ./tmp/temp-private-domains.txt | |
| sort --ignore-case ./tmp/temp-private-domains.txt >> ./tools/domains/private/private.list | |
| rm -f ./tmp/* | |
| curl -sSL "${domains_download_url}/applications.list" > ./mihomo-ruleset/applications.list | |
| for ip in "${ips[@]}"; do | |
| mkdir -p "./tools/ips/${ip}/" | |
| curl -sSL "${ips_download_url}/${ip}.list" | sed 's/.*,//' >> "./tools/ips/${ip}/${ip}.list" | |
| done | |
| - name: Download `sing-box` rule_set files | |
| run: | | |
| domains=(private ads trackerslist microsoft-cn apple-cn google-cn games-cn netflix disney max primevideo appletv youtube tiktok bilibili spotify media games ai networktest tld-proxy gfw proxy cn cn-lite) | |
| ips=(netflixip mediaip gamesip privateip cnip telegramip) | |
| for domain in "${domains[@]}"; do | |
| mkdir -p "./tools/rules/${domain}/" | |
| curl -sSL "${domains_download_url}/${domain}.list" > "./tools/rules/${domain}/${domain}.list" | |
| done | |
| mkdir -p ./tools/rules/fakeip-filter/ | |
| curl -sSL "${domains_download_url}/fakeip-filter.list" | awk '!/(^DOMAIN-REGEX,|ntp|stun|time)/' > ./tmp/temp-fakeip-filter-rules.txt | |
| cat <<EOF >> ./tmp/temp-fakeip-filter-rules.txt | |
| DOMAIN-KEYWORD,ntp | |
| DOMAIN-KEYWORD,stun | |
| DOMAIN-KEYWORD,time | |
| EOF | |
| curl -sSL "${domains_download_url}/fakeip-filter.list" | awk '/^DOMAIN-REGEX,/ && !/(ntp|stun|time)/' >> ./tmp/temp-fakeip-filter-rules.txt | |
| sort --ignore-case ./tmp/temp-fakeip-filter-rules.txt > ./tools/rules/fakeip-filter/fakeip-filter.list | |
| mkdir -p ./tools/rules/fakeip-filter-lite/ | |
| curl -sSL "${domains_download_url}/fakeip-filter-lite.list" | awk '!/(^DOMAIN-REGEX,|ntp|stun|time)/' > ./tmp/temp-fakeip-filter-lite-rules.txt | |
| cat <<EOF >> ./tmp/temp-fakeip-filter-lite-rules.txt | |
| DOMAIN-KEYWORD,ntp | |
| DOMAIN-KEYWORD,stun | |
| DOMAIN-KEYWORD,time | |
| EOF | |
| sort --ignore-case ./tmp/temp-fakeip-filter-lite-rules.txt > ./tools/rules/fakeip-filter-lite/fakeip-filter-lite.list | |
| rm -rf ./tmp* | |
| mkdir -p ./tools/rules/applications/ | |
| curl -sSL "${domains_download_url}/applications.list" > "./tools/rules/applications/applications.list" | |
| for ip in "${ips[@]}"; do | |
| mkdir -p "./tools/rules/${ip}/" | |
| curl -sSL "${ips_download_url}/${ip}.list" > "./tools/rules/${ip}/${ip}.list" | |
| done | |
| - name: Generate `mihomo` rule-set (mrs) and move .list files | |
| run: | | |
| curl -L https://github.com/DustinWin/proxy-tools/releases/download/mihomo/mihomo-meta-linux-amd64v3.tar.gz | tar -zx -C ./tools/ | |
| mv -f ./tools/CrashCore ./tools/mihomo | |
| cd ./tools/ | |
| chmod +x ./mihomo | |
| list=($(ls ./domains/)) | |
| for ((i = 0; i < ${#list[@]}; i++)); do | |
| ./mihomo convert-ruleset domain text "./domains/${list[i]}/${list[i]}.list" ../mihomo-ruleset/${list[i]}.mrs | |
| mv -f "./domains/${list[i]}/${list[i]}.list" ../mihomo-ruleset/ | |
| done | |
| list=($(ls ./ips/)) | |
| for ((i = 0; i < ${#list[@]}; i++)); do | |
| ./mihomo convert-ruleset ipcidr text "./ips/${list[i]}/${list[i]}.list" ../mihomo-ruleset/${list[i]}.mrs | |
| mv -f "./ips/${list[i]}/${list[i]}.list" ../mihomo-ruleset/ | |
| done | |
| rm -rf ./mihomo* ./domains/ ./ips/ | |
| - name: Generate `sing-box` rule_set (srs) and move .json files | |
| run: | | |
| if [[ "${{ env.singbox_core_latest_version }}" == "${{ env.singbox_core_release_version }}" ]]; then | |
| # Setting `sing-box` core&ruleset environment variables | |
| echo "singbox_core_old_version=${{ env.singbox_core_compatible_version }}" >> $GITHUB_ENV | |
| echo "singbox_core_new_version=${{ env.singbox_core_latest_version }}" >> $GITHUB_ENV | |
| echo "singbox_ruleset_old_version=${{ env.singbox_rules_compatible_version }}" >> $GITHUB_ENV | |
| echo "singbox_ruleset_new_version=${{ env.singbox_rules_latest_version }}" >> $GITHUB_ENV | |
| echo "singbox_equal=true" >> $GITHUB_ENV | |
| # Generate `sing-box` rule_set (compatible) | |
| curl -L "https://github.com/SagerNet/sing-box/releases/download/v${{ env.singbox_core_compatible_version }}/sing-box-${{ env.singbox_core_compatible_version }}-linux-amd64.tar.gz" | tar -zx -C ./tools/ | |
| mv -f "./tools/sing-box-${{ env.singbox_core_compatible_version }}-linux-amd64/sing-box" ./tools/sing-box | |
| mkdir -p ./sing-box-ruleset-compatible/ | |
| cd ./tools/ | |
| sed -i 's/"version": 1/"version": ${{ env.singbox_rules_compatible_version }}/' ./convert.sh | |
| chmod +x ./convert.sh && ./convert.sh | |
| mv -f ./*.json ./*.srs ../sing-box-ruleset-compatible/ | |
| rm -rf ./sing-box* | |
| # Generate `sing-box` rule_set | |
| cd ../ | |
| curl -L "https://github.com/DustinWin/proxy-tools/releases/download/sing-box/sing-box-release-linux-amd64.tar.gz" | tar -zx -C ./tools/ | |
| mv -f "./tools/CrashCore" ./tools/sing-box | |
| mkdir -p ./sing-box-ruleset/ | |
| cd ./tools/ | |
| sed -i 's/"version": ${{ env.singbox_rules_compatible_version }}/"version": ${{ env.singbox_rules_latest_version }}/' ./convert.sh | |
| chmod +x ./convert.sh && ./convert.sh | |
| mv -f ./*.json ./*.srs ../sing-box-ruleset/ | |
| rm -rf ./sing-box* ./rules* | |
| else | |
| # Setting `sing-box` core&ruleset environment variables | |
| echo "singbox_core_old_version=${{ env.singbox_core_compatible_version }}" >> $GITHUB_ENV | |
| echo "singbox_core_new_version=${{ env.singbox_core_latest_version }}" >> $GITHUB_ENV | |
| echo "singbox_ruleset_old_version=${{ env.singbox_rules_compatible_version }}" >> $GITHUB_ENV | |
| echo "singbox_ruleset_new_version=${{ env.singbox_rules_latest_version }}" >> $GITHUB_ENV | |
| echo "singbox_equal=false" >> $GITHUB_ENV | |
| # Generate `sing-box` rule_set (compatible) | |
| wget "https://github.com/DustinWin/proxy-tools/releases/download/sing-box/sing-box-release-linux-amd64.tar.gz" -O - | tar -zxf - -C ./tools/ | |
| mv -f "./tools/CrashCore" ./tools/sing-box | |
| mkdir -p ./sing-box-ruleset-compatible/ | |
| cd ./tools/ | |
| sed -i 's/"version": 1/"version": ${{ env.singbox_rules_compatible_version }}/' ./convert.sh | |
| chmod +x ./convert.sh && ./convert.sh | |
| mv -f ./*.json ./*.srs ../sing-box-ruleset-compatible/ | |
| rm -rf ./sing-box* | |
| # Generate `sing-box` rule_set | |
| cd ../ | |
| curl -L "https://github.com/DustinWin/proxy-tools/releases/download/sing-box/sing-box-dev-linux-amd64.tar.gz" | tar -zx -C ./tools/ | |
| mv -f "./tools/CrashCore" ./tools/sing-box | |
| mkdir -p ./sing-box-ruleset/ | |
| cd ./tools/ | |
| sed -i 's/"version": ${{ env.singbox_rules_compatible_version }}/"version": ${{ env.singbox_rules_latest_version }}/' ./convert.sh | |
| chmod +x ./convert.sh && ./convert.sh | |
| mv -f ./*.json ./*.srs ../sing-box-ruleset/ | |
| rm -rf ./sing-box* ./rules* | |
| fi | |
| - name: Release and upload `mihomo-geodata` assets | |
| uses: svenstaro/upload-release-action@v2 | |
| with: | |
| repo_token: ${{ secrets.GITHUB_TOKEN }} | |
| release_name: mihomo-geodata | |
| tag: mihomo-geodata | |
| overwrite: true | |
| body: | | |
| [mihomo 内核](https://github.com/MetaCubeX/mihomo) geodata 文件 | |
| geodata 文件更新于 ${{ env.update_version }} | |
| file_glob: true | |
| file: ./mihomo-geodata/* | |
| - name: Commit and push `mihomo-geodata` branch | |
| run: | | |
| cd ./mihomo-geodata/ || exit 1 | |
| git init | |
| git config --local user.email "github-actions[bot]@users.noreply.github.com" | |
| git config --local user.name "github-actions[bot]" | |
| git checkout -b mihomo-geodata | |
| git add . && git commit -m "mihomo 内核 geodata 文件更新于 ${update_version}" | |
| git remote add origin "https://${{ github.actor }}:${{ secrets.GITHUB_TOKEN }}@github.com/${{ github.repository }}" | |
| git push -f origin mihomo-geodata | |
| - name: Release and upload `mihomo-ruleset` assets | |
| uses: svenstaro/upload-release-action@v2 | |
| with: | |
| repo_token: ${{ secrets.GITHUB_TOKEN }} | |
| release_name: mihomo-ruleset | |
| tag: mihomo-ruleset | |
| overwrite: true | |
| body: | | |
| [mihomo 内核](https://github.com/MetaCubeX/mihomo) rule-set 规则集文件 | |
| 规则集文件更新于 ${{ env.update_version }} | |
| file_glob: true | |
| file: ./mihomo-ruleset/* | |
| - name: Commit and push `mihomo-ruleset` branch | |
| run: | | |
| cd ./mihomo-ruleset/ || exit 1 | |
| git init | |
| git config --local user.email "github-actions[bot]@users.noreply.github.com" | |
| git config --local user.name "github-actions[bot]" | |
| git checkout -b mihomo-ruleset | |
| git add . && git commit -m "mihomo 内核 rule-set 规则集文件更新于 ${update_version}" | |
| git remote add origin "https://${{ github.actor }}:${{ secrets.GITHUB_TOKEN }}@github.com/${{ github.repository }}" | |
| git push -f origin mihomo-ruleset | |
| - name: Release and upload `sing-box-ruleset-compatible` assets | |
| uses: svenstaro/upload-release-action@v2 | |
| with: | |
| repo_token: ${{ secrets.GITHUB_TOKEN }} | |
| release_name: sing-box-ruleset-compatible | |
| tag: sing-box-ruleset-compatible | |
| overwrite: true | |
| body: | | |
| [sing-box 内核](https://github.com/SagerNet/sing-box) rule_set 规则集文件 | |
| 适用于 v${{ env.singbox_core_old_version }}-v${{ env.singbox_core_new_version }}(不包含)系列版本的 sing-box 内核(`"version": ${{ env.singbox_ruleset_old_version }}`) | |
| 规则集文件更新于 ${{ env.update_version }} | |
| file_glob: true | |
| file: ./sing-box-ruleset-compatible/* | |
| - name: Commit and push `sing-box-ruleset-compatible` branch | |
| run: | | |
| cd ./sing-box-ruleset-compatible/ || exit 1 | |
| git init | |
| git config --local user.email "github-actions[bot]@users.noreply.github.com" | |
| git config --local user.name "github-actions[bot]" | |
| git checkout -b sing-box-ruleset-compatible | |
| git add . && git commit -m "sing-box 内核 rule_set 规则集文件更新于 ${update_version}" | |
| git remote add origin "https://${{ github.actor }}:${{ secrets.GITHUB_TOKEN }}@github.com/${{ github.repository }}" | |
| git push -f origin sing-box-ruleset-compatible | |
| - name: Release and upload `sing-box-ruleset` assets | |
| if: ${{ env.singbox_equal == 'true' }} | |
| uses: svenstaro/upload-release-action@v2 | |
| with: | |
| repo_token: ${{ secrets.GITHUB_TOKEN }} | |
| release_name: sing-box-ruleset | |
| tag: sing-box-ruleset | |
| overwrite: true | |
| body: | | |
| [sing-box 内核](https://github.com/SagerNet/sing-box) rule_set 规则集文件 | |
| 适用于 v${{ env.singbox_core_new_version }}(包含)+ 系列版本的 sing-box 内核(`"version": ${{ env.singbox_ruleset_new_version }}`) | |
| 规则集文件更新于 ${{ env.update_version }} | |
| file_glob: true | |
| file: ./sing-box-ruleset/* | |
| - name: Release and upload `sing-box-ruleset` assets | |
| if: ${{ env.singbox_equal == 'false' }} | |
| uses: svenstaro/upload-release-action@v2 | |
| with: | |
| repo_token: ${{ secrets.GITHUB_TOKEN }} | |
| release_name: sing-box-ruleset | |
| tag: sing-box-ruleset | |
| overwrite: true | |
| body: | | |
| [sing-box 内核](https://github.com/SagerNet/sing-box) rule_set 规则集文件 | |
| 适用于 v${{ env.singbox_core_new_version }} 系列版本的 sing-box 内核(`"version": ${{ env.singbox_ruleset_new_version }}`) | |
| 规则集文件更新于 ${{ env.update_version }} | |
| file_glob: true | |
| file: ./sing-box-ruleset/* | |
| - name: Commit and push `sing-box-ruleset` branch | |
| run: | | |
| cd ./sing-box-ruleset/ || exit 1 | |
| git init | |
| git config --local user.email "github-actions[bot]@users.noreply.github.com" | |
| git config --local user.name "github-actions[bot]" | |
| git checkout -b sing-box-ruleset | |
| git add . && git commit -m "sing-box 内核 rule_set 规则集文件更新于 ${update_version}" | |
| git remote add origin "https://${{ github.actor }}:${{ secrets.GITHUB_TOKEN }}@github.com/${{ github.repository }}" | |
| git push -f origin sing-box-ruleset | |
| - name: Purge jsDelivr CDN | |
| run: | | |
| cd ./mihomo-geodata/ || exit 1 | |
| for file in $(ls); do | |
| curl -i "https://purge.jsdelivr.net/gh/${{ github.repository }}@mihomo-geodata/${file}" | |
| done | |
| cd ../mihomo-ruleset/ || exit 1 | |
| for file in $(ls); do | |
| curl -i "https://purge.jsdelivr.net/gh/${{ github.repository }}@mihomo-ruleset/${file}" | |
| done | |
| cd ../sing-box-ruleset-compatible/ || exit 1 | |
| for file in $(ls); do | |
| curl -i "https://purge.jsdelivr.net/gh/${{ github.repository }}@sing-box-ruleset-compatible/${file}" | |
| done | |
| cd ../sing-box-ruleset/ || exit 1 | |
| for file in $(ls); do | |
| curl -i "https://purge.jsdelivr.net/gh/${{ github.repository }}@sing-box-ruleset/${file}" | |
| done | |
| - name: Delete old workflow runs | |
| uses: Mattraks/delete-workflow-runs@v2 | |
| with: | |
| token: ${{ secrets.GITHUB_TOKEN }} | |
| repository: ${{ github.repository }} | |
| retain_days: 3 | |
| keep_minimum_runs: 1 |