From 21b0cb40e3a9535247e5ed171733d4aec73d38e3 Mon Sep 17 00:00:00 2001 From: Joel von der Weid <joel.von-der-weid@hesge.ch> Date: Wed, 22 May 2024 10:31:32 +0200 Subject: [PATCH] Test sonar qualities before creating assignment --- .../subcommands/AssignmentCreateCommand.ts | 14 ++++++++++++++ NodeApp/src/managers/DojoBackendManager.ts | 9 +++++++++ NodeApp/src/shared | 2 +- NodeApp/src/sharedByClients | 2 +- 4 files changed, 25 insertions(+), 2 deletions(-) diff --git a/NodeApp/src/commander/assignment/subcommands/AssignmentCreateCommand.ts b/NodeApp/src/commander/assignment/subcommands/AssignmentCreateCommand.ts index af5395e..79fd5e4 100644 --- a/NodeApp/src/commander/assignment/subcommands/AssignmentCreateCommand.ts +++ b/NodeApp/src/commander/assignment/subcommands/AssignmentCreateCommand.ts @@ -96,6 +96,20 @@ class AssignmentCreateCommand extends CommanderCommand { languagesSpinner.succeed(`Language "${ options.language }" is supported`); + if ((sonarGate ?? "") !== "" || sonarProfiles.length > 0) { + const qualitiesSpinner: ora.Ora = ora('Checking sonar qualities').start(); + + // SonarQube quality gate and profiles + const result = await DojoBackendManager.testSonarQualities(sonarGate ?? "", sonarProfiles); + if (!result.valid) { + const invalid = (result.badGate == undefined ? result.badProfiles : [result.badGate, ...result.badProfiles]); + qualitiesSpinner.fail(`Invalid quality gate or profiles : ${invalid}`); + return; + } + + qualitiesSpinner.succeed(`Quality gate and profiles are valid`); + } + if ( options.template ) { templateIdOrNamespace = options.template; diff --git a/NodeApp/src/managers/DojoBackendManager.ts b/NodeApp/src/managers/DojoBackendManager.ts index a346758..46e7c6a 100644 --- a/NodeApp/src/managers/DojoBackendManager.ts +++ b/NodeApp/src/managers/DojoBackendManager.ts @@ -254,6 +254,15 @@ class DojoBackendManager { const resp = await axios.get<DojoBackendResponse<string[]>>(this.getApiUrl(ApiRoute.LANGUAGES)); return resp.data.data; } + + public async testSonarQualities(gate: string, profiles: string[]) { + const resp = await axios.post<DojoBackendResponse<{ valid: boolean, badProfiles: string[], badGate: string | undefined }>>( + this.getApiUrl(ApiRoute.SONAR_QUALITIES), { + gate: gate, + profiles: profiles, + }); + return resp.data.data; + } } diff --git a/NodeApp/src/shared b/NodeApp/src/shared index 102e79d..4d1e63e 160000 --- a/NodeApp/src/shared +++ b/NodeApp/src/shared @@ -1 +1 @@ -Subproject commit 102e79d9b78d79e495f7b82e5e767eb7898248db +Subproject commit 4d1e63ebbbe7e6fec1de74d79a2919047eea5775 diff --git a/NodeApp/src/sharedByClients b/NodeApp/src/sharedByClients index 76e13d9..b54af90 160000 --- a/NodeApp/src/sharedByClients +++ b/NodeApp/src/sharedByClients @@ -1 +1 @@ -Subproject commit 76e13d9d08d52d31ece9a58645ac113c51132c71 +Subproject commit b54af90977a928488d2346fe95635aef567dfacc -- GitLab