You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@airflow.apache.org by po...@apache.org on 2020/12/27 13:52:50 UTC

[airflow-cancel-workflow-runs] 34/44: Added optional message when cancelling workflow. (#6)

This is an automated email from the ASF dual-hosted git repository.

potiuk pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/airflow-cancel-workflow-runs.git

commit 0ba85cabd56ddb3e40adf6dc76ae4bf7ee88461e
Author: Jarek Potiuk <ja...@potiuk.com>
AuthorDate: Wed Oct 7 18:22:15 2020 +0200

    Added optional message when cancelling workflow. (#6)
---
 README.md     | 18 ++++++++++--------
 action.yml    |  4 ++++
 dist/index.js | 13 ++++++++-----
 src/main.ts   | 11 ++++++++---
 4 files changed, 30 insertions(+), 16 deletions(-)

diff --git a/README.md b/README.md
index 7946ea9..a2fcca2 100644
--- a/README.md
+++ b/README.md
@@ -105,14 +105,15 @@ and `schedule` events are no longer needed.
 
 ## Inputs
 
-| Input                  | Required | Default      | Comment                                                                                                                                                                                                          |
-|------------------------|----------|--------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
-| `token`                | yes      |              | The github token passed from `${{ secrets.GITHUB_TOKEN }}`                                                                                                                                                       |
-| `cancelMode`           | no       | `duplicates` | The mode to run cancel on. The available options are `duplicates`, `self`, `failedJobs`, `namedJobs`                                                                                                             |
-| `sourceRunId`          | no       |              | Useful only in `workflow_run` triggered events. It should be set to the id of the workflow triggering the run `${{ github.event.workflow_run.id }}`  in case cancel operation should cancel the source workflow. |
-| `notifyPRCancel`       | no       |              | Boolean. If set to true, it notifies the cancelled PRs with a comment containing reason why they are being cancelled.                                                                                            |
-| `notifyPRMessageStart` | no       |              | Only for workflow_run events triggered by the PRs. If not empty, it notifies those PRs with the message specified at the start of the workflow - adding the link to the triggered workflow_run.                  |
-| `jobNameRegexps`       | no       |              | An array of job name regexps. Only runs containing any job name matching any of of the regexp in this array are considered for cancelling in `failedJobs` and `namedJobs` cancel modes.                          |
+| Input                   | Required | Default      | Comment                                                                                                                                                                                                          |
+|-------------------------|----------|--------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
+| `token`                 | yes      |              | The github token passed from `${{ secrets.GITHUB_TOKEN }}`                                                                                                                                                       |
+| `cancelMode`            | no       | `duplicates` | The mode to run cancel on. The available options are `duplicates`, `self`, `failedJobs`, `namedJobs`                                                                                                             |
+| `sourceRunId`           | no       |              | Useful only in `workflow_run` triggered events. It should be set to the id of the workflow triggering the run `${{ github.event.workflow_run.id }}`  in case cancel operation should cancel the source workflow. |
+| `notifyPRCancel`        | no       |              | Boolean. If set to true, it notifies the cancelled PRs with a comment containing reason why they are being cancelled.                                                                                            |
+| `notifyPRCancelMessage` | no       |              | Optional cancel message to use instead of the default one when notifyPRCancel is true.                                                                                                                           |
+| `notifyPRMessageStart`  | no       |              | Only for workflow_run events triggered by the PRs. If not empty, it notifies those PRs with the message specified at the start of the workflow - adding the link to the triggered workflow_run.                  |
+| `jobNameRegexps`        | no       |              | An array of job name regexps. Only runs containing any job name matching any of of the regexp in this array are considered for cancelling in `failedJobs` and `namedJobs` cancel modes.                          |
 
 The job cancel modes work as follows:
 
@@ -380,6 +381,7 @@ jobs:
           cancelMode: duplicates
           token: ${{ secrets.GITHUB_TOKEN }}
           notifyPRCancel: true
+          notifyPRCancelMessage: Cancelled because image building failed.
           notifyPRMessageStart: |
             Note! The Docker Images for the build are prepared in a separate workflow,
             that you will not see in the list of checks.
diff --git a/action.yml b/action.yml
index 932b45f..0666499 100644
--- a/action.yml
+++ b/action.yml
@@ -16,6 +16,10 @@ inputs:
       Boolean. If set to true, it notifies the cancelled PRs with a comment containing reason why
       they are being cancelled.
     required: false
+  notifyPRCancelMessage:
+    description: |
+      Optional cancel message to use instead of the default one when notifyPRCancel is true.
+    required: false
   notifyPRMessageStart:
     description: |
       Only for workflow_run events triggered by the PRs. If not empty, it notifies those PRs with the
diff --git a/dist/index.js b/dist/index.js
index a7796dd..7f28bf7 100644
--- a/dist/index.js
+++ b/dist/index.js
@@ -1756,7 +1756,7 @@ function findAndCancelRuns(octokit, selfRunId, sourceWorkflowId, sourceRunId, ow
             }
             for (const pullRequestNumber of pullRequestToNotify) {
                 const selfWorkflowRunUrl = `https://github.com/${owner}/${repo}/actions/runs/${selfRunId}`;
-                yield addCommentToPullRequest(octokit, owner, repo, pullRequestNumber, `[The Build Workflow run](${selfWorkflowRunUrl}) is cancelling this PR. ${reason}`);
+                yield addCommentToPullRequest(octokit, owner, repo, pullRequestNumber, `[The Workflow run](${selfWorkflowRunUrl}) is cancelling this PR. ${reason}`);
             }
             core.info('\n######  Finished cancelling runs                  ##########\n');
         }
@@ -1832,7 +1832,7 @@ function getOrigin(octokit, runId, owner, repo) {
         ];
     });
 }
-function performCancelJob(octokit, selfRunId, sourceWorkflowId, sourceRunId, owner, repo, headRepo, headBranch, sourceEventName, cancelMode, notifyPRCancel, notifyPRMessageStart, jobNameRegexps) {
+function performCancelJob(octokit, selfRunId, sourceWorkflowId, sourceRunId, owner, repo, headRepo, headBranch, sourceEventName, cancelMode, notifyPRCancel, notifyPRCancelMessage, notifyPRMessageStart, jobNameRegexps) {
     return __awaiter(this, void 0, void 0, function* () {
         core.info('\n###################################################################################\n');
         core.info(`All parameters: owner: ${owner}, repo: ${repo}, run id: ${sourceRunId}, ` +
@@ -1842,7 +1842,9 @@ function performCancelJob(octokit, selfRunId, sourceWorkflowId, sourceRunId, own
         let reason = '';
         if (cancelMode === CancelMode.SELF) {
             core.info(`# Cancelling source run: ${sourceRunId} for workflow ${sourceWorkflowId}.`);
-            reason = `The job has been cancelled by another workflow.`;
+            reason = notifyPRCancelMessage
+                ? notifyPRCancelMessage
+                : `The job has been cancelled by another workflow.`;
         }
         else if (cancelMode === CancelMode.FAILED_JOBS) {
             core.info(`# Cancel all runs for workflow ${sourceWorkflowId} where job names matching ${jobNameRegexps} failed.`);
@@ -1876,6 +1878,7 @@ function run() {
         const eventName = getRequiredEnv('GITHUB_EVENT_NAME');
         const cancelMode = core.getInput('cancelMode') || CancelMode.DUPLICATES;
         const notifyPRCancel = (core.getInput('notifyPRCancel') || 'false').toLowerCase() === 'true';
+        const notifyPRCancelMessage = core.getInput('notifyPRCancelMessage');
         const notifyPRMessageStart = core.getInput('notifyPRMessageStart');
         const sourceRunId = parseInt(core.getInput('sourceRunId')) || selfRunId;
         const jobNameRegexpsString = core.getInput('jobNameRegexps');
@@ -1923,8 +1926,8 @@ function run() {
                 body: `${notifyPRMessageStart} [The workflow run](${selfWorkflowRunUrl})`
             });
         }
-        const cancelledRuns = yield performCancelJob(octokit, selfRunId, sourceWorkflowId, sourceRunId, owner, repo, headRepo, headBranch, sourceEventName, cancelMode, notifyPRCancel, notifyPRMessageStart, jobNameRegexps);
-        core.setOutput('cancelledRuns', JSON.stringify(cancelledRuns));
+        const cancelledRuns = yield performCancelJob(octokit, selfRunId, sourceWorkflowId, sourceRunId, owner, repo, headRepo, headBranch, sourceEventName, cancelMode, notifyPRCancel, notifyPRCancelMessage, notifyPRMessageStart, jobNameRegexps);
+        verboseOutput('cancelledRuns', JSON.stringify(cancelledRuns));
     });
 }
 run()
diff --git a/src/main.ts b/src/main.ts
index 056ccb8..44ef1bc 100644
--- a/src/main.ts
+++ b/src/main.ts
@@ -444,7 +444,7 @@ async function findAndCancelRuns(
         owner,
         repo,
         pullRequestNumber,
-        `[The Build Workflow run](${selfWorkflowRunUrl}) is cancelling this PR. ${reason}`
+        `[The Workflow run](${selfWorkflowRunUrl}) is cancelling this PR. ${reason}`
       )
     }
     core.info(
@@ -568,6 +568,7 @@ async function performCancelJob(
   sourceEventName: string,
   cancelMode: CancelMode,
   notifyPRCancel: boolean,
+  notifyPRCancelMessage: string,
   notifyPRMessageStart: string,
   jobNameRegexps: string[]
 ): Promise<number[]> {
@@ -587,7 +588,9 @@ async function performCancelJob(
     core.info(
       `# Cancelling source run: ${sourceRunId} for workflow ${sourceWorkflowId}.`
     )
-    reason = `The job has been cancelled by another workflow.`
+    reason = notifyPRCancelMessage
+      ? notifyPRCancelMessage
+      : `The job has been cancelled by another workflow.`
   } else if (cancelMode === CancelMode.FAILED_JOBS) {
     core.info(
       `# Cancel all runs for workflow ${sourceWorkflowId} where job names matching ${jobNameRegexps} failed.`
@@ -643,6 +646,7 @@ async function run(): Promise<void> {
     (core.getInput('cancelMode') as CancelMode) || CancelMode.DUPLICATES
   const notifyPRCancel =
     (core.getInput('notifyPRCancel') || 'false').toLowerCase() === 'true'
+  const notifyPRCancelMessage = core.getInput('notifyPRCancelMessage')
   const notifyPRMessageStart = core.getInput('notifyPRMessageStart')
   const sourceRunId = parseInt(core.getInput('sourceRunId')) || selfRunId
   const jobNameRegexpsString = core.getInput('jobNameRegexps')
@@ -732,11 +736,12 @@ async function run(): Promise<void> {
     sourceEventName,
     cancelMode,
     notifyPRCancel,
+    notifyPRCancelMessage,
     notifyPRMessageStart,
     jobNameRegexps
   )
 
-  core.setOutput('cancelledRuns', JSON.stringify(cancelledRuns))
+  verboseOutput('cancelledRuns', JSON.stringify(cancelledRuns))
 }
 
 run()