11name : Delete Review App
22
33on :
4+ pull_request :
5+ types : [closed]
46 issue_comment :
57 types : [created]
68
@@ -13,33 +15,17 @@ permissions:
1315env :
1416 CPLN_ORG : ${{ secrets.CPLN_ORG }}
1517 CPLN_TOKEN : ${{ secrets.CPLN_TOKEN }}
16- APP_NAME : qa-react-webpack-rails-tutorial-pr-${{ github.event.issue.number }}
17- PR_NUMBER : ${{ github.event.issue.number }}
18+ APP_NAME : qa-react-webpack-rails-tutorial-pr-${{ github.event.pull_request.number || github.event. issue.number }}
19+ PR_NUMBER : ${{ github.event.pull_request.number || github.event. issue.number }}
1820
1921jobs :
20- debug-trigger :
21- if : always()
22- runs-on : ubuntu-latest
23- steps :
24- - name : Debug Trigger Conditions
25- env :
26- EVENT_NAME : ${{ github.event_name }}
27- IS_PR : ${{ toJSON(github.event.issue.pull_request) }}
28- COMMENT : ${{ github.event.comment.body }}
29- run : |
30- echo "Debug information for delete-review-app command:"
31- echo "Event name: $EVENT_NAME"
32- echo "Is PR (raw): $IS_PR"
33- echo "Comment body: $COMMENT"
34- echo "Raw event payload:"
35- echo '${{ toJSON(github.event) }}'
36-
3722 Process-Delete-Command :
38- needs : debug-trigger
3923 if : |
40- github.event_name == 'issue_comment' &&
41- github.event.issue.pull_request &&
42- github.event.comment.body == '/delete-review-app'
24+ (github.event_name == 'issue_comment' &&
25+ github.event.issue.pull_request &&
26+ github.event.comment.body == '/delete-review-app') ||
27+ (github.event_name == 'pull_request' &&
28+ github.event.action == 'closed')
4329 runs-on : ubuntu-latest
4430
4531 steps :
@@ -55,23 +41,91 @@ jobs:
5541 done
5642
5743 if [ ${#missing_secrets[@]} -ne 0 ]; then
58- echo " Required secrets are not set: ${missing_secrets[*]}"
44+ echo "Required secrets are not set: ${missing_secrets[*]}"
5945 exit 1
6046 fi
6147
6248 - name : Setup Environment
6349 uses : ./.github/actions/setup-environment
6450
51+ - name : Set shared functions
52+ id : shared-functions
53+ uses : actions/github-script@v7
54+ with :
55+ script : |
56+ core.exportVariable('GET_CONSOLE_LINK', `
57+ function getConsoleLink(prNumber) {
58+ return ' [Control Plane Console for Review App with PR #' + prNumber + '](' +
59+ 'https://console.cpln.io/org/' + process.env.CPLN_ORG + '/workloads/' + process.env.APP_NAME + ')';
60+ }
61+ `);
62+
63+ - name : Initialize Delete
64+ id : init-delete
65+ uses : actions/github-script@v7
66+ with :
67+ script : |
68+ eval(process.env.GET_CONSOLE_LINK);
69+
70+ async function getWorkflowUrl(runId) {
71+ // Get the current job ID
72+ const jobs = await github.rest.actions.listJobsForWorkflowRun({
73+ owner: context.repo.owner,
74+ repo: context.repo.repo,
75+ run_id: runId
76+ });
77+
78+ const currentJob = jobs.data.jobs.find(job => job.status === 'in_progress');
79+ const jobId = currentJob?.id;
80+
81+ if (!jobId) {
82+ console.log('Warning: Could not find current job ID');
83+ return `${process.env.GITHUB_SERVER_URL}/${context.repo.owner}/${context.repo.repo}/actions/runs/${runId}`;
84+ }
85+
86+ return `${process.env.GITHUB_SERVER_URL}/${context.repo.owner}/${context.repo.repo}/actions/runs/${runId}/job/${jobId}`;
87+ }
88+
89+ const workflowUrl = await getWorkflowUrl(context.runId);
90+
91+ const comment = await github.rest.issues.createComment({
92+ issue_number: process.env.PR_NUMBER,
93+ owner: context.repo.owner,
94+ repo: context.repo.repo,
95+ body: [
96+ ' Starting app deletion...',
97+ '',
98+ ' [View Delete Logs](' + workflowUrl + ')',
99+ '',
100+ getConsoleLink(process.env.PR_NUMBER)
101+ ].join('\n')
102+ });
103+
104+ return {
105+ commentId: comment.data.id,
106+ workflowUrl
107+ };
108+
109+ - name : Set workflow URL
110+ run : |
111+ echo "WORKFLOW_URL=${{ fromJSON(steps.init-delete.outputs.result).workflowUrl }}" >> $GITHUB_ENV
112+
65113 - name : Create Initial Delete Comment
66114 id : init-delete
67115 uses : actions/github-script@v7
68116 with :
69117 script : |
118+ let message = '🗑️ Starting app deletion';
119+ if ('${{ github.event_name }}' === 'pull_request') {
120+ const merged = '${{ github.event.pull_request.merged }}' === 'true';
121+ message += merged ? ' (PR merged)' : ' (PR closed)';
122+ }
123+
70124 const comment = await github.rest.issues.createComment({
71125 issue_number: process.env.PR_NUMBER,
72126 owner: context.repo.owner,
73127 repo: context.repo.repo,
74- body: ' Starting app deletion...'
128+ body: message
75129 });
76130 return { commentId: comment.data.id };
77131
@@ -89,21 +143,28 @@ jobs:
89143 uses : actions/github-script@v7
90144 with :
91145 script : |
146+ eval(process.env.GET_CONSOLE_LINK);
147+
92148 const success = '${{ job.status }}' === 'success';
93149 const prNumber = process.env.PR_NUMBER;
94- const cpConsoleUrl = `https://console.cpln.io/org/${process.env.CPLN_ORG}/workloads/${process.env.APP_NAME}`;
95150
96- const message = success
97- ? ' Review app for PR #' + prNumber + ' was successfully deleted'
98- : [
99- ' Review app for PR #' + prNumber + ' failed to be deleted',
100- '',
101- '[Control Plane Console for Review App with PR #' + prNumber + '](' + cpConsoleUrl + ')'
102- ].join('\n');
151+ const successMessage = [
152+ '✅ Review app for PR #' + prNumber + ' was successfully deleted',
153+ '',
154+ ' [View Completed Delete Logs](' + process.env.WORKFLOW_URL + ')'
155+ ].join('\n');
156+
157+ const failureMessage = [
158+ '❌ Review app for PR #' + prNumber + ' failed to be deleted',
159+ '',
160+ ' [View Delete Logs with Errors](' + process.env.WORKFLOW_URL + ')',
161+ '',
162+ getConsoleLink(prNumber)
163+ ].join('\n');
103164
104165 await github.rest.issues.updateComment({
105166 owner: context.repo.owner,
106167 repo: context.repo.repo,
107168 comment_id: ${{ fromJSON(steps.init-delete.outputs.result).commentId }},
108- body: message
169+ body: success ? successMessage : failureMessage
109170 });
0 commit comments