diff --git a/ExpressAPI/prisma/migrations/20240703072757_add_sonar_in_result/migration.sql b/ExpressAPI/prisma/migrations/20240703072757_add_sonar_in_result/migration.sql new file mode 100644 index 0000000000000000000000000000000000000000..4d88744bee17d4c91082c643a9dad5dd00cc00ce --- /dev/null +++ b/ExpressAPI/prisma/migrations/20240703072757_add_sonar_in_result/migration.sql @@ -0,0 +1,2 @@ +-- AlterTable +ALTER TABLE `Result` ADD COLUMN `sonarGatePass` BOOLEAN NULL; diff --git a/ExpressAPI/prisma/migrations/20240703073048_add_allowsonarfailure/migration.sql b/ExpressAPI/prisma/migrations/20240703073048_add_allowsonarfailure/migration.sql new file mode 100644 index 0000000000000000000000000000000000000000..ecaab699d3b281e92fca1ef81a4711a5985b634b --- /dev/null +++ b/ExpressAPI/prisma/migrations/20240703073048_add_allowsonarfailure/migration.sql @@ -0,0 +1,2 @@ +-- AlterTable +ALTER TABLE `Assignment` ADD COLUMN `allowSonarFailure` BOOLEAN NOT NULL DEFAULT true; diff --git a/ExpressAPI/prisma/schema.prisma b/ExpressAPI/prisma/schema.prisma index 87bf7d41c679ba53141669a0b538c6a5c5c41ccd..89215602024d3d16aeff86d0af68abc09ddb2adb 100644 --- a/ExpressAPI/prisma/schema.prisma +++ b/ExpressAPI/prisma/schema.prisma @@ -37,11 +37,12 @@ model Assignment { published Boolean @default(false) language Language @default(other) - useSonar Boolean @default(false) + useSonar Boolean @default(false) + allowSonarFailure Boolean @default(true) sonarKey String? - sonarCreationInfo Json? @db.Json + sonarCreationInfo Json? @db.Json sonarGate String? - sonarProfiles Json? @db.Json + sonarProfiles Json? @db.Json exercises Exercise[] staff User[] @@ -70,13 +71,14 @@ model Exercise { } model Result { - exerciseId String @db.Char(36) - dateTime DateTime @default(now()) - success Boolean - exitCode Int - commit Json @db.Json - results Json @db.Json - files Json @db.Json + exerciseId String @db.Char(36) + dateTime DateTime @default(now()) + success Boolean + sonarGatePass Boolean? + exitCode Int + commit Json @db.Json + results Json @db.Json + files Json @db.Json exercise Exercise @relation(fields: [exerciseId], references: [id], onDelete: Cascade, onUpdate: Cascade) diff --git a/ExpressAPI/src/routes/AssignmentRoutes.ts b/ExpressAPI/src/routes/AssignmentRoutes.ts index 640cdcc72395039249d8a8162025027251a941aa..4e21afcac1800c035ef981004045e7b6aa652431 100644 --- a/ExpressAPI/src/routes/AssignmentRoutes.ts +++ b/ExpressAPI/src/routes/AssignmentRoutes.ts @@ -53,6 +53,11 @@ class AssignmentRoutes implements RoutesManager { notEmpty : true, isBoolean: true }, + allowSonarFailure: { + trim : true, + notEmpty : false, + isBoolean: true + }, language: { trim : true, notEmpty: true, @@ -100,9 +105,10 @@ class AssignmentRoutes implements RoutesManager { private async createAssignment(req: express.Request, res: express.Response) { const params: { - name: string, members: Array<GitlabUser>, template: string, useSonar: string, sonarGate: string, sonarProfiles: string, language: string + name: string, members: Array<GitlabUser>, template: string, useSonar: string, sonarGate: string, sonarProfiles: string, language: string, allowSonarFailure: string | undefined } = req.body; const useSonar = params.useSonar === 'true'; + const allowSonarFailure = params.allowSonarFailure === 'true'; params.members = [ await req.session.profile.gitlabProfile.value, ...params.members ]; params.members = params.members.removeObjectDuplicates(gitlabUser => gitlabUser.id); @@ -205,6 +211,7 @@ class AssignmentRoutes implements RoutesManager { gitlabLastInfo : repository as unknown as Prisma.JsonObject, gitlabLastInfoDate: new Date(), useSonar : useSonar, + allowSonarFailure : allowSonarFailure, sonarKey : sonarProject?.project.key, sonarCreationInfo : sonarProject?.project, sonarGate : params.sonarGate, diff --git a/ExpressAPI/src/routes/ExerciseRoutes.ts b/ExpressAPI/src/routes/ExerciseRoutes.ts index cf3a4ddfdb1a2265c663a251529e9d2a124ce7a7..8d929d3fed4f01bd021a98ca7ca0b3d9ed644398 100644 --- a/ExpressAPI/src/routes/ExerciseRoutes.ts +++ b/ExpressAPI/src/routes/ExerciseRoutes.ts @@ -68,6 +68,11 @@ class ExerciseRoutes implements RoutesManager { archiveBase64: { isBase64: true, notEmpty: true + }, + sonarGatePass: { + trim : true, + notEmpty : false, + isBoolean: true } }; @@ -278,17 +283,19 @@ class ExerciseRoutes implements RoutesManager { } 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 sonarGate = params.sonarGatePass === "true"; const result = await db.result.create({ data: { - exerciseId: exercise.id, - exitCode : params.exitCode, - success : params.results.success!, - commit : params.commit, - results : params.results as unknown as Prisma.JsonObject, - files : params.files + exerciseId : exercise.id, + exitCode : params.exitCode, + success : params.results.success!, + sonarGatePass: sonarGate, + commit : params.commit, + results : params.results as unknown as Prisma.JsonObject, + files : params.files } });