diff --git a/helpers/Dojo/SharedAssignmentHelper.ts b/helpers/Dojo/SharedAssignmentHelper.ts
index 8b52f8aa55fe3c4ce9c34f40f10545f59c377d29..9eb156d0099541f1ab43e6b5268a91cbf96d8fbe 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.'
+                }
+            };
+        }
+    }
 }