name: 'Release: Patch 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' static-args: | dry_run=false - name: 'Acknowledge Patch Command' if: "startsWith(github.event.comment.body, '/patch')" uses: 'peter-evans/create-or-update-comment@67dcc547d311b736a8e6c5c236542148a47adc3d' with: issue-number: '${{ github.event.issue.number }}' body: | 👋 Patch command received! Processing... You can track the progress here: https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }} - 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'" uses: 'actions/github-script@00f12e3e20659f42342b1c0226afda7f7c042325' env: COMMENT_BODY: '${{ github.event.comment.body }}' with: script: | // Parse the comment body directly to extract channel const commentBody = process.env.COMMENT_BODY; console.log('Comment body:', commentBody); let channel = 'stable'; // default // Parse different formats: // /patch channel=preview // /patch --channel preview // /patch preview if (commentBody.includes('channel=preview')) { channel = 'preview'; } else if (commentBody.includes('--channel preview')) { channel = 'preview'; } else if (commentBody.trim() === '/patch preview') { channel = 'preview'; } // Validate channel if (channel !== 'stable' && channel !== 'preview') { throw new Error(`Invalid channel: ${channel}. Must be 'stable' or 'preview'.`); } console.log('Detected channel:', channel); 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, dry_run: 'false', original_pr: '${{ github.event.issue.number }}' } }) - 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: issue-number: '${{ github.event.issue.number }}' body: | :x: The `/patch` command failed. This pull request must be merged before a patch can be created.