From fe30326e0b5bbb35e67cac491abe1ce0c73de4c8 Mon Sep 17 00:00:00 2001 From: Joel von der Weid <joel.von-der-weid@hesge.ch> Date: Wed, 3 Jul 2024 13:30:00 +0200 Subject: [PATCH] Add allowSonarFailure feature --- .../migration.sql | 2 ++ .../migration.sql | 2 ++ ExpressAPI/prisma/schema.prisma | 22 ++++++++++--------- ExpressAPI/src/routes/AssignmentRoutes.ts | 10 ++++++++- ExpressAPI/src/routes/ExerciseRoutes.ts | 21 ++++++++++++------ 5 files changed, 39 insertions(+), 18 deletions(-) create mode 100644 ExpressAPI/prisma/migrations/20240703072757_add_sonar_in_result/migration.sql create mode 100644 ExpressAPI/prisma/migrations/20240703073048_add_allowsonarfailure/migration.sql 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 0000000..4d88744 --- /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 0000000..ecaab69 --- /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 764785b..29ac243 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 a5cce0e..f5f7d22 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 1762ea7..7792151 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 } }); -- GitLab