Gemini Scheduled Issue Triage #2
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: Gemini Scheduled Issue Triage | |
on: | |
schedule: | |
- cron: '0 * * * *' # Runs every hour | |
workflow_dispatch: {} | |
jobs: | |
triage-issues: | |
timeout-minutes: 10 | |
runs-on: ubuntu-latest | |
permissions: | |
contents: read | |
id-token: write | |
issues: write | |
steps: | |
- name: Generate GitHub App Token | |
id: generate_token | |
uses: actions/create-github-app-token@v1 | |
with: | |
app-id: ${{ secrets.APP_ID }} | |
private-key: ${{ secrets.PRIVATE_KEY }} | |
- name: Checkout repository | |
uses: actions/checkout@v4 | |
with: | |
token: ${{ steps.generate_token.outputs.token }} | |
- name: Find untriaged issues | |
id: find_issues | |
env: | |
GITHUB_TOKEN: ${{ steps.generate_token.outputs.token }} | |
run: | | |
NO_LABEL_ISSUES=$(gh issue list --repo ${{ github.repository }} --search "is:open is:issue no:label" --json number,title,body) | |
NEEDS_TRIAGE_ISSUES=$(gh issue list --repo ${{ github.repository }} --search "is:open is:issue label:\"status/needs-triage\"" --json number,title,body) | |
ISSUES=$(echo "$NO_LABEL_ISSUES" "$NEEDS_TRIAGE_ISSUES" | jq -c -s 'add | unique_by(.number)') | |
echo "issues_to_triage=$ISSUES" >> "$GITHUB_OUTPUT" | |
- name: Run Gemini Issue Triage | |
if: steps.find_issues.outputs.issues_to_triage != '[]' | |
uses: google-gemini/gemini-cli-action@111dadaecabd309baba60f56f2b520c52c0f9a47 | |
env: | |
GITHUB_TOKEN: ${{ steps.generate_token.outputs.token }} | |
ISSUES_TO_TRIAGE: ${{ steps.find_issues.outputs.issues_to_triage }} | |
REPOSITORY: ${{ github.repository }} | |
with: | |
version: 0.1.8-rc.0 | |
GEMINI_API_KEY: ${{ secrets.GEMINI_API_KEY }} | |
OTLP_GCP_WIF_PROVIDER: ${{ secrets.OTLP_GCP_WIF_PROVIDER }} | |
OTLP_GCP_SERVICE_ACCOUNT: ${{ secrets.OTLP_GCP_SERVICE_ACCOUNT }} | |
OTLP_GOOGLE_CLOUD_PROJECT: ${{ secrets.OTLP_GOOGLE_CLOUD_PROJECT }} | |
settings_json: | | |
{ | |
"coreTools": [ | |
"run_shell_command(gh label list)", | |
"run_shell_command(gh issue edit)", | |
"run_shell_command(gh issue list)" | |
], | |
} | |
prompt: | | |
You are an issue triage assistant. Analyze issues and apply appropriate labels. | |
Steps: | |
1. Run: `gh label list --limit 100` | |
2. Check environment variable: $ISSUES_TO_TRIAGE (JSON array of issues) | |
3. For each issue, apply labels: `gh issue edit ISSUE_NUMBER --add-label "label1,label2"` | |
Guidelines: | |
- Only use existing repository labels | |
- Do not add comments | |
- Triage each issue independently | |
- Focus on: kind/*, area/*, priority/* labels |