name: Update Clash Rules

on:
  push:
    branches: [main]
    paths-ignore:
      - '*.md'
      - '.gitignore'
      - 'LICENSE'
  schedule:
    # 每日 UTC 12:00（北京时间 20:00）
    - cron: '0 12 * * *'
  workflow_dispatch:
    # 允许手动触发

permissions:
  contents: write

jobs:
  build:
    runs-on: ubuntu-latest

    steps:
      - name: Checkout main
        uses: actions/checkout@v4
        with:
          ref: main
          fetch-depth: 0
          fetch-tags: true

      - name: Setup Node
        uses: actions/setup-node@v4
        with:
          node-version: '24'

      - name: Setup Go
        uses: actions/setup-go@v5
        with:
          go-version: '1.22'

      - name: Build
        run: go build -o builder ./cmd/builder

      - name: Run builder
        run: ./builder

      - name: Get date
        id: date
        run: |
          echo "tag=$(date -u '+%Y%m%d%H%M%S%3N')" >> $GITHUB_OUTPUT

      - name: Push to rules branch
        run: |
          git config --local user.email "github-actions[bot]@users.noreply.github.com"
          git config --local user.name "github-actions[bot]"
          git checkout --orphan rules
          git rm -rf .
          cp rules/*.yaml . 2>/dev/null || true
          cp geoip/*.mmdb . 2>/dev/null || true
          git add -f *.yaml *.mmdb
          git diff --staged --quiet || git commit -m "chore: 更新规则文件 [$(date -u '+%Y-%m-%d %H:%M UTC')]"
          git push origin rules --force

      - name: Generate release notes
        id: notes
        run: |
          # 获取上一个 rules- 开头的 tag
          PREV_TAG=$(git tag -l "rules-*" --sort=-version:refname | head -n 2 | tail -n 1)
          if [ -z "$PREV_TAG" ]; then
            # 首次发布，显示最近的 main 分支提交
            NOTES=$(git log main --pretty=format:"- %s by @%an" -10)
          else
            # 从 tag 中提取时间戳作为 --since 过滤
            # tag 格式: rules-YYYYMMDDHHMMSSMMM
            TAG_DATE=${PREV_TAG#rules-}
            YEAR=${TAG_DATE:0:4}
            MONTH=${TAG_DATE:4:2}
            DAY=${TAG_DATE:6:2}
            HOUR=${TAG_DATE:8:2}
            MIN=${TAG_DATE:10:2}
            SEC=${TAG_DATE:12:2}
            SINCE_DATE="${YEAR}-${MONTH}-${DAY}T${HOUR}:${MIN}:${SEC}Z"
            NOTES=$(git log main --pretty=format:"- %s by @%an" --since="$SINCE_DATE" 2>/dev/null || echo "- 规则更新")
          fi
          echo "body<<EOF" >> $GITHUB_OUTPUT
          echo "$NOTES" >> $GITHUB_OUTPUT
          echo "EOF" >> $GITHUB_OUTPUT

      - name: Create Release
        uses: softprops/action-gh-release@v2
        with:
          tag_name: rules-${{ steps.date.outputs.tag }}
          name: Clash Rules ${{ steps.date.outputs.tag }}
          body: ${{ steps.notes.outputs.body }}
          files: |
            rules/*.yaml
            geoip/*.mmdb
          draft: false
          prerelease: false
