Skip to content
Snippets Groups Projects
Commit fe30326e authored by joel.vonderwe's avatar joel.vonderwe Committed by michael.minelli
Browse files

Add allowSonarFailure feature

parent a2f464ef
No related branches found
No related tags found
No related merge requests found
Pipeline #39015 failed
-- AlterTable
ALTER TABLE `Result` ADD COLUMN `sonarGatePass` BOOLEAN NULL;
-- AlterTable
ALTER TABLE `Assignment` ADD COLUMN `allowSonarFailure` BOOLEAN NOT NULL DEFAULT true;
...@@ -46,6 +46,7 @@ model Assignment { ...@@ -46,6 +46,7 @@ model Assignment {
language Language @default(other) language Language @default(other)
useSonar Boolean @default(false) useSonar Boolean @default(false)
allowSonarFailure Boolean @default(true)
sonarKey String? sonarKey String?
sonarCreationInfo Json? @db.Json sonarCreationInfo Json? @db.Json
sonarGate String? sonarGate String?
...@@ -86,6 +87,7 @@ model Result { ...@@ -86,6 +87,7 @@ model Result {
exerciseId String @db.Char(36) exerciseId String @db.Char(36)
dateTime DateTime @default(now()) dateTime DateTime @default(now())
success Boolean success Boolean
sonarGatePass Boolean?
exitCode Int exitCode Int
commit Json @db.Json commit Json @db.Json
results Json @db.Json results Json @db.Json
......
...@@ -50,6 +50,11 @@ class AssignmentRoutes implements RoutesManager { ...@@ -50,6 +50,11 @@ class AssignmentRoutes implements RoutesManager {
notEmpty : true, notEmpty : true,
isBoolean: true isBoolean: true
}, },
allowSonarFailure: {
trim : true,
notEmpty : false,
isBoolean: true
},
language: { language: {
trim : true, trim : true,
notEmpty: true, notEmpty: true,
...@@ -143,9 +148,10 @@ class AssignmentRoutes implements RoutesManager { ...@@ -143,9 +148,10 @@ class AssignmentRoutes implements RoutesManager {
private async createAssignment(req: express.Request, res: express.Response) { private async createAssignment(req: express.Request, res: express.Response) {
const params: { const params: {
name: string, members: Array<Gitlab.UserSchema>, template: string, useSonar: string, sonarGate: string, sonarProfiles: string, language: string name: string, members: Array<Gitlab.UserSchema>, template: string, useSonar: string, sonarGate: string, sonarProfiles: string, language: string, allowSonarFailure: string | undefined
} = req.body; } = req.body;
const useSonar = params.useSonar === 'true'; const useSonar = params.useSonar === 'true';
const allowSonarFailure = params.allowSonarFailure === 'true';
params.members = [ await req.session.profile.gitlabProfile.value, ...params.members ]; params.members = [ await req.session.profile.gitlabProfile.value, ...params.members ];
params.members = params.members.removeObjectDuplicates(gitlabUser => gitlabUser.id); params.members = params.members.removeObjectDuplicates(gitlabUser => gitlabUser.id);
...@@ -221,6 +227,7 @@ class AssignmentRoutes implements RoutesManager { ...@@ -221,6 +227,7 @@ class AssignmentRoutes implements RoutesManager {
gitlabLastInfo : repository as unknown as Prisma.JsonObject, gitlabLastInfo : repository as unknown as Prisma.JsonObject,
gitlabLastInfoDate: new Date(), gitlabLastInfoDate: new Date(),
useSonar : useSonar, useSonar : useSonar,
allowSonarFailure : allowSonarFailure,
sonarKey : sonarProject?.project.key, sonarKey : sonarProject?.project.key,
sonarCreationInfo : sonarProject?.project, sonarCreationInfo : sonarProject?.project,
sonarGate : params.sonarGate, sonarGate : params.sonarGate,
...@@ -243,6 +250,7 @@ class AssignmentRoutes implements RoutesManager { ...@@ -243,6 +250,7 @@ class AssignmentRoutes implements RoutesManager {
} }
}), 'Database error') as Assignment; }), 'Database error') as Assignment;
req.session.sendResponse(res, StatusCodes.OK, assignment); req.session.sendResponse(res, StatusCodes.OK, assignment);
} catch ( error ) { } catch ( error ) {
/* Empty */ /* Empty */
......
...@@ -64,6 +64,11 @@ class ExerciseRoutes implements RoutesManager { ...@@ -64,6 +64,11 @@ class ExerciseRoutes implements RoutesManager {
archiveBase64: { archiveBase64: {
isBase64: true, isBase64: true,
notEmpty: true notEmpty: true
},
sonarGatePass: {
trim : true,
notEmpty : false,
isBoolean: true
} }
}; };
...@@ -382,14 +387,16 @@ class ExerciseRoutes implements RoutesManager { ...@@ -382,14 +387,16 @@ class ExerciseRoutes implements RoutesManager {
} }
private async createResult(req: express.Request, res: express.Response) { private async createResult(req: express.Request, res: express.Response) {
const params: { exitCode: number, commit: Record<string, string>, results: ExerciseResultsFile, files: Array<IFileDirStat>, archiveBase64: string } = req.body; const params: { exitCode: number, commit: Record<string, string>, results: ExerciseResultsFile, files: Array<IFileDirStat>, archiveBase64: string, sonarGatePass: string | undefined } = req.body;
const exercise: Exercise = req.boundParams.exercise!; const exercise: Exercise = req.boundParams.exercise!;
const sonarGate = params.sonarGatePass === "true";
const result = await db.result.create({ const result = await db.result.create({
data: { data: {
exerciseId : exercise.id, exerciseId : exercise.id,
exitCode : params.exitCode, exitCode : params.exitCode,
success : params.results.success!, success : params.results.success!,
sonarGatePass: sonarGate,
commit : params.commit, commit : params.commit,
results : params.results as unknown as Prisma.JsonObject, results : params.results as unknown as Prisma.JsonObject,
files : params.files files : params.files
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment