summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.github/workflows/gemini-automated-issue-dedup.yml263
-rw-r--r--.github/workflows/gemini-automated-issue-triage.yml146
-rw-r--r--.github/workflows/gemini-scheduled-issue-dedup.yml116
-rw-r--r--.github/workflows/gemini-scheduled-issue-triage.yml102
4 files changed, 379 insertions, 248 deletions
diff --git a/.github/workflows/gemini-automated-issue-dedup.yml b/.github/workflows/gemini-automated-issue-dedup.yml
new file mode 100644
index 00000000..91f3e390
--- /dev/null
+++ b/.github/workflows/gemini-automated-issue-dedup.yml
@@ -0,0 +1,263 @@
+name: '🏷️ Gemini Automated Issue Deduplication'
+
+on:
+ issues:
+ types:
+ - 'opened'
+ - 'reopened'
+ issue_comment:
+ types:
+ - 'created'
+ workflow_dispatch:
+ inputs:
+ issue_number:
+ description: 'issue number to dedup'
+ required: true
+ type: 'number'
+
+concurrency:
+ group: '${{ github.workflow }}-${{ github.event.issue.number }}'
+ cancel-in-progress: true
+
+defaults:
+ run:
+ shell: 'bash'
+
+jobs:
+ find-duplicates:
+ if: |-
+ github.repository == 'google-gemini/gemini-cli' &&
+ vars.TRIAGE_DEDUPLICATE_ISSUES != '' &&
+ (github.event_name == 'issues' ||
+ github.event_name == 'workflow_dispatch' ||
+ (github.event_name == 'issue_comment' &&
+ contains(github.event.comment.body, '@gemini-cli /deduplicate') &&
+ (github.event.comment.author_association == 'OWNER' ||
+ github.event.comment.author_association == 'MEMBER' ||
+ github.event.comment.author_association == 'COLLABORATOR')))
+ permissions:
+ contents: 'read'
+ id-token: 'write' # Required for WIF, see https://docs.github.com/en/actions/how-tos/secure-your-work/security-harden-deployments/oidc-in-google-cloud-platform#adding-permissions-settings
+ issues: 'read'
+ statuses: 'read'
+ packages: 'read'
+ timeout-minutes: 20
+ runs-on: 'ubuntu-latest'
+ outputs:
+ duplicate_issues_json: '${{ steps.gemini_issue_deduplication.outputs.summary }}'
+ steps:
+ - name: 'Checkout'
+ uses: 'actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8' # ratchet:actions/checkout@v5
+
+ - name: 'Log in to GitHub Container Registry'
+ uses: 'docker/login-action@184bdaa0721073962dff0199f1fb9940f07167d1' # ratchet:docker/login-action@v3
+ with:
+ registry: 'ghcr.io'
+ username: '${{ github.actor }}'
+ password: '${{ secrets.GITHUB_TOKEN }}'
+
+ - name: 'Find Duplicate Issues'
+ uses: 'google-github-actions/run-gemini-cli@06123c6a203eb7a964ce3be7c48479cc66059f23' # ratchet:google-github-actions/run-gemini-cli@v0
+ id: 'gemini_issue_deduplication'
+ env:
+ GITHUB_TOKEN: '${{ secrets.GITHUB_TOKEN }}'
+ ISSUE_TITLE: '${{ github.event.issue.title }}'
+ ISSUE_BODY: '${{ github.event.issue.body }}'
+ ISSUE_NUMBER: '${{ github.event.issue.number }}'
+ REPOSITORY: '${{ github.repository }}'
+ FIRESTORE_PROJECT: '${{ vars.FIRESTORE_PROJECT }}'
+ with:
+ gcp_workload_identity_provider: '${{ vars.GCP_WIF_PROVIDER }}'
+ gcp_project_id: '${{ vars.GOOGLE_CLOUD_PROJECT }}'
+ gcp_location: '${{ vars.GOOGLE_CLOUD_LOCATION }}'
+ gcp_service_account: '${{ vars.SERVICE_ACCOUNT_EMAIL }}'
+ gemini_api_key: '${{ secrets.GEMINI_API_KEY }}'
+ use_vertex_ai: '${{ vars.GOOGLE_GENAI_USE_VERTEXAI }}'
+ use_gemini_code_assist: '${{ vars.GOOGLE_GENAI_USE_GCA }}'
+ settings: |-
+ {
+ "mcpServers": {
+ "issue_deduplication": {
+ "command": "docker",
+ "args": [
+ "run",
+ "-i",
+ "--rm",
+ "--network", "host",
+ "-e", "GITHUB_TOKEN",
+ "-e", "GEMINI_API_KEY",
+ "-e", "DATABASE_TYPE",
+ "-e", "FIRESTORE_DATABASE_ID",
+ "-e", "GCP_PROJECT",
+ "-e", "GOOGLE_APPLICATION_CREDENTIALS=/app/gcp-credentials.json",
+ "-v", "${GOOGLE_APPLICATION_CREDENTIALS}:/app/gcp-credentials.json",
+ "ghcr.io/google-gemini/gemini-cli-issue-triage@sha256:e3de1523f6c83aabb3c54b76d08940a2bf42febcb789dd2da6f95169641f94d3"
+ ],
+ "env": {
+ "GITHUB_TOKEN": "${GITHUB_TOKEN}",
+ "GEMINI_API_KEY": "${{ secrets.GEMINI_API_KEY }}",
+ "DATABASE_TYPE":"firestore",
+ "GCP_PROJECT": "${FIRESTORE_PROJECT}",
+ "FIRESTORE_DATABASE_ID": "(default)",
+ "GOOGLE_APPLICATION_CREDENTIALS": "${GOOGLE_APPLICATION_CREDENTIALS}"
+ },
+ "enabled": true,
+ "timeout": 600000
+ }
+ },
+ "maxSessionTurns": 25,
+ "coreTools": [
+ "run_shell_command(echo)",
+ "run_shell_command(gh issue view)"
+ ],
+ "telemetry": {
+ "enabled": true,
+ "target": "gcp"
+ }
+ }
+ prompt: |-
+ ## Role
+ You are an issue de-duplication assistant. Your goal is to find
+ duplicate issues for a given issue.
+ ## Steps
+ 1. **Find Potential Duplicates:**
+ - The repository is ${{ github.repository }} and the issue number is ${{ github.event.issue.number }}.
+ - Use the `duplicates` tool with the `repo` and `issue_number` to find potential duplicates for the current issue. Do not use the `threshold` parameter.
+ - If no duplicates are found, you are done.
+ - Print the JSON output from the `duplicates` tool to the logs.
+ 2. **Refine Duplicates List (if necessary):**
+ - If the `duplicates` tool returns between 1 and 14 results, you must refine the list.
+ - For each potential duplicate issue, run `gh issue view <issue-number> --json title,body,comments` to fetch its content.
+ - Also fetch the content of the original issue: `gh issue view "${ISSUE_NUMBER}" --json title,body,comments`.
+ - Carefully analyze the content (title, body, comments) of the original issue and all potential duplicates.
+ - It is very important if the comments on either issue mention that they are not duplicates of each other, to treat them as not duplicates.
+ - Based on your analysis, create a final list containing only the issues you are highly confident are actual duplicates.
+ - If your final list is empty, you are done.
+ - Print to the logs if you omitted any potential duplicates based on your analysis.
+ - If the `duplicates` tool returned 15+ results, use the top 15 matches (based on descending similarity score value) to perform this step.
+ 3. **Output final duplicates list as JSON:**
+ - Output the final list of duplicate issue numbers in a JSON format.
+ - For example: `{"duplicate_issues": [123, 456]}`
+ - If no duplicates are found, output `{"duplicate_issues": []}`.
+ - Do not include any explanation or additional text, just the JSON.
+ ## Guidelines
+ - Only use the `duplicates` and `run_shell_command` tools.
+ - The `run_shell_command` tool can be used with `gh issue view`.
+ - Do not download or read media files like images, videos, or links. The `--json` flag for `gh issue view` will prevent this.
+ - Do not modify the issue content or status.
+ - Do not add comments or labels.
+ - Reference all shell variables as "${VAR}" (with quotes and braces).
+
+ add-comment-and-label:
+ needs: 'find-duplicates'
+ if: |-
+ github.repository == 'google-gemini/gemini-cli' &&
+ vars.TRIAGE_DEDUPLICATE_ISSUES != '' &&
+ needs.find-duplicates.outputs.duplicate_issues_json &&
+ (github.event_name == 'issues' ||
+ github.event_name == 'workflow_dispatch' ||
+ (github.event_name == 'issue_comment' &&
+ contains(github.event.comment.body, '@gemini-cli /deduplicate') &&
+ (github.event.comment.author_association == 'OWNER' ||
+ github.event.comment.author_association == 'MEMBER' ||
+ github.event.comment.author_association == 'COLLABORATOR')))
+ permissions:
+ issues: 'write'
+ timeout-minutes: 5
+ runs-on: 'ubuntu-latest'
+ steps:
+ - name: 'Generate GitHub App Token'
+ id: 'generate_token'
+ uses: 'actions/create-github-app-token@a8d616148505b5069dccd32f177bb87d7f39123b' # ratchet:actions/create-github-app-token@v2
+ with:
+ app-id: '${{ secrets.APP_ID }}'
+ private-key: '${{ secrets.PRIVATE_KEY }}'
+
+ - name: 'Comment and Label Duplicate Issue'
+ uses: 'actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea'
+ with:
+ github-token: '${{ steps.generate_token.outputs.token || secrets.GITHUB_TOKEN }}'
+ script: |-
+ const rawJson = '${{ needs.find-duplicates.outputs.duplicate_issues_json }}';
+ core.info(`Raw duplicates JSON: ${rawJson}`);
+ let parsedJson;
+ try {
+ const trimmedJson = rawJson.replace(/^```(?:json)?\s*/, '').replace(/\s*```$/, '').trim();
+ parsedJson = JSON.parse(trimmedJson);
+ core.info(`Parsed duplicates JSON: ${JSON.stringify(parsedJson)}`);
+ } catch (err) {
+ core.setFailed(`Failed to parse duplicates JSON from Gemini output: ${err.message}\nRaw output: ${rawJson}`);
+ return;
+ }
+
+ if (!parsedJson.duplicate_issues || parsedJson.duplicate_issues.length === 0) {
+ core.info('No duplicate issues found. Nothing to do.');
+ return;
+ }
+
+ const issueNumber = ${{ github.event.issue.number }};
+ const duplicateIssues = parsedJson.duplicate_issues;
+
+ function formatCommentBody(issues, updated = false) {
+ const header = updated
+ ? 'Found possible duplicate issues (updated):'
+ : 'Found possible duplicate issues:';
+ const issuesList = issues.map(num => `- #${num}`).join('\n');
+ const footer = 'If you believe this is not a duplicate, please remove the `status/possible-duplicate` label.';
+ const magicComment = '<!-- gemini-cli-deduplication -->';
+ return `${header}\n\n${issuesList}\n\n${footer}\n${magicComment}`;
+ }
+
+ const newCommentBody = formatCommentBody(duplicateIssues);
+ const newUpdatedCommentBody = formatCommentBody(duplicateIssues, true);
+
+ const { data: comments } = await github.rest.issues.listComments({
+ owner: context.repo.owner,
+ repo: context.repo.repo,
+ issue_number: issueNumber,
+ });
+
+ const magicComment = '<!-- gemini-cli-deduplication -->';
+ const existingComment = comments.find(comment =>
+ comment.user.type === 'Bot' && comment.body.includes(magicComment)
+ );
+
+ let commentMade = false;
+
+ if (existingComment) {
+ // To check if lists are same, just compare the formatted bodies without headers.
+ const existingBodyForCompare = existingComment.body.substring(existingComment.body.indexOf('- #'));
+ const newBodyForCompare = newCommentBody.substring(newCommentBody.indexOf('- #'));
+
+ if (existingBodyForCompare.trim() !== newBodyForCompare.trim()) {
+ core.info(`Updating existing comment ${existingComment.id}`);
+ await github.rest.issues.updateComment({
+ owner: context.repo.owner,
+ repo: context.repo.repo,
+ comment_id: existingComment.id,
+ body: newUpdatedCommentBody,
+ });
+ commentMade = true;
+ } else {
+ core.info('Existing comment is up-to-date. Nothing to do.');
+ }
+ } else {
+ core.info('Creating new comment.');
+ await github.rest.issues.createComment({
+ owner: context.repo.owner,
+ repo: context.repo.repo,
+ issue_number: issueNumber,
+ body: newCommentBody,
+ });
+ commentMade = true;
+ }
+
+ if (commentMade) {
+ core.info('Adding "status/possible-duplicate" label.');
+ await github.rest.issues.addLabels({
+ owner: context.repo.owner,
+ repo: context.repo.repo,
+ issue_number: issueNumber,
+ labels: ['status/possible-duplicate'],
+ });
+ }
diff --git a/.github/workflows/gemini-automated-issue-triage.yml b/.github/workflows/gemini-automated-issue-triage.yml
index 6db8991b..6d42eaa1 100644
--- a/.github/workflows/gemini-automated-issue-triage.yml
+++ b/.github/workflows/gemini-automated-issue-triage.yml
@@ -273,149 +273,3 @@ jobs:
issue_number: parseInt(process.env.ISSUE_NUMBER),
body: 'There is a problem with the Gemini CLI issue triaging. Please check the [action logs](${process.env.RUN_URL}) for details.'
})
-
- deduplicate-issues:
- if: |-
- github.repository == 'google-gemini/gemini-cli' &&
- vars.TRIAGE_DEDUPLICATE_ISSUES != '' &&
- (github.event_name == 'issues' ||
- github.event_name == 'workflow_dispatch' ||
- (github.event_name == 'issue_comment' &&
- contains(github.event.comment.body, '@gemini-cli /deduplicate') &&
- (github.event.comment.author_association == 'OWNER' ||
- github.event.comment.author_association == 'MEMBER' ||
- github.event.comment.author_association == 'COLLABORATOR')))
-
- timeout-minutes: 20
- runs-on: 'ubuntu-latest'
- steps:
- - name: 'Checkout'
- uses: 'actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8' # ratchet:actions/checkout@v5
-
- - name: 'Generate GitHub App Token'
- id: 'generate_token'
- uses: 'actions/create-github-app-token@a8d616148505b5069dccd32f177bb87d7f39123b' # ratchet:actions/create-github-app-token@v2
- with:
- app-id: '${{ secrets.APP_ID }}'
- private-key: '${{ secrets.PRIVATE_KEY }}'
-
- - name: 'Log in to GitHub Container Registry'
- uses: 'docker/login-action@184bdaa0721073962dff0199f1fb9940f07167d1' # ratchet:docker/login-action@v3
- with:
- registry: 'ghcr.io'
- username: '${{ github.actor }}'
- password: '${{ secrets.GITHUB_TOKEN }}'
-
- - name: 'Run Gemini Issue Deduplication'
- uses: 'google-github-actions/run-gemini-cli@06123c6a203eb7a964ce3be7c48479cc66059f23' # ratchet:google-github-actions/run-gemini-cli@v0
- id: 'gemini_issue_deduplication'
- env:
- GITHUB_TOKEN: '${{ steps.generate_token.outputs.token }}'
- ISSUE_TITLE: '${{ github.event.issue.title }}'
- ISSUE_BODY: '${{ github.event.issue.body }}'
- ISSUE_NUMBER: '${{ github.event.issue.number }}'
- REPOSITORY: '${{ github.repository }}'
- FIRESTORE_PROJECT: '${{ vars.FIRESTORE_PROJECT }}'
- with:
- gcp_workload_identity_provider: '${{ vars.GCP_WIF_PROVIDER }}'
- gcp_project_id: '${{ vars.GOOGLE_CLOUD_PROJECT }}'
- gcp_location: '${{ vars.GOOGLE_CLOUD_LOCATION }}'
- gcp_service_account: '${{ vars.SERVICE_ACCOUNT_EMAIL }}'
- gemini_api_key: '${{ secrets.GEMINI_API_KEY }}'
- use_vertex_ai: '${{ vars.GOOGLE_GENAI_USE_VERTEXAI }}'
- use_gemini_code_assist: '${{ vars.GOOGLE_GENAI_USE_GCA }}'
- settings: |-
- {
- "mcpServers": {
- "issue_deduplication": {
- "command": "docker",
- "args": [
- "run",
- "-i",
- "--rm",
- "--network", "host",
- "-e", "GITHUB_TOKEN",
- "-e", "GEMINI_API_KEY",
- "-e", "DATABASE_TYPE",
- "-e", "FIRESTORE_DATABASE_ID",
- "-e", "GCP_PROJECT",
- "-e", "GOOGLE_APPLICATION_CREDENTIALS=/app/gcp-credentials.json",
- "-v", "${GOOGLE_APPLICATION_CREDENTIALS}:/app/gcp-credentials.json",
- "ghcr.io/google-gemini/gemini-cli-issue-triage@sha256:e3de1523f6c83aabb3c54b76d08940a2bf42febcb789dd2da6f95169641f94d3"
- ],
- "env": {
- "GITHUB_TOKEN": "${GITHUB_TOKEN}",
- "GEMINI_API_KEY": "${{ secrets.GEMINI_API_KEY }}",
- "DATABASE_TYPE":"firestore",
- "GCP_PROJECT": "${FIRESTORE_PROJECT}",
- "FIRESTORE_DATABASE_ID": "(default)",
- "GOOGLE_APPLICATION_CREDENTIALS": "${GOOGLE_APPLICATION_CREDENTIALS}"
- },
- "enabled": true,
- "timeout": 600000
- }
- },
- "maxSessionTurns": 25,
- "coreTools": [
- "run_shell_command(echo)",
- "run_shell_command(gh issue comment)",
- "run_shell_command(gh issue view)",
- "run_shell_command(gh issue edit)"
- ],
- "telemetry": {
- "enabled": true,
- "target": "gcp"
- }
- }
- prompt: |-
- ## Role
- You are an issue de-duplication assistant. Your goal is to find
- duplicate issues, label the current issue as a duplicate, and notify
- the user by commenting on the current issue, while avoiding
- duplicate comments.
- ## Steps
- 1. **Find Potential Duplicates:**
- - The repository is ${{ github.repository }} and the issue number is ${{ github.event.issue.number }}.
- - Use the `duplicates` tool with the `repo` and `issue_number` to find potential duplicates for the current issue. Do not use the `threshold` parameter.
- - If no duplicates are found, you are done.
- - Print the JSON output from the `duplicates` tool to the logs.
- 2. **Refine Duplicates List (if necessary):**
- - If the `duplicates` tool returns between 1 and 14 results, you must refine the list.
- - For each potential duplicate issue, run `gh issue view <issue-number> --json title,body,comments` to fetch its content.
- - Also fetch the content of the original issue: `gh issue view "${ISSUE_NUMBER}" --json title,body,comments`.
- - Carefully analyze the content (title, body, comments) of the original issue and all potential duplicates.
- - It is very important if the comments on either issue mention that they are not duplicates of each other, to treat them as not duplicates.
- - Based on your analysis, create a final list containing only the issues you are highly confident are actual duplicates.
- - If your final list is empty, you are done.
- - Print to the logs if you omitted any potential duplicates based on your analysis.
- - If the `duplicates` tool returned 15+ results, use the top 15 matches (based on descending similarity score value) to perform this step.
- 3. **Format Final Duplicates List:**
- Format the final list of duplicates into a markdown string.
- The format should be:
- "Found possible duplicate issues:\n\n- #${issue_number}\n\nIf you believe this is not a duplicate, please remove the `status/possible-duplicate` label."
- Add an HTML comment to the end for identification: `<!-- gemini-cli-deduplication -->`
- 4. **Check for Existing Comment:**
- - Run `gh issue view "${ISSUE_NUMBER}" --json comments` to get all
- comments on the issue.
- - Look for a comment made by a bot (the author's login often ends in `[bot]`) that contains `<!-- gemini-cli-deduplication -->`.
- - If you find such a comment, store its `id` and `body`.
- 5. **Decide Action:**
- - **If an existing comment is found:**
- - Compare the new list of duplicate issues with the list from the existing comment's body.
- - If they are the same, do nothing.
- - If they are different, edit the existing comment. Use
- `gh issue comment "${ISSUE_NUMBER}" --edit-comment <comment-id> --body "..."`.
- The new body should be the new list of duplicates, but with the header "Found possible duplicate issues (updated):".
- - **If no existing comment is found:**
- - Create a new comment with the list of duplicates.
- - Use `gh issue comment "${ISSUE_NUMBER}" --body "..."`.
- 6. **Add Duplicate Label:**
- - If you created or updated a comment in the previous step, add the `duplicate` label to the current issue.
- - Use `gh issue edit "${ISSUE_NUMBER}" --add-label "status/possible-duplicate"`.
- ## Guidelines
- - Only use the `duplicates` and `run_shell_command` tools.
- - The `run_shell_command` tool can be used with `gh issue view`, `gh issue comment`, and `gh issue edit`.
- - Do not download or read media files like images, videos, or links. The `--json` flag for `gh issue view` will prevent this.
- - Do not modify the issue content or status.
- - Only comment on and label the current issue.
- - Reference all shell variables as "${VAR}" (with quotes and braces).
diff --git a/.github/workflows/gemini-scheduled-issue-dedup.yml b/.github/workflows/gemini-scheduled-issue-dedup.yml
new file mode 100644
index 00000000..a41e6ee5
--- /dev/null
+++ b/.github/workflows/gemini-scheduled-issue-dedup.yml
@@ -0,0 +1,116 @@
+name: '📋 Gemini Scheduled Issue Deduplication'
+
+on:
+ schedule:
+ - cron: '0 * * * *' # Runs every hour
+ workflow_dispatch:
+
+concurrency:
+ group: '${{ github.workflow }}'
+ cancel-in-progress: true
+
+defaults:
+ run:
+ shell: 'bash'
+
+jobs:
+ refresh-embeddings:
+ if: |-
+ ${{ vars.TRIAGE_DEDUPLICATE_ISSUES != '' && github.repository == 'google-gemini/gemini-cli' }}
+ permissions:
+ contents: 'read'
+ id-token: 'write' # Required for WIF, see https://docs.github.com/en/actions/how-tos/secure-your-work/security-harden-deployments/oidc-in-google-cloud-platform#adding-permissions-settings
+ issues: 'read'
+ statuses: 'read'
+ packages: 'read'
+ timeout-minutes: 20
+ runs-on: 'ubuntu-latest'
+ steps:
+ - name: 'Checkout'
+ uses: 'actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8' # ratchet:actions/checkout@v5
+
+ - name: 'Log in to GitHub Container Registry'
+ uses: 'docker/login-action@184bdaa0721073962dff0199f1fb9940f07167d1' # ratchet:docker/login-action@v3
+ with:
+ registry: 'ghcr.io'
+ username: '${{ github.actor }}'
+ password: '${{ secrets.GITHUB_TOKEN }}'
+
+ - name: 'Run Gemini Issue Deduplication Refresh'
+ uses: 'google-github-actions/run-gemini-cli@06123c6a203eb7a964ce3be7c48479cc66059f23' # ratchet:google-github-actions/run-gemini-cli@v0
+ id: 'gemini_refresh_embeddings'
+ env:
+ GITHUB_TOKEN: '${{ secrets.GITHUB_TOKEN }}'
+ ISSUE_TITLE: '${{ github.event.issue.title }}'
+ ISSUE_BODY: '${{ github.event.issue.body }}'
+ ISSUE_NUMBER: '${{ github.event.issue.number }}'
+ REPOSITORY: '${{ github.repository }}'
+ FIRESTORE_PROJECT: '${{ vars.FIRESTORE_PROJECT }}'
+ with:
+ gcp_workload_identity_provider: '${{ vars.GCP_WIF_PROVIDER }}'
+ gcp_project_id: '${{ vars.GOOGLE_CLOUD_PROJECT }}'
+ gcp_location: '${{ vars.GOOGLE_CLOUD_LOCATION }}'
+ gcp_service_account: '${{ vars.SERVICE_ACCOUNT_EMAIL }}'
+ gemini_api_key: '${{ secrets.GEMINI_API_KEY }}'
+ use_vertex_ai: '${{ vars.GOOGLE_GENAI_USE_VERTEXAI }}'
+ use_gemini_code_assist: '${{ vars.GOOGLE_GENAI_USE_GCA }}'
+ settings: |-
+ {
+ "mcpServers": {
+ "issue_deduplication": {
+ "command": "docker",
+ "args": [
+ "run",
+ "-i",
+ "--rm",
+ "--network", "host",
+ "-e", "GITHUB_TOKEN",
+ "-e", "GEMINI_API_KEY",
+ "-e", "DATABASE_TYPE",
+ "-e", "FIRESTORE_DATABASE_ID",
+ "-e", "GCP_PROJECT",
+ "-e", "GOOGLE_APPLICATION_CREDENTIALS=/app/gcp-credentials.json",
+ "-v", "${GOOGLE_APPLICATION_CREDENTIALS}:/app/gcp-credentials.json",
+ "ghcr.io/google-gemini/gemini-cli-issue-triage@sha256:e3de1523f6c83aabb3c54b76d08940a2bf42febcb789dd2da6f95169641f94d3"
+ ],
+ "env": {
+ "GITHUB_TOKEN": "${GITHUB_TOKEN}",
+ "GEMINI_API_KEY": "${{ secrets.GEMINI_API_KEY }}",
+ "DATABASE_TYPE":"firestore",
+ "GCP_PROJECT": "${FIRESTORE_PROJECT}",
+ "FIRESTORE_DATABASE_ID": "(default)",
+ "GOOGLE_APPLICATION_CREDENTIALS": "${GOOGLE_APPLICATION_CREDENTIALS}"
+ },
+ "enabled": true,
+ "timeout": 600000
+ }
+ },
+ "maxSessionTurns": 25,
+ "coreTools": [
+ "run_shell_command(echo)"
+ ],
+ "telemetry": {
+ "enabled": true,
+ "target": "gcp"
+ }
+ }
+ prompt: |-
+ ## Role
+
+ You are a database maintenance assistant for a GitHub issue deduplication system.
+
+ ## Goal
+
+ Your sole responsibility is to refresh the embeddings for all open issues in the repository to ensure the deduplication database is up-to-date.
+
+ ## Steps
+
+ 1. **Extract Repository Information:** The repository is ${{ github.repository }}.
+ 2. **Refresh Embeddings:** Call the `refresh` tool with the correct `repo`. Do not use the `force` parameter.
+ 3. **Log Output:** Print the JSON output from the `refresh` tool to the logs.
+
+ ## Guidelines
+
+ - Only use the `refresh` tool.
+ - Do not attempt to find duplicates or modify any issues.
+ - Your only task is to call the `refresh` tool and log its output.
diff --git a/.github/workflows/gemini-scheduled-issue-triage.yml b/.github/workflows/gemini-scheduled-issue-triage.yml
index 61ca7fe9..005c9b1a 100644
--- a/.github/workflows/gemini-scheduled-issue-triage.yml
+++ b/.github/workflows/gemini-scheduled-issue-triage.yml
@@ -291,105 +291,3 @@ jobs:
core.info(`No labels to set for #${issueNumber}, leaving as is`);
}
}
-
- refresh-embeddings:
- if: |-
- ${{ vars.TRIAGE_DEDUPLICATE_ISSUES != '' && github.repository == 'google-gemini/gemini-cli' }}
- timeout-minutes: 20
- runs-on: 'ubuntu-latest'
- steps:
- - name: 'Checkout'
- uses: 'actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8' # ratchet:actions/checkout@v5
-
- - name: 'Generate GitHub App Token'
- id: 'generate_token'
- uses: 'actions/create-github-app-token@a8d616148505b5069dccd32f177bb87d7f39123b' # ratchet:actions/create-github-app-token@v2
- with:
- app-id: '${{ secrets.APP_ID }}'
- private-key: '${{ secrets.PRIVATE_KEY }}'
-
- - name: 'Log in to GitHub Container Registry'
- uses: 'docker/login-action@184bdaa0721073962dff0199f1fb9940f07167d1' # ratchet:docker/login-action@v3
- with:
- registry: 'ghcr.io'
- username: '${{ github.actor }}'
- password: '${{ secrets.GITHUB_TOKEN }}'
-
- - name: 'Run Gemini Issue Deduplication Refresh'
- uses: 'google-github-actions/run-gemini-cli@06123c6a203eb7a964ce3be7c48479cc66059f23' # ratchet:google-github-actions/run-gemini-cli@v0
- id: 'gemini_refresh_embeddings'
- env:
- GITHUB_TOKEN: '${{ steps.generate_token.outputs.token }}'
- ISSUE_TITLE: '${{ github.event.issue.title }}'
- ISSUE_BODY: '${{ github.event.issue.body }}'
- ISSUE_NUMBER: '${{ github.event.issue.number }}'
- REPOSITORY: '${{ github.repository }}'
- FIRESTORE_PROJECT: '${{ vars.FIRESTORE_PROJECT }}'
- with:
- gcp_workload_identity_provider: '${{ vars.GCP_WIF_PROVIDER }}'
- gcp_project_id: '${{ vars.GOOGLE_CLOUD_PROJECT }}'
- gcp_location: '${{ vars.GOOGLE_CLOUD_LOCATION }}'
- gcp_service_account: '${{ vars.SERVICE_ACCOUNT_EMAIL }}'
- gemini_api_key: '${{ secrets.GEMINI_API_KEY }}'
- use_vertex_ai: '${{ vars.GOOGLE_GENAI_USE_VERTEXAI }}'
- use_gemini_code_assist: '${{ vars.GOOGLE_GENAI_USE_GCA }}'
- settings: |-
- {
- "mcpServers": {
- "issue_deduplication": {
- "command": "docker",
- "args": [
- "run",
- "-i",
- "--rm",
- "--network", "host",
- "-e", "GITHUB_TOKEN",
- "-e", "GEMINI_API_KEY",
- "-e", "DATABASE_TYPE",
- "-e", "FIRESTORE_DATABASE_ID",
- "-e", "GCP_PROJECT",
- "-e", "GOOGLE_APPLICATION_CREDENTIALS=/app/gcp-credentials.json",
- "-v", "${GOOGLE_APPLICATION_CREDENTIALS}:/app/gcp-credentials.json",
- "ghcr.io/google-gemini/gemini-cli-issue-triage@sha256:e3de1523f6c83aabb3c54b76d08940a2bf42febcb789dd2da6f95169641f94d3"
- ],
- "env": {
- "GITHUB_TOKEN": "${GITHUB_TOKEN}",
- "GEMINI_API_KEY": "${{ secrets.GEMINI_API_KEY }}",
- "DATABASE_TYPE":"firestore",
- "GCP_PROJECT": "${FIRESTORE_PROJECT}",
- "FIRESTORE_DATABASE_ID": "(default)",
- "GOOGLE_APPLICATION_CREDENTIALS": "${GOOGLE_APPLICATION_CREDENTIALS}"
- },
- "enabled": true,
- "timeout": 600000
- }
- },
- "maxSessionTurns": 25,
- "coreTools": [
- "run_shell_command(echo)"
- ],
- "telemetry": {
- "enabled": true,
- "target": "gcp"
- }
- }
- prompt: |-
- ## Role
-
- You are a database maintenance assistant for a GitHub issue deduplication system.
-
- ## Goal
-
- Your sole responsibility is to refresh the embeddings for all open issues in the repository to ensure the deduplication database is up-to-date.
-
- ## Steps
-
- 1. **Extract Repository Information:** The repository is ${{ github.repository }}.
- 2. **Refresh Embeddings:** Call the `refresh` tool with the correct `repo`. Do not use the `force` parameter.
- 3. **Log Output:** Print the JSON output from the `refresh` tool to the logs.
-
- ## Guidelines
-
- - Only use the `refresh` tool.
- - Do not attempt to find duplicates or modify any issues.
- - Your only task is to call the `refresh` tool and log its output.