From e467c56ba7ec146835877a8c6925c2923226d61d Mon Sep 17 00:00:00 2001 From: Joel von der Weid <joel.von-der-weid@hesge.ch> Date: Tue, 5 Mar 2024 15:07:32 +0100 Subject: [PATCH] Check sonar on assignment creation --- .../subcommands/AssignmentCreateCommand.ts | 13 ++++++++++--- NodeApp/src/managers/DojoBackendManager.ts | 11 ++++++++--- 2 files changed, 18 insertions(+), 6 deletions(-) diff --git a/NodeApp/src/commander/assignment/subcommands/AssignmentCreateCommand.ts b/NodeApp/src/commander/assignment/subcommands/AssignmentCreateCommand.ts index d84b7e4..f40babe 100644 --- a/NodeApp/src/commander/assignment/subcommands/AssignmentCreateCommand.ts +++ b/NodeApp/src/commander/assignment/subcommands/AssignmentCreateCommand.ts @@ -23,7 +23,7 @@ class AssignmentCreateCommand extends CommanderCommand { .option('-c, --clone [string]', 'automatically clone the repository (SSH required) in the specified directory (this will create a subdirectory with the assignment name)') .action(this.commandAction.bind(this)); - if (SharedConfig.useSonar) { + if (SharedConfig.sonar.enabled) { this.command.requiredOption('-s, --sonar', 'add sonar to the code checking process for exercises derived from the assignment'); } } @@ -32,6 +32,7 @@ class AssignmentCreateCommand extends CommanderCommand { let members!: Array<GitlabUser> | false; let templateIdOrNamespace: string | null = null; let assignment!: Assignment; + let sonar = false; // Check access and retrieve data { @@ -46,6 +47,14 @@ class AssignmentCreateCommand extends CommanderCommand { return; } + const assignmentGetSonarSpinner: ora.Ora = ora('Checking server sonar status').start(); + sonar = (SharedConfig.sonar.enabled ? options.sonar ?? false : false); + if (sonar && !(await DojoBackendManager.isSonarEnabled())) { + assignmentGetSonarSpinner.fail(`Sonar is currently not supported by the server. Disable sonar integration or try again later.`); + return; + } + assignmentGetSonarSpinner.succeed(`Sonar is supported by the server`); + const assignmentGetSpinner: ora.Ora = ora('Checking assignment name availability').start(); if ( await DojoBackendManager.getAssignment(options.name) ) { assignmentGetSpinner.fail(`Assignment name "${ options.name }" is already taken. Please choose another one.`); @@ -71,8 +80,6 @@ class AssignmentCreateCommand extends CommanderCommand { console.log(chalk.cyan('Please wait while we are creating the assignment (approximately 10 seconds)...')); try { - const sonar = (SharedConfig.useSonar ? options.sonar ?? false : false); - assignment = await DojoBackendManager.createAssignment(options.name, members, templateIdOrNamespace, sonar); const oraInfo = (message: string) => { diff --git a/NodeApp/src/managers/DojoBackendManager.ts b/NodeApp/src/managers/DojoBackendManager.ts index b4dae90..b19436b 100644 --- a/NodeApp/src/managers/DojoBackendManager.ts +++ b/NodeApp/src/managers/DojoBackendManager.ts @@ -91,9 +91,9 @@ class DojoBackendManager { try { const response = await axios.post<DojoBackendResponse<Assignment>>(this.getApiUrl(ApiRoute.ASSIGNMENT_CREATE), Object.assign({ - name : name, - members: JSON.stringify(members), - sonar : sonar + name : name, + members : JSON.stringify(members), + useSonar : sonar }, templateIdOrNamespace ? { template: templateIdOrNamespace } : {})); if ( verbose ) { @@ -236,6 +236,11 @@ class DojoBackendManager { return false; } } + + public async isSonarEnabled() { + const sonar = await axios.get<DojoBackendResponse<{ sonarEnabled: boolean }>>(this.getApiUrl(ApiRoute.SONAR)); + return sonar.data.data.sonarEnabled; + } } -- GitLab