@@ -17,32 +17,88 @@ jobs:
1717 check :
1818 runs-on : ubuntu-latest
1919 outputs :
20- issue : ${{ steps.pick.outputs.issue }}
20+ matrix : ${{ steps.pick.outputs.matrix }}
2121 steps :
2222 - id : pick
2323 env :
2424 GH_TOKEN : ${{ secrets.GH_PAT }}
2525 ISSUE_NUMBER : ${{ inputs.issue_number || '' }}
2626 run : |
2727 REPO="${{ github.repository }}"
28+
29+ # Collect issues
2830 if [ -n "$ISSUE_NUMBER" ]; then
29- ISSUE =$(gh issue view "$ISSUE_NUMBER" --repo "$REPO" --json number,title,body -q '. ')
31+ ISSUES =$(gh issue view "$ISSUE_NUMBER" --repo "$REPO" --json number,title,body -q '[.] ')
3032 else
31- ISSUE =$(gh issue list --repo "$REPO" --label auto-fix --state open --limit 1 --json number,title,body -q '.[0] // empty' )
33+ ISSUES =$(gh issue list --repo "$REPO" --label auto-fix --state open --limit 10 --json number,title,body)
3234 fi
33- if [ -z "$ISSUE" ]; then
35+
36+ COUNT=$(echo "$ISSUES" | jq 'length')
37+ if [ "$COUNT" -eq 0 ]; then
3438 echo "No auto-fix issues"
35- echo "issue=" >> "$GITHUB_OUTPUT"
36- else
37- NUM=$(echo "$ISSUE" | jq -r '.number')
39+ echo "matrix=" >> "$GITHUB_OUTPUT"
40+ exit 0
41+ fi
42+
43+ # Collect open auto-fix PRs and their changed file paths
44+ OPEN_PRS=$(gh pr list --repo "$REPO" --label auto-fix --state open \
45+ --json number,headRefName,files --jq '[.[] | {number, branch: .headRefName, paths: [.files[].path]}]' 2>/dev/null || echo '[]')
46+
47+ # For each issue, check if an existing PR touches the same doc category
48+ # Category = first two path segments under docs/en/ (e.g. docs/en/sql-reference, docs/en/guides)
49+ MATRIX="[]"
50+ for row in $(echo "$ISSUES" | jq -c '.[]'); do
51+ NUM=$(echo "$row" | jq -r '.number')
52+ TITLE=$(echo "$row" | jq -r '.title')
53+ BODY=$(echo "$row" | jq -r '.body')
54+
55+ # Guess the doc category from issue title/body keywords
56+ CATEGORY=""
57+ TEXT=$(echo "${TITLE} ${BODY}" | tr '[:upper:]' '[:lower:]')
58+ if echo "$TEXT" | grep -qE 'function|func[ _-]'; then
59+ CATEGORY="docs/en/sql-reference/20-sql-functions"
60+ elif echo "$TEXT" | grep -qE 'command|statement|ddl|dml|dql'; then
61+ CATEGORY="docs/en/sql-reference/10-sql-commands"
62+ elif echo "$TEXT" | grep -qE 'sql.reference|sql-reference'; then
63+ CATEGORY="docs/en/sql-reference"
64+ elif echo "$TEXT" | grep -qE 'guide|load|unload|stage|warehouse|security'; then
65+ CATEGORY="docs/en/guides"
66+ fi
67+
68+ # Find existing PR with overlapping category
69+ EXISTING_BRANCH=""
70+ EXISTING_PR=""
71+ if [ -n "$CATEGORY" ]; then
72+ MATCH=$(echo "$OPEN_PRS" | jq -c --arg cat "$CATEGORY" \
73+ '[.[] | select(.paths[] | startswith($cat))] | first // empty')
74+ if [ -n "$MATCH" ] && [ "$MATCH" != "null" ]; then
75+ EXISTING_BRANCH=$(echo "$MATCH" | jq -r '.branch')
76+ EXISTING_PR=$(echo "$MATCH" | jq -r '.number')
77+ echo "Issue #${NUM} matches existing PR #${EXISTING_PR} (branch: ${EXISTING_BRANCH})"
78+ fi
79+ fi
80+
81+ # Mark in-progress
3882 gh issue edit "$NUM" --repo "$REPO" --add-label auto-fix-in-progress --remove-label auto-fix
39- echo "issue=$(echo "$ISSUE" | jq -c .)" >> "$GITHUB_OUTPUT"
83+
84+ ENTRY=$(echo "$row" | jq -c --arg eb "$EXISTING_BRANCH" --arg ep "$EXISTING_PR" \
85+ '. + {existing_branch: $eb, existing_pr: $ep}')
86+ MATRIX=$(echo "$MATRIX" | jq -c --argjson e "$ENTRY" '. + [$e]')
87+ done
88+
89+ if [ "$(echo "$MATRIX" | jq 'length')" -eq 0 ]; then
90+ echo "matrix=" >> "$GITHUB_OUTPUT"
91+ else
92+ echo "matrix=$(echo "$MATRIX" | jq -c '{include: .}')" >> "$GITHUB_OUTPUT"
4093 fi
4194
4295 fix :
4396 needs : check
44- if : needs.check.outputs.issue != ''
97+ if : needs.check.outputs.matrix != ''
4598 runs-on : ubuntu-latest
99+ strategy :
100+ matrix : ${{ fromJson(needs.check.outputs.matrix) }}
101+ max-parallel : 1
46102 steps :
47103 - uses : actions/checkout@v4
48104
98154 bash .github/scripts/auto-fix.sh
99155 env :
100156 REPO : ${{ github.repository }}
101- ISSUE_JSON : ${{ needs.check.outputs.issue }}
157+ ISSUE_JSON : ${{ toJson(matrix) }}
158+ EXISTING_BRANCH : ${{ matrix.existing_branch }}
159+ EXISTING_PR : ${{ matrix.existing_pr }}
102160 GENERATOR_MODEL : ' '
103161 REVIEWER_MODEL : gpt-5.4
104162 EVOT_ID : auto-fix-ci
0 commit comments