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