Skip to content

feat: 実績「It Works!」を実装 #1169

feat: 実績「It Works!」を実装

feat: 実績「It Works!」を実装 #1169

# https://github.com/google-github-actions/run-gemini-cli/blob/main/examples/workflows/gemini-dispatch/gemini-dispatch.yml
name: '🔀 Gemini Dispatch'
on:
pull_request_review_comment:
types:
- 'created'
pull_request_review:
types:
- 'submitted'
pull_request:
types:
- 'opened'
- 'ready_for_review'
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.GH_APP_ID }}
uses: 'actions/create-github-app-token@29824e69f54612133e76f7eaac726eef6c875baf' # ratchet:actions/create-github-app-token@v2
with:
app-id: '${{ vars.GH_APP_ID }}'
private-key: '${{ secrets.GH_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 (['pull_request.opened', 'pull_request.ready_for_review'].includes(eventType)) {
core.setOutput('command', 'review');
} else if (['issues.opened', 'issues.reopened'].includes(eventType)) {
// core.setOutput('command', 'triage');
core.setOutput('command', 'fallthrough');
} 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');
core.setOutput('command', 'fallthrough');
} else if (request.startsWith("@gemini-cli")) {
// const additionalContext = request.replace(/^@gemini-cli/, '').trim();
// core.setOutput('command', 'invoke');
// core.setOutput('additional_context', additionalContext);
core.setOutput('command', 'fallthrough');
} 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: |-
えへ~
ありがとう!
レビューさせてもらうにゃ!
[🔍️🔍️🔍️️](${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }})
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 }}'
issue_title: '${{ github.event.pull_request.title || github.event.issue.title }}'
issue_body: '${{ github.event.pull_request.body || github.event.issue.body }}'
pull_request_number: '${{ github.event.pull_request.number || github.event.issue.number }}'
repository: '${{ github.repository }}'
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'
# 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.GH_APP_ID }}
uses: 'actions/create-github-app-token@29824e69f54612133e76f7eaac726eef6c875baf' # ratchet:actions/create-github-app-token@v2
with:
app-id: '${{ vars.GH_APP_ID }}'
private-key: '${{ secrets.GH_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}"