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;
...@@ -45,11 +45,12 @@ model Assignment { ...@@ -45,11 +45,12 @@ model Assignment {
published Boolean @default(false) published Boolean @default(false)
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?
sonarProfiles Json? @db.Json sonarProfiles Json? @db.Json
exercises Exercise[] exercises Exercise[]
staff User[] staff User[]
...@@ -83,13 +84,14 @@ model Exercise { ...@@ -83,13 +84,14 @@ model Exercise {
} }
model Result { model Result {
exerciseId String @db.Char(36) exerciseId String @db.Char(36)
dateTime DateTime @default(now()) dateTime DateTime @default(now())
success Boolean success Boolean
exitCode Int sonarGatePass Boolean?
commit Json @db.Json exitCode Int
results Json @db.Json commit Json @db.Json
files Json @db.Json results Json @db.Json
files Json @db.Json
exercise Exercise @relation(fields: [exerciseId], references: [id], onDelete: Cascade, onUpdate: Cascade) exercise Exercise @relation(fields: [exerciseId], references: [id], onDelete: Cascade, onUpdate: Cascade)
......
...@@ -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,
...@@ -242,6 +249,7 @@ class AssignmentRoutes implements RoutesManager { ...@@ -242,6 +249,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 ) {
......
...@@ -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,17 +387,19 @@ class ExerciseRoutes implements RoutesManager { ...@@ -382,17 +387,19 @@ 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!,
commit : params.commit, sonarGatePass: sonarGate,
results : params.results as unknown as Prisma.JsonObject, commit : params.commit,
files : params.files results : params.results as unknown as Prisma.JsonObject,
files : params.files
} }
}); });
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment