mirror of
https://github.com/google-gemini/gemini-cli.git
synced 2026-03-10 22:21:22 -07:00
197 lines
9.0 KiB
YAML
197 lines
9.0 KiB
YAML
name: 'Release: Patch (0) from Comment'
|
|
|
|
on:
|
|
issue_comment:
|
|
types: ['created']
|
|
|
|
jobs:
|
|
slash-command:
|
|
runs-on: 'ubuntu-latest'
|
|
# Only run if the comment is from a human user (not automated)
|
|
if: "github.event.comment.user.type == 'User' && github.event.comment.user.login != 'github-actions[bot]'"
|
|
permissions:
|
|
contents: 'write'
|
|
pull-requests: 'write'
|
|
actions: 'write'
|
|
steps:
|
|
- name: 'Checkout'
|
|
uses: 'actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8'
|
|
with:
|
|
fetch-depth: 1
|
|
|
|
- name: 'Slash Command Dispatch'
|
|
id: 'slash_command'
|
|
uses: 'peter-evans/slash-command-dispatch@40877f718dce0101edfc7aea2b3800cc192f9ed5'
|
|
with:
|
|
token: '${{ secrets.GITHUB_TOKEN }}'
|
|
commands: 'patch'
|
|
permission: 'write'
|
|
issue-type: 'pull-request'
|
|
|
|
- name: 'Get PR Status'
|
|
id: 'pr_status'
|
|
if: "startsWith(github.event.comment.body, '/patch')"
|
|
env:
|
|
GH_TOKEN: '${{ secrets.GITHUB_TOKEN }}'
|
|
run: |
|
|
gh pr view "${{ github.event.issue.number }}" --json mergeCommit,state > pr_status.json
|
|
echo "MERGE_COMMIT_SHA=$(jq -r .mergeCommit.oid pr_status.json)" >> "$GITHUB_OUTPUT"
|
|
echo "STATE=$(jq -r .state pr_status.json)" >> "$GITHUB_OUTPUT"
|
|
|
|
- name: 'Dispatch if Merged'
|
|
if: "steps.pr_status.outputs.STATE == 'MERGED'"
|
|
id: 'dispatch_patch'
|
|
uses: 'actions/github-script@00f12e3e20659f42342b1c0226afda7f7c042325'
|
|
env:
|
|
COMMENT_BODY: '${{ github.event.comment.body }}'
|
|
with:
|
|
github-token: '${{ secrets.GITHUB_TOKEN }}'
|
|
script: |
|
|
// Parse the comment body directly to extract channel(s)
|
|
const commentBody = process.env.COMMENT_BODY;
|
|
console.log('Comment body:', commentBody);
|
|
|
|
let channels = ['stable', 'preview']; // default to both
|
|
|
|
// Parse different formats:
|
|
// /patch (defaults to both)
|
|
// /patch both
|
|
// /patch stable
|
|
// /patch preview
|
|
if (commentBody.trim() === '/patch' || commentBody.trim() === '/patch both') {
|
|
channels = ['stable', 'preview'];
|
|
} else if (commentBody.trim() === '/patch stable') {
|
|
channels = ['stable'];
|
|
} else if (commentBody.trim() === '/patch preview') {
|
|
channels = ['preview'];
|
|
} else {
|
|
// Fallback parsing for legacy formats
|
|
if (commentBody.includes('channel=preview')) {
|
|
channels = ['preview'];
|
|
} else if (commentBody.includes('--channel preview')) {
|
|
channels = ['preview'];
|
|
}
|
|
}
|
|
|
|
console.log('Detected channels:', channels);
|
|
|
|
const dispatchedRuns = [];
|
|
|
|
// Dispatch workflow for each channel
|
|
for (const channel of channels) {
|
|
console.log(`Dispatching workflow for channel: ${channel}`);
|
|
|
|
const response = await github.rest.actions.createWorkflowDispatch({
|
|
owner: context.repo.owner,
|
|
repo: context.repo.repo,
|
|
workflow_id: 'release-patch-1-create-pr.yml',
|
|
ref: 'main',
|
|
inputs: {
|
|
commit: '${{ steps.pr_status.outputs.MERGE_COMMIT_SHA }}',
|
|
channel: channel,
|
|
original_pr: '${{ github.event.issue.number }}',
|
|
environment: 'prod'
|
|
}
|
|
});
|
|
|
|
dispatchedRuns.push({ channel, response });
|
|
}
|
|
|
|
// Wait a moment for the workflows to be created
|
|
await new Promise(resolve => setTimeout(resolve, 3000));
|
|
|
|
const runs = await github.rest.actions.listWorkflowRuns({
|
|
owner: context.repo.owner,
|
|
repo: context.repo.repo,
|
|
workflow_id: 'release-patch-1-create-pr.yml',
|
|
per_page: 20 // Increased to handle multiple runs
|
|
});
|
|
|
|
// Find the recent runs that match our trigger
|
|
const recentRuns = runs.data.workflow_runs.filter(run =>
|
|
run.event === 'workflow_dispatch' &&
|
|
new Date(run.created_at) > new Date(Date.now() - 15000) // Within last 15 seconds
|
|
).slice(0, channels.length); // Limit to the number of channels we dispatched
|
|
|
|
// Set outputs
|
|
core.setOutput('dispatched_channels', channels.join(','));
|
|
core.setOutput('dispatched_run_count', channels.length.toString());
|
|
|
|
if (recentRuns.length > 0) {
|
|
core.setOutput('dispatched_run_urls', recentRuns.map(r => r.html_url).join(','));
|
|
core.setOutput('dispatched_run_ids', recentRuns.map(r => r.id).join(','));
|
|
|
|
const markdownLinks = recentRuns.map(r => `- [View dispatched workflow run](${r.html_url})`).join('\n');
|
|
core.setOutput('dispatched_run_links', markdownLinks);
|
|
}
|
|
|
|
- name: 'Comment on Failure'
|
|
if: "startsWith(github.event.comment.body, '/patch') && steps.pr_status.outputs.STATE != 'MERGED'"
|
|
uses: 'peter-evans/create-or-update-comment@67dcc547d311b736a8e6c5c236542148a47adc3d'
|
|
with:
|
|
token: '${{ secrets.GITHUB_TOKEN }}'
|
|
issue-number: '${{ github.event.issue.number }}'
|
|
body: |
|
|
:x: The `/patch` command failed. This pull request must be merged before a patch can be created.
|
|
|
|
- name: 'Final Status Comment - Success'
|
|
if: "always() && startsWith(github.event.comment.body, '/patch') && steps.dispatch_patch.outcome == 'success' && steps.dispatch_patch.outputs.dispatched_run_urls"
|
|
uses: 'peter-evans/create-or-update-comment@67dcc547d311b736a8e6c5c236542148a47adc3d'
|
|
with:
|
|
token: '${{ secrets.GITHUB_TOKEN }}'
|
|
issue-number: '${{ github.event.issue.number }}'
|
|
body: |
|
|
🚀 **[Step 1/4] Patch workflow(s) waiting for approval!**
|
|
|
|
**📋 Details:**
|
|
- **Channels**: `${{ steps.dispatch_patch.outputs.dispatched_channels }}`
|
|
- **Commit**: `${{ steps.pr_status.outputs.MERGE_COMMIT_SHA }}`
|
|
- **Workflows Created**: ${{ steps.dispatch_patch.outputs.dispatched_run_count }}
|
|
|
|
**⏳ Status:** The patch creation workflow has been triggered and is waiting for deployment approval. Please visit the specific workflow links below and approve the runs.
|
|
|
|
**🔗 Track Progress:**
|
|
${{ steps.dispatch_patch.outputs.dispatched_run_links }}
|
|
- [View patch workflow history](https://github.com/${{ github.repository }}/actions/workflows/release-patch-1-create-pr.yml)
|
|
- [This trigger workflow run](https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }})
|
|
|
|
- name: 'Final Status Comment - Dispatch Success (No URL)'
|
|
if: "always() && startsWith(github.event.comment.body, '/patch') && steps.dispatch_patch.outcome == 'success' && !steps.dispatch_patch.outputs.dispatched_run_urls"
|
|
uses: 'peter-evans/create-or-update-comment@67dcc547d311b736a8e6c5c236542148a47adc3d'
|
|
with:
|
|
token: '${{ secrets.GITHUB_TOKEN }}'
|
|
issue-number: '${{ github.event.issue.number }}'
|
|
body: |
|
|
🚀 **[Step 1/4] Patch workflow(s) waiting for approval!**
|
|
|
|
**📋 Details:**
|
|
- **Channels**: `${{ steps.dispatch_patch.outputs.dispatched_channels }}`
|
|
- **Commit**: `${{ steps.pr_status.outputs.MERGE_COMMIT_SHA }}`
|
|
- **Workflows Created**: ${{ steps.dispatch_patch.outputs.dispatched_run_count }}
|
|
|
|
**⏳ Status:** The patch creation workflow has been triggered and is waiting for deployment approval. Please visit the workflow history link below and approve the runs.
|
|
|
|
**🔗 Track Progress:**
|
|
- [View patch workflow history](https://github.com/${{ github.repository }}/actions/workflows/release-patch-1-create-pr.yml)
|
|
- [This trigger workflow run](https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }})
|
|
|
|
- name: 'Final Status Comment - Failure'
|
|
if: "always() && startsWith(github.event.comment.body, '/patch') && (steps.dispatch_patch.outcome == 'failure' || steps.dispatch_patch.outcome == 'cancelled')"
|
|
uses: 'peter-evans/create-or-update-comment@67dcc547d311b736a8e6c5c236542148a47adc3d'
|
|
with:
|
|
token: '${{ secrets.GITHUB_TOKEN }}'
|
|
issue-number: '${{ github.event.issue.number }}'
|
|
body: |
|
|
❌ **[Step 1/4] Patch workflow dispatch failed!**
|
|
|
|
There was an error dispatching the patch creation workflow.
|
|
|
|
**🔍 Troubleshooting:**
|
|
- Check that the PR is properly merged
|
|
- Verify workflow permissions
|
|
- Review error logs in the workflow run
|
|
|
|
**🔗 Debug Links:**
|
|
- [This workflow run](https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }})
|
|
- [Patch workflow history](https://github.com/${{ github.repository }}/actions/workflows/release-patch-1-create-pr.yml)
|