From 5c1d6fef90d5b4e831f72f042fed9f0aa1035438 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 | 7 ++++++- 2 files changed, 16 insertions(+), 4 deletions(-) diff --git a/NodeApp/src/commander/assignment/subcommands/AssignmentCreateCommand.ts b/NodeApp/src/commander/assignment/subcommands/AssignmentCreateCommand.ts index fcf8a53..7eb8f4c 100644 --- a/NodeApp/src/commander/assignment/subcommands/AssignmentCreateCommand.ts +++ b/NodeApp/src/commander/assignment/subcommands/AssignmentCreateCommand.ts @@ -19,6 +19,7 @@ class AssignmentCreateCommand extends CommanderCommand { private members!: Array<Gitlab.UserSchema> | undefined; private templateIdOrNamespace: string | null = null; private assignment!: Assignment; + private sonar: boolean = false; protected defineCommand() { this.command @@ -45,6 +46,14 @@ class AssignmentCreateCommand extends CommanderCommand { throw new Error(); } + const assignmentGetSonarSpinner: ora.Ora = ora('Checking server sonar status').start(); + this.sonar = (SharedConfig.sonar.enabled ? options.sonar ?? false : false); + if ( this.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.`); @@ -68,9 +77,7 @@ class AssignmentCreateCommand extends CommanderCommand { private async createAssignment(options: CommandOptions) { console.log(TextStyle.BLOCK('Please wait while we are creating the assignment (approximately 10 seconds)...')); - const sonar = (SharedConfig.sonar.enabled ? options.sonar ?? false : false); - - this.assignment = await DojoBackendManager.createAssignment(options.name, this.members!, this.templateIdOrNamespace, sonar); + this.assignment = await DojoBackendManager.createAssignment(options.name, this.members!, this.templateIdOrNamespace, this.sonar); const oraInfo = (message: string) => { ora({ diff --git a/NodeApp/src/managers/DojoBackendManager.ts b/NodeApp/src/managers/DojoBackendManager.ts index 4d1fe1d..64f048e 100644 --- a/NodeApp/src/managers/DojoBackendManager.ts +++ b/NodeApp/src/managers/DojoBackendManager.ts @@ -258,7 +258,7 @@ class DojoBackendManager { const response = await axios.post<DojoBackendResponse<Assignment>>(DojoBackendHelper.getApiUrl(ApiRoute.ASSIGNMENT_CREATE), Object.assign({ name : name, members: JSON.stringify(members), - sonar : sonar + useSonar : sonar }, templateIdOrNamespace ? { template: templateIdOrNamespace } : {})); if ( verbose ) { @@ -374,6 +374,11 @@ class DojoBackendManager { } } + public async isSonarEnabled() { + const sonar = await axios.get<DojoBackendResponse<{ sonarEnabled: boolean }>>(this.getApiUrl(ApiRoute.SONAR)); + return sonar.data.data.sonarEnabled; + } + public async createTag(name: string, type: string, verbose: boolean = true): Promise<Tag | undefined> { const spinner: ora.Ora = ora('Creating tag...'); -- GitLab