From 913a7a24e07f11a9f7b237dbf39150effb68947e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C3=ABl=20Minelli?= <michael@minelli.me> Date: Fri, 13 Oct 2023 15:56:28 +0200 Subject: [PATCH] AssignmentHelper => Add function to test if and assignment is publishable --- helpers/Dojo/SharedAssignmentHelper.ts | 35 ++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/helpers/Dojo/SharedAssignmentHelper.ts b/helpers/Dojo/SharedAssignmentHelper.ts index 8b52f8a..9eb156d 100644 --- a/helpers/Dojo/SharedAssignmentHelper.ts +++ b/helpers/Dojo/SharedAssignmentHelper.ts @@ -2,6 +2,10 @@ import Ajv, { ErrorObject, JTDSchemaType } from 'ajv/dist/jtd'; import fs from 'fs'; import JSON5 from 'json5'; import AssignmentFile from '../../types/Dojo/AssignmentFile'; +import GitlabManager from '../../../managers/GitlabManager'; +import GitlabPipelineStatus from '../../types/Gitlab/GitlabPipelineStatus'; +import DojoStatusCode from '../../types/Dojo/DojoStatusCode'; +import GitlabPipeline from '../../types/Gitlab/GitlabPipeline'; class SharedAssignmentHelper { @@ -69,6 +73,37 @@ class SharedAssignmentHelper { }; } } + + async isPublishable(repositoryId: number): Promise<{ isPublishable: boolean, lastPipeline: GitlabPipeline | null, status?: { code: DojoStatusCode, message: string } }> { + const pipelines = await GitlabManager.getRepositoryPipelines(repositoryId, 'main'); + if ( pipelines.length > 0 ) { + const lastPipeline = pipelines[0]; + if ( lastPipeline.status != GitlabPipelineStatus.SUCCESS ) { + return { + isPublishable: false, + lastPipeline : pipelines[0], + status : { + code : DojoStatusCode.ASSIGNMENT_PUBLISH_PIPELINE_FAILED, + message: 'Last pipeline status is not "success".' + } + }; + } else { + return { + isPublishable: true, + lastPipeline : pipelines[0] + }; + } + } else { + return { + isPublishable: false, + lastPipeline : null, + status : { + code : DojoStatusCode.ASSIGNMENT_PUBLISH_NO_PIPELINE, + message: 'No pipeline found for this assignment.' + } + }; + } + } } -- GitLab