| # scripts/batch_triage.sh | |
| # Usage: ./scripts/batch_triage.sh [repository] | |
| # Example: ./scripts/batch_triage.sh google-gemini/maintainers-gemini-cli | |
| set -e | |
| set -o pipefail | |
| REPO="${1:-google-gemini/gemini-cli}" | |
| WORKFLOW="gemini-automated-issue-triage.yml" | |
| echo "π Searching for open issues in '${REPO}' that need triage (missing 'area/' label)..." | |
| # Fetch open issues with number, title, and labels | |
| # We fetch up to 1000 issues. | |
| ISSUES_JSON=$(gh issue list --repo "${REPO}" --state open --limit 1000 --json number,title,labels) | |
| # Filter issues that DO NOT have a label starting with 'area/' | |
| TARGET_ISSUES=$(echo "${ISSUES_JSON}" | jq '[.[] | select(.labels | map(.name) | any(startswith("area/")) | not)]') | |
| # Avoid masking return value | |
| COUNT=$(jq '. | length' <<< "${TARGET_ISSUES}") | |
| if [[ "${COUNT}" -eq 0 ]]; then | |
| echo "β No issues found needing triage in '${REPO}'." | |
| exit 0 | |
| fi | |
| echo "π Found ${COUNT} issues to triage." | |
| # Loop through and trigger workflow | |
| echo "${TARGET_ISSUES}" | jq -r '.[] | "\(.number)|\(.title)"' | while IFS="|" read -r number title; do | |
| echo "βΆοΈ Triggering triage for #${number}: ${title}" | |
| # Trigger the workflow dispatch event | |
| gh workflow run "${WORKFLOW}" --repo "${REPO}" -f issue_number="${number}" | |
| # Sleep briefly to be nice to the API | |
| sleep 1 | |
| done | |
| echo "π All triage workflows triggered!" |