name: Sync and Compile Rules

on:
  schedule:
    - cron: '0 18 * * *'  # 每天北京时间02:00执行
  workflow_dispatch:

permissions:
  contents: write

jobs:
  netease_music_rules:
    runs-on: ubuntu-latest

    steps:
    - name: Checkout the repository
      uses: actions/checkout@v4
      with:
        token: ${{ secrets.GITHUB_TOKEN }}

    - name: Set up Git user
      run: |
        git config user.name "github-actions[bot]"
        git config user.email "github-actions[bot]@users.noreply.github.com"

    - 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: Fetch Rules
      run: |
        mkdir -p rules/Domain rules/IP  # 确保目录存在

        # 下载 规则文件
        curl -sL "https://raw.githubusercontent.com/aihdde/Rules/refs/heads/main/Direct.list" -o rules/Direct.list
        curl -sL "https://raw.githubusercontent.com/blackmatrix7/ios_rule_script/master/rule/Clash/Direct/Direct.list" -o rules/blackmatrix7_direct.list
        curl -sL "https://raw.githubusercontent.com/aihdde/Rules/refs/heads/main/ProxyLite.list" -o rules/ProxyLite.list
        curl -sL "https://raw.githubusercontent.com/blackmatrix7/ios_rule_script/refs/heads/master/rule/Clash/AppleTV/AppleTV.list" -o rules/AppleTV.list
        curl -sL "https://raw.githubusercontent.com/Aethersailor/Custom_OpenClash_Rules/main/rule/Steam_CDN.list" -o rules/Steam_CDN.list
        curl -sL "https://raw.githubusercontent.com/blackmatrix7/ios_rule_script/master/rule/Clash/UBI/UBI.list" -o rules/UBI.list
        curl -sL "https://raw.githubusercontent.com/blackmatrix7/ios_rule_script/master/rule/Clash/NetEaseMusic/NetEaseMusic.list" -o rules/NetEaseMusic.list
        curl -sL "https://raw.githubusercontent.com/Aethersailor/Custom_OpenClash_Rules/refs/heads/main/rule/IPTVMainland_Domain.list" -o rules/IPTVMainland_Domain.list
        curl -sL "https://raw.githubusercontent.com/blackmatrix7/ios_rule_script/master/rule/Clash/PrivateTracker/PrivateTracker.list" -o rules/PrivateTracker.list
        curl -sL "https://raw.githubusercontent.com/blackmatrix7/ios_rule_script/refs/heads/master/rule/Clash/AmazonIP/AmazonIP.list" -o rules/AmazonIP.list
        
    - name: Separate domain and ip rules
      run: |
        # 提取域名规则并保存到 *-domain.list
        grep -E '^(DOMAIN-SUFFIX|DOMAIN)' rules/Direct.list > rules/Domain/Direct-domain.list
        grep -E '^(DOMAIN-SUFFIX|DOMAIN)' rules/blackmatrix7_direct.list >> rules/Domain/Direct-domain.list        
        grep -E '^(DOMAIN-SUFFIX|DOMAIN)' rules/ProxyLite.list > rules/Domain/ProxyLite-domain.list
        grep -E '^(DOMAIN-SUFFIX|DOMAIN)' rules/AppleTV.list > rules/Domain/AppleTV-domain.list
        grep -E '^(DOMAIN-SUFFIX|DOMAIN)' rules/Steam_CDN.list > rules/Domain/Steam_CDN-domain.list
        grep -E '^(DOMAIN-SUFFIX|DOMAIN)' rules/UBI.list > rules/Domain/UBI-domain.list
        grep -E '^(DOMAIN-SUFFIX|DOMAIN)' rules/NetEaseMusic.list > rules/Domain/NetEaseMusic-domain.list
        grep -E '^(DOMAIN-SUFFIX|DOMAIN)' rules/IPTVMainland_Domain.list > rules/Domain/IPTVMainland-domain.list
        grep -E '^(DOMAIN-SUFFIX|DOMAIN)' rules/PrivateTracker.list > rules/Domain/PrivateTracker-domain.list
        
        # 提取 IP 规则并保存到 *-ip.list (去掉 no-resolve)
        grep '^IP-CIDR' rules/Direct.list | sed 's/,no-resolve//' > rules/IP/Direct-ip.list
        grep '^IP-CIDR' rules/blackmatrix7_direct.list | sed 's/,no-resolve//' >> rules/IP/Direct-ip.list
        grep '^IP-CIDR' rules/ProxyLite.list | sed 's/,no-resolve//' > rules/IP/ProxyLite-ip.list
        grep '^IP-CIDR' rules/AppleTV.list | sed 's/,no-resolve//' > rules/IP/AppleTV-ip.list
        grep '^IP-CIDR' rules/Steam_CDN.list | sed 's/,no-resolve//' > rules/IP/Steam_CDN-ip.list
        grep '^IP-CIDR' rules/UBI.list | sed 's/,no-resolve//' > rules/IP/UBI-ip.list
        grep '^IP-CIDR' rules/NetEaseMusic.list | sed 's/,no-resolve//' > rules/IP/NetEaseMusic-ip.list
        #grep '^IP-CIDR' rules/IPTVMainland_Domain.list | sed 's/,no-resolve//' > rules/IP/IPTVMainland_Domain-ip.list
        grep '^IP-CIDR' rules/PrivateTracker.list | sed 's/,no-resolve//' > rules/IP/PrivateTracker-ip.list
        grep '^IP-CIDR' rules/AmazonIP.list | sed 's/,no-resolve//' > rules/IP/Amazon-ip.list

    - name: Convert domain rules to YAML
      run: |
        # 将 domain 规则转换为 YAML 格式
        chmod +x ./domain-yaml.sh
        ./domain-yaml.sh

    - name: Convert IP rules to YAML
      run: |
        # 将 IP 规则转换为 YAML 格式
        chmod +x ./ip-yaml.sh
        ./ip-yaml.sh

    - name: Convert domain rules to MRS
      run: |
        # 使用 mihomo 转换为 MRS 格式
        cd rules/Domain
        for yaml_file in *.yaml; do
            base_name="${yaml_file%.yaml}"
            mihomo convert-ruleset domain yaml "$yaml_file" "${base_name}.mrs"
            echo "Converted $yaml_file to ${base_name}.mrs"
        done

    - name: Convert IP rules to MRS
      run: |
        # 使用 mihomo 转换为 MRS 格式
        cd rules/ip
        for yaml_file in *.yaml; do
            base_name="${yaml_file%.yaml}"
            mihomo convert-ruleset domain yaml "$yaml_file" "${base_name}.mrs"
            echo "Converted $yaml_file to ${base_name}.mrs"

    - name: Clean up temporary files
      run: |
        # 删除临时文件，但保留 NetEaseMusic-domain.yaml 和 NetEaseMusic-ip.yaml
        #rm -f rules/NetEaseMusic.list rules/Domain/NetEaseMusic-domain.list rules/IP/NetEaseMusic-ip.list

    - name: Commit and Push Changes
      run: |
        git add .
        git diff-index --quiet HEAD -- || (git commit -m "Updated rules -> domain and ip rules" && git push)
