🔀 Gemini Dispatch #5
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 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@29824e69f54612133e76f7eaac726eef6c875baf' # 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@ed597411d8f924073f98dfc5c65a23a2325f34cd' # ratchet:actions/github-script@v8 | ||
| 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 /fix")) { | ||
| core.setOutput('command', 'fix'); | ||
| } 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' }} | ||
| 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' }} | ||
| 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' | ||
| fix: | ||
| needs: 'dispatch' | ||
| if: |- | ||
| ${{ needs.dispatch.outputs.command == 'fix' }} | ||
| uses: './.github/workflows/gemini-issue-fixer.yml' | ||
|
Check failure on line 160 in .github/workflows/gemini-dispatch.yml
|
||
| permissions: | ||
| contents: 'write' | ||
| id-token: 'write' | ||
| issues: 'write' | ||
| pull-requests: 'write' | ||
| secrets: 'inherit' | ||
| invoke: | ||
| needs: 'dispatch' | ||
| if: |- | ||
| ${{ needs.dispatch.outputs.command == 'invoke' }} | ||
| 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@29824e69f54612133e76f7eaac726eef6c875baf' # 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}" | ||