From 6049ef64c8350338b64a6c99463744814b637a95 Mon Sep 17 00:00:00 2001 From: chris48s <chris48s@users.noreply.github.com> Date: Thu, 15 Dec 2022 22:41:33 +0000 Subject: [PATCH] handle workflow runs that do not have a conclusion (#8717) Co-authored-by: repo-ranger[bot] <39074581+repo-ranger[bot]@users.noreply.github.com> --- .../github-actions-workflow-status.service.js | 22 ++++++++++++++-- .../github-actions-workflow-status.tester.js | 26 +++++++++++++++++++ 2 files changed, 46 insertions(+), 2 deletions(-) diff --git a/services/github/github-actions-workflow-status.service.js b/services/github/github-actions-workflow-status.service.js index 2f18965895..466e90732a 100644 --- a/services/github/github-actions-workflow-status.service.js +++ b/services/github/github-actions-workflow-status.service.js @@ -8,8 +8,23 @@ const schema = Joi.object({ workflow_runs: Joi.array() .items( Joi.object({ + status: Joi.equal( + 'completed', + 'action_required', + 'cancelled', + 'failure', + 'neutral', + 'skipped', + 'stale', + 'success', + 'timed_out', + 'in_progress', + 'queued', + 'requested', + 'waiting' + ).required(), conclusion: Joi.alternatives() - .try(isBuildStatus, Joi.equal('no status')) + .try(isBuildStatus, Joi.equal('no status'), null) .required(), }) ) @@ -96,6 +111,9 @@ export default class GithubActionsWorkflowStatus extends GithubAuthV3Service { if (data.workflow_runs.length === 0) { throw new NotFound({ prettyMessage: 'branch or event not found' }) } - return renderBuildStatusBadge({ status: data.workflow_runs[0].conclusion }) + const status = data.workflow_runs[0].conclusion + ? data.workflow_runs[0].conclusion + : data.workflow_runs[0].status.replace('_', ' ') + return renderBuildStatusBadge({ status }) } } diff --git a/services/github/github-actions-workflow-status.tester.js b/services/github/github-actions-workflow-status.tester.js index 9ebc19e4a6..08386c25ae 100644 --- a/services/github/github-actions-workflow-status.tester.js +++ b/services/github/github-actions-workflow-status.tester.js @@ -57,3 +57,29 @@ t.create('valid workflow (with event)') label: 'build', message: isWorkflowStatus, }) + +t.create('workflow in progress') + .get('/actions/toolkit/unit-tests.yml.json?branch=main') + .intercept(nock => + nock('https://api.github.com') + .get('/repos/actions/toolkit/actions/workflows/unit-tests.yml/runs') + .query({ + branch: 'main', + page: '1', + per_page: '1', + exclude_pull_requests: 'true', + }) + .reply(200, { + workflow_runs: [ + { + status: 'in_progress', + conclusion: null, + }, + ], + }) + ) + .expectBadge({ + label: 'build', + message: 'in progress', + color: 'lightgrey', + }) -- GitLab