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 764785be5cc73ccb019226481cf393ffe853b43f..29ac2434bbe052ed412ef061ba1ca5a82fd077c6 100644 --- a/ExpressAPI/prisma/schema.prisma +++ b/ExpressAPI/prisma/schema.prisma @@ -45,11 +45,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[] @@ -83,13 +84,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 a5cce0e9d0f475b19c21724171cc0ba21594a280..f5f7d225d22743b6704bbead19cd6c1840f145f3 100644 --- a/ExpressAPI/src/routes/AssignmentRoutes.ts +++ b/ExpressAPI/src/routes/AssignmentRoutes.ts @@ -50,6 +50,11 @@ class AssignmentRoutes implements RoutesManager { notEmpty : true, isBoolean: true }, + allowSonarFailure: { + trim : true, + notEmpty : false, + isBoolean: true + }, language: { trim : true, notEmpty: true, @@ -143,9 +148,10 @@ class AssignmentRoutes implements RoutesManager { private async createAssignment(req: express.Request, res: express.Response) { 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; 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); @@ -221,6 +227,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, @@ -242,6 +249,7 @@ class AssignmentRoutes implements RoutesManager { } } }), 'Database error') as Assignment; + req.session.sendResponse(res, StatusCodes.OK, assignment); } catch ( error ) { diff --git a/ExpressAPI/src/routes/ExerciseRoutes.ts b/ExpressAPI/src/routes/ExerciseRoutes.ts index 1762ea7e5c4e23511793c57cabc6efd3037b6509..77921510c49c3b9d409379273937de2dc6859c73 100644 --- a/ExpressAPI/src/routes/ExerciseRoutes.ts +++ b/ExpressAPI/src/routes/ExerciseRoutes.ts @@ -64,6 +64,11 @@ class ExerciseRoutes implements RoutesManager { archiveBase64: { isBase64: true, notEmpty: true + }, + sonarGatePass: { + trim : true, + notEmpty : false, + isBoolean: true } }; @@ -382,17 +387,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 } });