name: MetaCubeX规则下载

on:
  #schedule:
   # - cron: '47 1 * * *'
  workflow_dispatch:

jobs:
  sync:
    runs-on: ubuntu-latest
    permissions:
      contents: write

    steps:
      - name: Checkout destination repository
        uses: actions/checkout@v4
        with:
          path: dest
          fetch-depth: 0 # 获取完整历史以支持多分支切换

      - name: Clone source repo (meta branch)
        run: |
          # 检出 meta 分支以获取 mihomo 规则
          git clone --depth 1 --filter=blob:none --sparse https://github.com/MetaCubeX/meta-rules-dat.git -b meta source-meta
          cd source-meta
          git sparse-checkout set geo/geosite geo/geoip

      - name: Clone source repo (sing branch)
        run: |
          # 检出 sing 分支以获取 sing-box 规则
          git clone --depth 1 --filter=blob:none --sparse https://github.com/MetaCubeX/meta-rules-dat.git -b sing source-sing
          cd source-sing
          git sparse-checkout set geo/geosite geo/geoip

      - name: Organize Files to Temp Directory
        run: |
          # 创建临时存放目录
          mkdir -p /tmp/MetaCubeX/mihomo/geosite
          mkdir -p /tmp/MetaCubeX/mihomo/geoip
          mkdir -p /tmp/MetaCubeX/sing-box/geosite
          mkdir -p /tmp/MetaCubeX/sing-box/geoip

          # 1️⃣ 复制 Mihomo 相关 (mrs, yaml, json)
          cp source-meta/geo/geosite/*.{mrs,yaml,json} /tmp/MetaCubeX/mihomo/geosite/ 2>/dev/null || true
          cp source-meta/geo/geoip/*.{mrs,yaml,json} /tmp/MetaCubeX/mihomo/geoip/ 2>/dev/null || true

          # 2️⃣ 复制 Sing-box 相关 (srs, json)
          cp source-sing/geo/geosite/*.{srs,json} /tmp/MetaCubeX/sing-box/geosite/ 2>/dev/null || true
          cp source-sing/geo/geoip/*.{srs,json} /tmp/MetaCubeX/sing-box/geoip/ 2>/dev/null || true

      - name: Upload to laws branch (YAML & JSON only)
        run: |
          cd dest
          git config user.email "github-actions[bot]@users.noreply.github.com"
          git config user.name "github-actions[bot]"

          # 切换到 laws 分支
          git fetch origin laws || true
          git checkout laws || git checkout -b laws

          # 同步文件并清理二进制
          rm -rf MetaCubeX/
          cp -r /tmp/MetaCubeX/ .
          find MetaCubeX/ -type f \( -name "*.mrs" -o -name "*.srs" \) -delete

          git add MetaCubeX/
          if [ -n "$(git status --porcelain)" ]; then
            git commit -m "Auto-update GeoData (Source only): $(date +'%Y-%m-%d %H:%M:%S')"
            git push origin laws
          else
            echo "No changes for laws branch."
          fi

      - name: Upload to master branch (MRS & SRS only)
        run: |
          cd dest
          # 切换回 master 分支
          git fetch origin master || true
          git checkout master || git checkout -b master

          # 同步文件并清理文本
          rm -rf MetaCubeX/
          cp -r /tmp/MetaCubeX/ .
          find MetaCubeX/ -type f \( -name "*.yaml" -o -name "*.json" \) -delete

          git add MetaCubeX/
          if [ -n "$(git status --porcelain)" ]; then
            git commit -m "Auto-update GeoData (Binary only): $(date +'%Y-%m-%d %H:%M:%S')"
            git push origin master
          else
            echo "No changes for master branch."
          fi
