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