update event dispatcher
parent
0f558876e2
commit
c8f2c7bc88
|
@ -0,0 +1,198 @@
|
||||||
|
name: AutoGPT Platform - Dev Deploy PR Event Dispatcher
|
||||||
|
|
||||||
|
on:
|
||||||
|
pull_request:
|
||||||
|
types: [closed]
|
||||||
|
issue_comment:
|
||||||
|
types: [created]
|
||||||
|
|
||||||
|
permissions:
|
||||||
|
issues: write
|
||||||
|
pull-requests: write
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
dispatch:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- name: Check comment permissions and deployment status
|
||||||
|
id: check_status
|
||||||
|
if: github.event_name == 'issue_comment' && github.event.issue.pull_request
|
||||||
|
uses: actions/github-script@v7
|
||||||
|
with:
|
||||||
|
script: |
|
||||||
|
const commentBody = context.payload.comment.body.trim();
|
||||||
|
const commentUser = context.payload.comment.user.login;
|
||||||
|
const prAuthor = context.payload.issue.user.login;
|
||||||
|
const authorAssociation = context.payload.comment.author_association;
|
||||||
|
|
||||||
|
// Check permissions
|
||||||
|
const hasPermission = (
|
||||||
|
authorAssociation === 'OWNER' ||
|
||||||
|
authorAssociation === 'MEMBER' ||
|
||||||
|
authorAssociation === 'COLLABORATOR'
|
||||||
|
);
|
||||||
|
|
||||||
|
core.setOutput('comment_body', commentBody);
|
||||||
|
core.setOutput('has_permission', hasPermission);
|
||||||
|
|
||||||
|
if (!hasPermission && (commentBody === '!deploy' || commentBody === '!undeploy')) {
|
||||||
|
core.setOutput('permission_denied', 'true');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (commentBody !== '!deploy' && commentBody !== '!undeploy') {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Process deploy command
|
||||||
|
if (commentBody === '!deploy') {
|
||||||
|
core.setOutput('should_deploy', 'true');
|
||||||
|
}
|
||||||
|
// Process undeploy command
|
||||||
|
else if (commentBody === '!undeploy') {
|
||||||
|
core.setOutput('should_undeploy', 'true');
|
||||||
|
}
|
||||||
|
|
||||||
|
- name: Post permission denied comment
|
||||||
|
if: steps.check_status.outputs.permission_denied == 'true'
|
||||||
|
uses: actions/github-script@v7
|
||||||
|
with:
|
||||||
|
script: |
|
||||||
|
await github.rest.issues.createComment({
|
||||||
|
owner: context.repo.owner,
|
||||||
|
repo: context.repo.repo,
|
||||||
|
issue_number: context.issue.number,
|
||||||
|
body: `❌ **Permission denied**: Only the repository owners, members, or collaborators can use deployment commands.`
|
||||||
|
});
|
||||||
|
|
||||||
|
- name: Get PR details for deployment
|
||||||
|
id: pr_details
|
||||||
|
if: steps.check_status.outputs.should_deploy == 'true' || steps.check_status.outputs.should_undeploy == 'true'
|
||||||
|
uses: actions/github-script@v7
|
||||||
|
with:
|
||||||
|
script: |
|
||||||
|
const pr = await github.rest.pulls.get({
|
||||||
|
owner: context.repo.owner,
|
||||||
|
repo: context.repo.repo,
|
||||||
|
pull_number: context.issue.number
|
||||||
|
});
|
||||||
|
core.setOutput('pr_number', pr.data.number);
|
||||||
|
core.setOutput('pr_title', pr.data.title);
|
||||||
|
core.setOutput('pr_state', pr.data.state);
|
||||||
|
|
||||||
|
- name: Dispatch Deploy Event
|
||||||
|
if: steps.check_status.outputs.should_deploy == 'true'
|
||||||
|
uses: peter-evans/repository-dispatch@v2
|
||||||
|
with:
|
||||||
|
token: ${{ secrets.DISPATCH_TOKEN }}
|
||||||
|
repository: Significant-Gravitas/AutoGPT_cloud_infrastructure
|
||||||
|
event-type: pr-event
|
||||||
|
client-payload: |
|
||||||
|
{
|
||||||
|
"action": "deploy",
|
||||||
|
"pr_number": "${{ steps.pr_details.outputs.pr_number }}",
|
||||||
|
"pr_title": "${{ steps.pr_details.outputs.pr_title }}",
|
||||||
|
"pr_state": "${{ steps.pr_details.outputs.pr_state }}",
|
||||||
|
"repo": "${{ github.repository }}"
|
||||||
|
}
|
||||||
|
|
||||||
|
- name: Post deploy success comment
|
||||||
|
if: steps.check_status.outputs.should_deploy == 'true'
|
||||||
|
uses: actions/github-script@v7
|
||||||
|
with:
|
||||||
|
script: |
|
||||||
|
await github.rest.issues.createComment({
|
||||||
|
owner: context.repo.owner,
|
||||||
|
repo: context.repo.repo,
|
||||||
|
issue_number: context.issue.number,
|
||||||
|
body: `🚀 **Deploying PR #${{ steps.pr_details.outputs.pr_number }}** to development environment...`
|
||||||
|
});
|
||||||
|
|
||||||
|
- name: Dispatch Undeploy Event (from comment)
|
||||||
|
if: steps.check_status.outputs.should_undeploy == 'true'
|
||||||
|
uses: peter-evans/repository-dispatch@v2
|
||||||
|
with:
|
||||||
|
token: ${{ secrets.DISPATCH_TOKEN }}
|
||||||
|
repository: Significant-Gravitas/AutoGPT_cloud_infrastructure
|
||||||
|
event-type: pr-event
|
||||||
|
client-payload: |
|
||||||
|
{
|
||||||
|
"action": "undeploy",
|
||||||
|
"pr_number": "${{ steps.pr_details.outputs.pr_number }}",
|
||||||
|
"pr_title": "${{ steps.pr_details.outputs.pr_title }}",
|
||||||
|
"pr_state": "${{ steps.pr_details.outputs.pr_state }}",
|
||||||
|
"repo": "${{ github.repository }}"
|
||||||
|
}
|
||||||
|
|
||||||
|
- name: Post undeploy success comment
|
||||||
|
if: steps.check_status.outputs.should_undeploy == 'true'
|
||||||
|
uses: actions/github-script@v7
|
||||||
|
with:
|
||||||
|
script: |
|
||||||
|
await github.rest.issues.createComment({
|
||||||
|
owner: context.repo.owner,
|
||||||
|
repo: context.repo.repo,
|
||||||
|
issue_number: context.issue.number,
|
||||||
|
body: `🗑️ **Undeploying PR #${{ steps.pr_details.outputs.pr_number }}** from development environment...`
|
||||||
|
});
|
||||||
|
|
||||||
|
- name: Check deployment status on PR close
|
||||||
|
id: check_pr_close
|
||||||
|
if: github.event_name == 'pull_request' && github.event.action == 'closed'
|
||||||
|
uses: actions/github-script@v7
|
||||||
|
with:
|
||||||
|
script: |
|
||||||
|
const comments = await github.rest.issues.listComments({
|
||||||
|
owner: context.repo.owner,
|
||||||
|
repo: context.repo.repo,
|
||||||
|
issue_number: context.issue.number
|
||||||
|
});
|
||||||
|
|
||||||
|
let lastDeployIndex = -1;
|
||||||
|
let lastUndeployIndex = -1;
|
||||||
|
|
||||||
|
comments.data.forEach((comment, index) => {
|
||||||
|
if (comment.body.trim() === '!deploy') {
|
||||||
|
lastDeployIndex = index;
|
||||||
|
} else if (comment.body.trim() === '!undeploy') {
|
||||||
|
lastUndeployIndex = index;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
// Should undeploy if there's a !deploy without a subsequent !undeploy
|
||||||
|
const shouldUndeploy = lastDeployIndex !== -1 && lastDeployIndex > lastUndeployIndex;
|
||||||
|
core.setOutput('should_undeploy', shouldUndeploy);
|
||||||
|
|
||||||
|
- name: Dispatch Undeploy Event (PR closed with active deployment)
|
||||||
|
if: >-
|
||||||
|
github.event_name == 'pull_request' &&
|
||||||
|
github.event.action == 'closed' &&
|
||||||
|
steps.check_pr_close.outputs.should_undeploy == 'true'
|
||||||
|
uses: peter-evans/repository-dispatch@v2
|
||||||
|
with:
|
||||||
|
token: ${{ secrets.DISPATCH_TOKEN }}
|
||||||
|
repository: Significant-Gravitas/AutoGPT_cloud_infrastructure
|
||||||
|
event-type: pr-event
|
||||||
|
client-payload: |
|
||||||
|
{
|
||||||
|
"action": "undeploy",
|
||||||
|
"pr_number": "${{ github.event.pull_request.number }}",
|
||||||
|
"pr_title": "${{ github.event.pull_request.title }}",
|
||||||
|
"pr_state": "${{ github.event.pull_request.state }}",
|
||||||
|
"repo": "${{ github.repository }}"
|
||||||
|
}
|
||||||
|
|
||||||
|
- name: Post PR close undeploy comment
|
||||||
|
if: >-
|
||||||
|
github.event_name == 'pull_request' &&
|
||||||
|
github.event.action == 'closed' &&
|
||||||
|
steps.check_pr_close.outputs.should_undeploy == 'true'
|
||||||
|
uses: actions/github-script@v7
|
||||||
|
with:
|
||||||
|
script: |
|
||||||
|
await github.rest.issues.createComment({
|
||||||
|
owner: context.repo.owner,
|
||||||
|
repo: context.repo.repo,
|
||||||
|
issue_number: context.issue.number,
|
||||||
|
body: `🧹 **Auto-undeploying**: PR closed with active deployment. Cleaning up development environment for PR #${{ github.event.pull_request.number }}.`
|
||||||
|
});
|
|
@ -1,57 +0,0 @@
|
||||||
name: Dev Deploy PR Event Dispatcher
|
|
||||||
|
|
||||||
on:
|
|
||||||
pull_request:
|
|
||||||
types: [opened, synchronize, closed]
|
|
||||||
issue_comment:
|
|
||||||
types: [created]
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
dispatch:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- name: Check if should dispatch
|
|
||||||
id: check
|
|
||||||
if: >-
|
|
||||||
github.event.issue.pull_request &&
|
|
||||||
github.event.comment.body == '!deploy' &&
|
|
||||||
(
|
|
||||||
github.event.comment.user.login == github.event.issue.user.login ||
|
|
||||||
github.event.comment.author_association == 'OWNER' ||
|
|
||||||
github.event.comment.author_association == 'MEMBER' ||
|
|
||||||
github.event.comment.author_association == 'COLLABORATOR'
|
|
||||||
)
|
|
||||||
run: |
|
|
||||||
echo "should_dispatch=true" >> $GITHUB_OUTPUT
|
|
||||||
|
|
||||||
- name: Dispatch PR Event
|
|
||||||
if: steps.check.outputs.should_dispatch == 'true'
|
|
||||||
uses: peter-evans/repository-dispatch@v2
|
|
||||||
with:
|
|
||||||
token: ${{ secrets.DISPATCH_TOKEN }}
|
|
||||||
repository: Significant-Gravitas/AutoGPT_cloud_infrastructure
|
|
||||||
event-type: pr-event
|
|
||||||
client-payload: |
|
|
||||||
{
|
|
||||||
"action": "deploy",
|
|
||||||
"pr_number": "${{ github.event.pull_request.number }}",
|
|
||||||
"pr_title": "${{ github.event.pull_request.title }}",
|
|
||||||
"pr_state": "${{ github.event.pull_request.state }}",
|
|
||||||
"repo": "${{ github.repository }}"
|
|
||||||
}
|
|
||||||
|
|
||||||
- name: Dispatch PR Closure Event
|
|
||||||
if: github.event.action == 'closed' && contains(github.event.pull_request.comments.*.body, '!deploy')
|
|
||||||
uses: peter-evans/repository-dispatch@v2
|
|
||||||
with:
|
|
||||||
token: ${{ secrets.DISPATCH_TOKEN }}
|
|
||||||
repository: Significant-Gravitas/AutoGPT_cloud_infrastructure
|
|
||||||
event-type: pr-event
|
|
||||||
client-payload: |
|
|
||||||
{
|
|
||||||
"action": "undeploy",
|
|
||||||
"pr_number": "${{ github.event.pull_request.number }}",
|
|
||||||
"pr_title": "${{ github.event.pull_request.title }}",
|
|
||||||
"pr_state": "${{ github.event.pull_request.state }}",
|
|
||||||
"repo": "${{ github.repository }}"
|
|
||||||
}
|
|
Loading…
Reference in New Issue