[38;5;238m─────┬────────────────────────────────────────────────────… #90
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
| # SPDX-FileCopyrightText: 2025 Google LLC | ||
|
Check failure on line 1 in .github/workflows/gemini-dispatch.yml
|
||
| # | ||
| # SPDX-License-Identifier: Apache-2.0 | ||
| name: "🔀 Gemini Dispatch" | ||
| on: | ||
| pull_request_review_comment: | ||
| types: | ||
| - "created" | ||
| pull_request_review: | ||
| types: | ||
| - "submitted" | ||
| pull_request: | ||
| types: | ||
| - "opened" | ||
| issues: | ||
| types: | ||
| - "opened" | ||
| - "reopened" | ||
| issue_comment: | ||
| types: | ||
| - "created" | ||
| defaults: | ||
| run: | ||
| shell: "bash" | ||
| jobs: | ||
| debugger: | ||
| if: |- | ||
| ${{ fromJSON(vars.GEMINI_DEBUG || vars.ACTIONS_STEP_DEBUG || false) }} | ||
| runs-on: "ubuntu-latest" | ||
| permissions: | ||
| contents: "read" | ||
| steps: | ||
| - name: "Print context for debugging" | ||
| env: | ||
| DEBUG_event_name: "${{ github.event_name }}" | ||
| DEBUG_event__action: "${{ github.event.action }}" | ||
| DEBUG_event__comment__author_association: "${{ github.event.comment.author_association }}" | ||
| DEBUG_event__issue__author_association: "${{ github.event.issue.author_association }}" | ||
| DEBUG_event__pull_request__author_association: "${{ github.event.pull_request.author_association }}" | ||
| DEBUG_event__review__author_association: "${{ github.event.review.author_association }}" | ||
| DEBUG_event: "${{ toJSON(github.event) }}" | ||
| run: |- | ||
| env | grep '^DEBUG_' | ||
| dispatch: | ||
| # For PRs: only if not from a fork | ||
| # For issues: only on open/reopen | ||
| # For comments: only if user types @gemini-cli and is OWNER/MEMBER/COLLABORATOR | ||
| if: |- | ||
| ( | ||
| github.event_name == 'pull_request' && | ||
| github.event.pull_request.head.repo.fork == false | ||
| ) || ( | ||
| github.event_name == 'issues' && | ||
| contains(fromJSON('["opened", "reopened"]'), github.event.action) | ||
| ) || ( | ||
| github.event.sender.type == 'User' && | ||
| startsWith(github.event.comment.body || github.event.review.body || github.event.issue.body, '@gemini-cli') && | ||
| contains(fromJSON('["OWNER", "MEMBER", "COLLABORATOR"]'), github.event.comment.author_association || github.event.review.author_association || github.event.issue.author_association) | ||
| ) | ||
| runs-on: "ubuntu-latest" | ||
| permissions: | ||
| contents: "read" | ||
| issues: "write" | ||
| pull-requests: "write" | ||
| outputs: | ||
| command: "${{ steps.extract_command.outputs.command }}" | ||
| request: "${{ steps.extract_command.outputs.request }}" | ||
| additional_context: "${{ steps.extract_command.outputs.additional_context }}" | ||
| issue_number: "${{ github.event.pull_request.number || github.event.issue.number }}" | ||
| steps: | ||
| - name: "Mint identity token" | ||
| id: "mint_identity_token" | ||
| if: |- | ||
| ${{ vars.APP_ID }} | ||
| uses: "actions/create-github-app-token@a8d616148505b5069dccd32f177bb87d7f39123b" # ratchet:actions/create-github-app-token@v2 | ||
| with: | ||
| app-id: "${{ vars.APP_ID }}" | ||
| private-key: "${{ secrets.APP_PRIVATE_KEY }}" | ||
| permission-contents: "read" | ||
| permission-issues: "write" | ||
| permission-pull-requests: "write" | ||
| - name: "Extract command" | ||
| id: "extract_command" | ||
| uses: "actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea" # ratchet:actions/github-script@v7 | ||
| env: | ||
| EVENT_TYPE: "${{ github.event_name }}.${{ github.event.action }}" | ||
| REQUEST: "${{ github.event.comment.body || github.event.review.body || github.event.issue.body }}" | ||
| with: | ||
| script: | | ||
| const eventType = process.env.EVENT_TYPE; | ||
| const request = process.env.REQUEST; | ||
| core.setOutput('request', request); | ||
| if (eventType === 'pull_request.opened') { | ||
| core.setOutput('command', 'review'); | ||
| } else if (['issues.opened', 'issues.reopened'].includes(eventType)) { | ||
| core.setOutput('command', 'triage'); | ||
| } else if (request.startsWith("@gemini-cli /review")) { | ||
| core.setOutput('command', 'review'); | ||
| const additionalContext = request.replace(/^@gemini-cli \/review/, '').trim(); | ||
| core.setOutput('additional_context', additionalContext); | ||
| } else if (request.startsWith("@gemini-cli /triage")) { | ||
| core.setOutput('command', 'triage'); | ||
| } else if (request.startsWith("@gemini-cli")) { | ||
| const additionalContext = request.replace(/^@gemini-cli/, '').trim(); | ||
| core.setOutput('command', 'invoke'); | ||
| core.setOutput('additional_context', additionalContext); | ||
| } else { | ||
| core.setOutput('command', 'fallthrough'); | ||
| } | ||
| - name: "Acknowledge request" | ||
| env: | ||
| GITHUB_TOKEN: "${{ steps.mint_identity_token.outputs.token || secrets.GITHUB_TOKEN || github.token }}" | ||
| ISSUE_NUMBER: "${{ github.event.pull_request.number || github.event.issue.number }}" | ||
| MESSAGE: |- | ||
| 🤖 Hi @${{ github.actor }}, I've received your request, and I'm working on it now! You can track my progress [in the logs](${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}) for more details. | ||
| REPOSITORY: "${{ github.repository }}" | ||
| run: |- | ||
| gh issue comment "${ISSUE_NUMBER}" \ | ||
| --body "${MESSAGE}" \ | ||
| --repo "${REPOSITORY}" | ||
| review: | ||
| needs: "dispatch" | ||
| if: |- | ||
| ${{ needs.dispatch.outputs.command == 'review' && secrets.GEMINI_API_KEY != '' }} | ||
| uses: "./.github/workflows/gemini-review.yml" | ||
| permissions: | ||
| contents: "read" | ||
| id-token: "write" | ||
| issues: "write" | ||
| pull-requests: "write" | ||
| with: | ||
| additional_context: "${{ needs.dispatch.outputs.additional_context }}" | ||
| secrets: "inherit" | ||
| triage: | ||
| needs: "dispatch" | ||
| if: |- | ||
| ${{ needs.dispatch.outputs.command == 'triage' && secrets.GEMINI_API_KEY != '' }} | ||
| uses: "./.github/workflows/gemini-triage.yml" | ||
| permissions: | ||
| contents: "read" | ||
| id-token: "write" | ||
| issues: "write" | ||
| pull-requests: "write" | ||
| with: | ||
| additional_context: "${{ needs.dispatch.outputs.additional_context }}" | ||
| secrets: "inherit" | ||
| invoke: | ||
| needs: "dispatch" | ||
| if: |- | ||
| ${{ needs.dispatch.outputs.command == 'invoke' && secrets.GEMINI_API_KEY != '' }} | ||
| uses: "./.github/workflows/gemini-invoke.yml" | ||
| permissions: | ||
| contents: "read" | ||
| id-token: "write" | ||
| issues: "write" | ||
| pull-requests: "write" | ||
| with: | ||
| additional_context: "${{ needs.dispatch.outputs.additional_context }}" | ||
| secrets: "inherit" | ||
| fallthrough: | ||
| needs: | ||
| - "dispatch" | ||
| - "review" | ||
| - "triage" | ||
| - "invoke" | ||
| if: |- | ||
| ${{ always() && !cancelled() && (failure() || needs.dispatch.outputs.command == 'fallthrough') }} | ||
| runs-on: "ubuntu-latest" | ||
| permissions: | ||
| contents: "read" | ||
| issues: "write" | ||
| pull-requests: "write" | ||
| steps: | ||
| - name: "Mint identity token" | ||
| id: "mint_identity_token" | ||
| if: |- | ||
| ${{ vars.APP_ID }} | ||
| uses: "actions/create-github-app-token@a8d616148505b5069dccd32f177bb87d7f39123b" # ratchet:actions/create-github-app-token@v2 | ||
| with: | ||
| app-id: "${{ vars.APP_ID }}" | ||
| private-key: "${{ secrets.APP_PRIVATE_KEY }}" | ||
| permission-contents: "read" | ||
| permission-issues: "write" | ||
| permission-pull-requests: "write" | ||
| - name: "Send failure comment" | ||
| env: | ||
| GITHUB_TOKEN: "${{ steps.mint_identity_token.outputs.token || secrets.GITHUB_TOKEN || github.token }}" | ||
| ISSUE_NUMBER: "${{ github.event.pull_request.number || github.event.issue.number }}" | ||
| MESSAGE: |- | ||
| 🤖 I'm sorry @${{ github.actor }}, but I was unable to process your request. Please [see the logs](${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}) for more details. | ||
| REPOSITORY: "${{ github.repository }}" | ||
| run: |- | ||
| gh issue comment "${ISSUE_NUMBER}" \ | ||
| --body "${MESSAGE}" \ | ||
| --repo "${REPOSITORY}" | ||