From e3da2c33a57294b60bcca033df51a78cb36a5417 Mon Sep 17 00:00:00 2001 From: Andrew Gable Date: Fri, 14 Jan 2022 16:36:43 -0700 Subject: [PATCH] Add Workflow run URL to `triggerWorkflowAndWait` --- .../actions/triggerWorkflowAndWait/index.js | 18 +++++++++++++----- .../triggerWorkflowAndWait.js | 18 +++++++++++++----- 2 files changed, 26 insertions(+), 10 deletions(-) diff --git a/.github/actions/triggerWorkflowAndWait/index.js b/.github/actions/triggerWorkflowAndWait/index.js index 16a2549efeeb..9ba263668e8e 100644 --- a/.github/actions/triggerWorkflowAndWait/index.js +++ b/.github/actions/triggerWorkflowAndWait/index.js @@ -35,6 +35,12 @@ const WORKFLOW_COMPLETION_TIMEOUT = 7200000; */ const POLL_RATE = 10000; +/** + * URL prefixed to a specific workflow run + * @type {string} + */ +const WORKFLOW_RUN_URL_PREFIX = 'https://github.com/Expensify/App/actions/runs/'; + const run = function () { const workflow = core.getInput('WORKFLOW', {required: true}); const inputs = ActionUtils.getJSONInput('INPUTS', {required: false}, {}); @@ -55,6 +61,7 @@ const run = function () { // 4) Then we can poll and wait for that new workflow run to conclude let previousWorkflowRunID; let newWorkflowRunID; + let newWorkflowRunURL; let hasNewWorkflowStarted = false; let workflowCompleted = false; return GithubUtils.getLatestWorkflowRunID(workflow) @@ -89,6 +96,7 @@ const run = function () { return GithubUtils.getLatestWorkflowRunID(workflow) .then((lastWorkflowRunID) => { newWorkflowRunID = lastWorkflowRunID; + newWorkflowRunURL = WORKFLOW_RUN_URL_PREFIX + newWorkflowRunID; hasNewWorkflowStarted = newWorkflowRunID !== previousWorkflowRunID; if (!hasNewWorkflowStarted) { @@ -104,7 +112,7 @@ const run = function () { process.exit(1); } } else { - console.log(`\nšŸš€ New ${workflow} run with ID ${newWorkflowRunID} has started`); + console.log(`\nšŸš€ New ${workflow} run ${newWorkflowRunURL} has started`); } }) .catch((err) => { @@ -123,7 +131,7 @@ const run = function () { () => !workflowCompleted && waitTimer < WORKFLOW_COMPLETION_TIMEOUT, _.throttle( () => { - console.log(`\nā³ Waiting for workflow run ${newWorkflowRunID} to finish...`); + console.log(`\nā³ Waiting for workflow run ${newWorkflowRunURL} to finish...`); return GithubUtils.octokit.actions.getWorkflowRun({ owner: GithubUtils.GITHUB_OWNER, repo: GithubUtils.EXPENSIFY_CASH_REPO, @@ -134,7 +142,7 @@ const run = function () { waitTimer += POLL_RATE; if (waitTimer > WORKFLOW_COMPLETION_TIMEOUT) { // eslint-disable-next-line max-len - const err = new Error(`After ${WORKFLOW_COMPLETION_TIMEOUT / 1000 / 60 / 60} hours, workflow ${newWorkflowRunID} did not complete.`); + const err = new Error(`After ${WORKFLOW_COMPLETION_TIMEOUT / 1000 / 60 / 60} hours, workflow ${newWorkflowRunURL} did not complete.`); console.error(err); core.setFailed(err); process.exit(1); @@ -142,10 +150,10 @@ const run = function () { if (workflowCompleted) { if (data.conclusion === 'success') { // eslint-disable-next-line max-len - console.log(`\nšŸŽ‰ ${workflow} run ${newWorkflowRunID} completed successfully! šŸŽ‰`); + console.log(`\nšŸŽ‰ ${workflow} run ${newWorkflowRunURL} completed successfully! šŸŽ‰`); } else { // eslint-disable-next-line max-len - const err = new Error(`šŸ™…ā€ ${workflow} run ${newWorkflowRunID} finished with conclusion ${data.conclusion}`); + const err = new Error(`šŸ™…ā€ ${workflow} run ${newWorkflowRunURL} finished with conclusion ${data.conclusion}`); console.error(err.message); core.setFailed(err); process.exit(1); diff --git a/.github/actions/triggerWorkflowAndWait/triggerWorkflowAndWait.js b/.github/actions/triggerWorkflowAndWait/triggerWorkflowAndWait.js index 91fc6fe774b5..245a3ba6bde6 100644 --- a/.github/actions/triggerWorkflowAndWait/triggerWorkflowAndWait.js +++ b/.github/actions/triggerWorkflowAndWait/triggerWorkflowAndWait.js @@ -25,6 +25,12 @@ const WORKFLOW_COMPLETION_TIMEOUT = 7200000; */ const POLL_RATE = 10000; +/** + * URL prefixed to a specific workflow run + * @type {string} + */ +const WORKFLOW_RUN_URL_PREFIX = 'https://github.com/Expensify/App/actions/runs/'; + const run = function () { const workflow = core.getInput('WORKFLOW', {required: true}); const inputs = ActionUtils.getJSONInput('INPUTS', {required: false}, {}); @@ -45,6 +51,7 @@ const run = function () { // 4) Then we can poll and wait for that new workflow run to conclude let previousWorkflowRunID; let newWorkflowRunID; + let newWorkflowRunURL; let hasNewWorkflowStarted = false; let workflowCompleted = false; return GithubUtils.getLatestWorkflowRunID(workflow) @@ -79,6 +86,7 @@ const run = function () { return GithubUtils.getLatestWorkflowRunID(workflow) .then((lastWorkflowRunID) => { newWorkflowRunID = lastWorkflowRunID; + newWorkflowRunURL = WORKFLOW_RUN_URL_PREFIX + newWorkflowRunID; hasNewWorkflowStarted = newWorkflowRunID !== previousWorkflowRunID; if (!hasNewWorkflowStarted) { @@ -94,7 +102,7 @@ const run = function () { process.exit(1); } } else { - console.log(`\nšŸš€ New ${workflow} run with ID ${newWorkflowRunID} has started`); + console.log(`\nšŸš€ New ${workflow} run ${newWorkflowRunURL} has started`); } }) .catch((err) => { @@ -113,7 +121,7 @@ const run = function () { () => !workflowCompleted && waitTimer < WORKFLOW_COMPLETION_TIMEOUT, _.throttle( () => { - console.log(`\nā³ Waiting for workflow run ${newWorkflowRunID} to finish...`); + console.log(`\nā³ Waiting for workflow run ${newWorkflowRunURL} to finish...`); return GithubUtils.octokit.actions.getWorkflowRun({ owner: GithubUtils.GITHUB_OWNER, repo: GithubUtils.EXPENSIFY_CASH_REPO, @@ -124,7 +132,7 @@ const run = function () { waitTimer += POLL_RATE; if (waitTimer > WORKFLOW_COMPLETION_TIMEOUT) { // eslint-disable-next-line max-len - const err = new Error(`After ${WORKFLOW_COMPLETION_TIMEOUT / 1000 / 60 / 60} hours, workflow ${newWorkflowRunID} did not complete.`); + const err = new Error(`After ${WORKFLOW_COMPLETION_TIMEOUT / 1000 / 60 / 60} hours, workflow ${newWorkflowRunURL} did not complete.`); console.error(err); core.setFailed(err); process.exit(1); @@ -132,10 +140,10 @@ const run = function () { if (workflowCompleted) { if (data.conclusion === 'success') { // eslint-disable-next-line max-len - console.log(`\nšŸŽ‰ ${workflow} run ${newWorkflowRunID} completed successfully! šŸŽ‰`); + console.log(`\nšŸŽ‰ ${workflow} run ${newWorkflowRunURL} completed successfully! šŸŽ‰`); } else { // eslint-disable-next-line max-len - const err = new Error(`šŸ™…ā€ ${workflow} run ${newWorkflowRunID} finished with conclusion ${data.conclusion}`); + const err = new Error(`šŸ™…ā€ ${workflow} run ${newWorkflowRunURL} finished with conclusion ${data.conclusion}`); console.error(err.message); core.setFailed(err); process.exit(1);